Forum:  Matlab
Thema: Lineare Ausgleichsrechnung und Normalgleichung
Themen-Übersicht
s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
Themenstart: 2021-05-15 16:53

Hallo zusammen, könnte mir jemand bitte dabei helfen?




Ich weiß nicht wie ich die Daten mit Ausgleichsgerade und Ausgleichsparabel bei Matlab approximieren soll.

Danke im Voraus! :)


Kitaktus
Senior
Dabei seit: 11.09.2008
Mitteilungen: 6872
Wohnort: Niedersachsen
Beitrag No.1, eingetragen 2021-05-15 18:20

Kannst Du eine lineare Gleichung aufstellen, so dass die linke Seite den Wert auf der Ausgleichsgeraden (-Parabel) darstellt und die rechte Seite die  gegebenen Körpergrößen?

Welches Ergebnis erhält man, wenn man Matlab so eine (überbestimmte!) Gleichung lösen lässt? Das habt ihr sicher besprochen, aber auch die Matlab-Hilfe dürfte einiges dazu zu sagen haben.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
Beitrag No.2, vom Themenstarter, eingetragen 2021-05-15 23:34

Danke erstmal für deine Antwort!
Ausgleichsgerade : y(t) = a + ßt

Ich habe nicht verstanden was du damit gemeint hast dass die linke Seite den Wert auf der Ausgleichsgeraden (-Parabel) darstellt
Könntest du mir bitte das deutlicher erklären?


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
Beitrag No.3, vom Themenstarter, eingetragen 2021-05-17 05:43

fehlt noch was oder habe ich irgendwas falsch verstanden?
Danke im Voraus für deine Antwort! :)

Matlab
function Alghabra05
 
  jahr = [1 : 18];
  mann = [68 84 93 101 108 115 122 128 133 139 144 150 156 164 171 175 179 180];
  frau = [66 83 92 100 108 114 122 127 132 139 144 151 157 161 164 166 167 167];
 
  function  Ausgleichsrechnung
    disp("i) Ausgleichsgerade ------------------------------------------")
    % alpha und beta für das Geschlecht m für Ausgleichsgerade berechnen
    p = polyfit(jahr,mann,1);
    beta = p(1);
    alpha = p(2);
    % alpha und beta für das Geschlecht w für Ausgleichsgerade berechnen
    q = polyfit(jahr,frau,1);
    beta1 = q(1);
    alpha1 = q(2);
    %Ausgleichsgerade
    m_koerpergroesse_i = alpha + beta*jahr
    w_koerpergro0esse_i = alpha1 + beta1*jahr
 
 
    disp("ii) Ausgleichsparabel ------------------------------------------")
    % alpha, beta und gama für das Geschlecht m für Ausgleichsparabel berechnen
    p1 = polyfit(jahr,mann,2);
    gama2 = p1(1);
    beta2 = p1(2);
    alpha2 = p1(3);
    % alpha, beta und gama für das Geschlecht w für Ausgleichsparabel berechnen
    q1 = polyfit(jahr,frau,2);
    gama3 = q1(1);
    beta3 = q1(2);
    alpha3 = q1(3);
    %Ausgleichsparabel
    m_koerpergroesse_ii = alpha2 + beta2 * jahr + gama2 * (jahr).^2
    w_koerpergroesse_ii = alpha3 + beta3 * jahr + gama3 * (jahr).^2
 
  end
 
  % Die Funktion Ausgleichsrechnung aufrufen
  Ausgleichsrechnung
 
  % Matrix A und Vektor b für Ausgleichsgerade erstellen
  A = ones(18,2);
  A(1:18,2) = 1:18;
  b = m_koerpergroesse_i';    % Vektor für das Geschlecht m
  b1 = w_koerpergro0esse_i';  % Vektor für das Geschlecht w
 
  %Normalgleichungen bestimmen 
  #A' * A * x = A' * b
  % Die linearen Gleichungssysteme lösen  
  x = mldivide(A' * A , A' * b);     %für das Geschlecht m
  x1 = mldivide(A' * A , A' * b1);   %für das Geschlecht w
 
 
  % Matrix B und Vektor b für Ausgleichsgerade erstellen
  B = ones(18,3);
  B(1:18,2) = 1:18;
  B(1:18,3) = (1:18).^2;
  b2 = m_koerpergroesse_ii';    % Vektor für das Geschlecht m
  b3 = w_koerpergroesse_ii';    % Vektor für das Geschlecht w
  % Die linearen Gleichungssysteme lösen  
  z = mldivide(B' * B , B' * b2);     %für das Geschlecht m
  z1 = mldivide(B' * B , B' * b3);    %für das Geschlecht w
 
 
  % Grafik darstellen  
  plot(jahr,mann,'+',0:20,polyval(p,0:20))
  hold on
  plot(jahr,frau,'o',0:20,polyval(q,0:20))
  legend('mann','frau')
 
  % Residuum berechnen
  r = b - A*x;        %Für das Geschlecht m von Ausgleichsgerade
  r1 = b1 - A*x1;     %Für das Geschlecht w von Ausgleichsgerade
  r2 = b2 - B*z;      %Für das Geschlecht m von Ausgleichsparabel
  r3 = b3 - B*z1;     %Für das Geschlecht w von Ausgleichsparabel
 
  %Die euklidische Norm des Residuums berechnen 
  for i = 1 : length(r)
  r_norm(i) = norm(r(i));
  r1_norm(i) = norm(r1(i));
  r2_norm(i) = norm(r2(i));
  r3_norm(i) = norm(r3(i));
 
  end
 
  %Residuum zeigen
  r_norm;
  r1_norm;
  r2_norm;
  r3_norm;
 
 
 
end


Kitaktus
Senior
Dabei seit: 11.09.2008
Mitteilungen: 6872
Wohnort: Niedersachsen
Beitrag No.4, eingetragen 2021-05-17 09:48

Ohne Anspruch auf Vollständigkeit:

a) Vielleicht liegt es an der unterschiedlichen Matlab-Version. Bei mir müssen die Zeichen innerhalb des disp-Befehls mit Apostrophen (') zusammengefasst werden, nicht mit Anführungsstrichen (").

b) Im Teil "Ausgleichsrechnung" verwendest Du "b = m_koerpergroesse_i';"
Das sind die interpolierten Werte aus dem ersten Teil. Sinnvoll wären aber die Original-Daten.
Das müsste Dir auffallen, wenn Du Dir die berechneten Residuen tatsächlich anzeigen lässt.

c) Bei Plotten wäre es hilfreich, die Ausgleichskurven für Männer und Frauen unterschiedlich zu färben o.ä. Außerdem plottest Du vier Kurven, Deine Legende enthält aber nur zwei Einträge und die Zuordnung passt nicht.

d) Du berechnest nicht die Norm des Residuums, sondern die Norm jedes einzelnen Wertes.


Bemerkung 1: Mit der Verwendung von "polyfit" ziehst Du Dich geschickt aus der Affäre. Das ist die Funktion, bei der man eben nicht wissen muss, wie die lineare Algebra dahinter aussieht.

Bemerkung 2: Was Du danach machst, ist fast genau das, worauf ich hinaus wollte. Wenn Du Dir die Hilfe von "mldivide" anschaust, wirst Du aber feststellen, dass die Multiplikation mit A' nicht nötig ist. In einem überbestimmten Gleichungssystem "Ax=b", berechnet die Funktion automatisch das x, das die 2-Norm des Residuums minimiert.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
Beitrag No.5, vom Themenstarter, eingetragen 2021-05-17 16:12

Danke erstmal für deine Antwort!


d) Du berechnest nicht die Norm des Residuums, sondern die Norm jedes einzelnen Wertes.“

Sollte einfach nur norm(r) schreiben? Aber in der Aufgabenstellung steht dass ich die euklidische Norm des Residuums zu jeder Lösung berechnen soll deswegen habe ich das so gemacht.
Falsch?


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
Beitrag No.6, vom Themenstarter, eingetragen 2021-05-18 05:02

Könntest du mir bitte nur sagen was ich genau machen soll?  Soll ich nur norm(r) berechnen? in der Aufgabenstellung steht dass ich die euklidische Norm des Residuums zu jeder Lösung berechnen soll deswegen habe ich das so gemacht.
Habe ich falsch verstanden?
Danke im Voraus für deine Antwort! :)


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
Beitrag No.7, vom Themenstarter, eingetragen 2021-05-19 10:16

?


Kitaktus
Senior
Dabei seit: 11.09.2008
Mitteilungen: 6872
Wohnort: Niedersachsen
Beitrag No.8, eingetragen 2021-05-19 15:08

Man interessiert sich ja dafür, wie gut die Ausgleichsgerade (-Parabel) den tatsächlichen Verlauf wiedergibt. Dafür ist nicht die Abweichung an einem Punkt entscheidend (die kann durchaus sehr klein sein), sondern die "Gesamtabweichung". Die naheliegendste Definition für diese "Gesamtabweichung" ist die Norm des Residuen-Vektors (Wobei es natürlich sehr viele Normen gibt, die dafür in Betracht kommen, hier ist nach der euklidischen Norm gefragt). In dieser Aufgabe wäre das "norm(r)".
Im Text ist von mehreren Normen die Rede, da auch mehrere Ausgleichsprobleme gelöst werden.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
Beitrag No.9, vom Themenstarter, eingetragen 2021-05-19 20:45

Wie ich verstanden habe, soll ich dann so schreiben :
MATLAB
 % Residuum berechnen
  r = b - A*x;        %Für das Geschlecht m von Ausgleichsgerade
  r1 = b1 - A*x1;     %Für das Geschlecht w von Ausgleichsgerade
  r2 = b2 - B*z;      %Für das Geschlecht m von Ausgleichsparabel
  r3 = b3 - B*z1;     %Für das Geschlecht w von Ausgleichsparabel
 
 norm(r)
 norm(r1)
 norm(r2)
 norm(r3)
 


oder?

Danke im Voraus! :)


Kitaktus
Senior
Dabei seit: 11.09.2008
Mitteilungen: 6872
Wohnort: Niedersachsen
Beitrag No.10, eingetragen 2021-05-20 03:36

Ja, so würde ich das machen.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
Beitrag No.11, vom Themenstarter, eingetragen 2021-05-20 03:36

Danke für deine tolle Hilfe! :))


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
Beitrag No.12, vom Themenstarter, eingetragen 2021-05-30 17:46

Hi Kitaktus, könntest du mir bitte dabei helfen?
LinkPolynominterpolation mit Lagrange-Polynomen
Danke im Voraus! :)




Dieses Forumbeitrag kommt von Matroids Matheplanet
https://https://matheplanet.de

Die URL für dieses Forum-Thema ist:
https://https://matheplanet.de/default3.html?topic=253920=41003
Druckdatum: 2021-07-25 13:47