import numpy as np import matplotlib.pyplot as plt # Erst später benötigt, wenn man Punktewolken # automatisch erzeugen möchte. from random import random, randrange, seed # Minimaler und maximaler x-Wert im Koordinatensystem. # Dieselber Werte werden auch als minimale und maximale y-Werte verwendet. minx = 0 maxx = 10 ######################### # Punktwolke definieren # #########################h # Anzahl der Punkte n = 5 # Liste der x-Koordinaten der Punkte. liste_x = [0.9, 2.1, 3, 5, 9] # Liste der y-Koordinaten der Punkte. liste_y = [4, 2.1, 5.3, 3.4, 6] # Ausgabe dieser beiden Listen: print(f'{liste_x=}') print(f'{liste_y=}') ######################################################### # Koordinatensystem festlegen und Punktewolke zeichnen. # ######################################################### axis = plt.gca() # "get current axes" axis.set_aspect('equal') # Einheit in beide Richtungen gleich lang. axis.set_xlim([minx, maxx]) # Auf x-Achse dargestelltes Intervall. axis.set_ylim([minx, maxx]) # Dasselbe für die y-Achse. # Gitter (Häuschenpapier) definieren. plt.xticks(np.arange(minx, maxx+1, 1)) axis.xaxis.grid(color='gray', linestyle='dashed') plt.yticks(np.arange(minx, maxx+1, 1)) axis.yaxis.grid(color='gray', linestyle='dashed') # Punkte einzeichnen. plt.plot(liste_x, liste_y, marker = "o", mfc = "red", linestyle='None') #################################### # Berechnung der Ausgleichsgeraden # #################################### # Ab hier sind gewisse Aufräge zu erledigen. # Insbesondere ist alles, was als "falsch" markiert ist, # zu korrigieren. # Einige Hilfen unterstützen dich hoffentlich dabei. # Diese Hilfen haben nichts mit dem eigentlichen Problem, # die Ausgleichsgerade zu zeichnen, zu tun. # Hier ein paar Hilfen: # Hilfe 1: # Wenn du eine Liste a = [3, 6, 2] # von Zahlen hast, kannst du ihre Summe wie folgt berechnen: s = sum(a) # und zur Kontrolle ausgeben. print(s) # Hilfe 2: # Wenn du eine Liste a = [3, -10, 5] # von Zahlen hast, kannst du eine Liste # der Quadrate der Zahlen wie folgt berechnen q = [x**2 for x in a] # und zur Kontrolle ausgeben print(q) # Ähnlich kannst du auch alle Zahlen um 5 erhöhen: b = [x+5 for x in a] print(b) # Hilfe 3: # Wenn du für jeden Punkt unserer Punktewolke die Differenz zwischen x- und y-Koordinate berechnen willst # und die Ergebnisse in eine Liste packen willst, so geht das so: c = [liste_x[i] - liste_y[i] for i in range(n)] # Ausgabe zur Kontrolle: print(c) # Nun kannst du die Summe der Quadrate all dieser Differenzen wie folgt berechnen und ausgeben. summe = sum([x**2 for x in c]) print(summe) # Mittelwerte berechnen x_mittel = 6 # falsch y_mittel = 6 # falsch print(f'{x_mittel=}') print(f'{y_mittel=}') # Die Steigung der Ausgleichsgeraden ist ein Bruch mit Zähler zaehler = -1 # falsch # und Nenner nenner = 4 # falsch # Steigung der Ausgleichsgeraden m_ausgleich = zaehler/nenner # Ausgleichsgerade als Funktion def g(x): return m_ausgleich*(x-x_mittel) + y_mittel # Hilfe 3: # Hier sind zwei plot-Befehle, aus denen du lernen kannst, # wie man Verbindungsstrecken zwischen zwei Punkten zeichnet. plt.plot([3, 8], [1, 2], color='green') plt.plot([5, 6], [6, 9], color='purple') # Ausgleichsgerade einzeichnen. # Ergänze einen Befehl, der die Ausgleichsgerade einzeichnet. plt.title(f"""Berechnete Ausgleichsgerade: $y=\ell(x)={m_ausgleich:.3f} \cdot (x-{x_mittel:.3f}) + {y_mittel:.3f}$""") # Speichern des Bildes als png-Datei. # Funktioniert vermutlich nur, # wenn du lokal auf deinem Rechner arbeitest. plt.savefig('ausgleichsgerade-anfangs-falsch.png') plt.show() plt.close()