Anwendung der Methode der kleinsten Quadrate mit Scilab
- Im stationären Zustand fallen alle Ableitungen nach der Zeit in den Modellgleichungen weg.
- Das bedeutet, man erhält einfache algebraische Gleichungen.
- In ihnen gelten nun die Parameter als Variablen und die Bewegungsgrößen als aus der Meßreihe bekannt.
- Verwendung der elektrischen Teilmodell-Gleichung:
|
Bild 0-1: Elektrisches Teilmodell im stationären Zustand.
- Mit den Messungen aus
Code 7.1.4: Stationäre Messung ergibt sich dann folgendes lineare Gleichungssystem als Grundlage für die Methode der kleinsten Quadrate:
|
Bild 0-2: LGS aus Messungen und stationärer Gleichung.
- In dem Gleichungssystem entspricht die erste Spalte der Matrix B dem Strom in A, die zweite der Winkelgeschwindigkeit in rad/s.
- Letztere ergibt sich aus der gemessenen Frequenz nach der Formel ω=2πf/n, wobei n=12 die Anzahl der Löcher der Lochscheibe ist.
- Im Vektor b stehen die gemessenen Spannungen.
- Vektor r beinhaltet die Residuen (Fehler), deren Quadrate zu minimieren sind.
|
- Durch Lösung des folgenden linearen Gleichungssystems können nun die Parameter k und R bestimmt werden:
|
Bild 0-3: Zu lösendes LGS.
- Dabei bestimmt sich die Matrix A und der Vektor b wie folgt:
|
Bild 0-4: Bestimmung von A und b.
- Durch dieses Vorgehen werden die Fehlerquadrate minimiert.
- Das folgende Scilab-Programm liest die Tabelle mit den Meßwerten ein und bestimmt wie gerade beschrieben R und k.
|
//Vorbereitung: mit cd <Pfad> in das Verzeichnis gehen, wo sich die Meßdaten befinden
//Matrix mit Meßdaten laden:
M = M=fscanfMat("stationaer2.txt")
//Dimensionen feststellen:
[zeilen,spalten] = size(M)
//Konstante PI merken:
PI = 3.1415926535897932384626433832795
//Matrix B erzeugen:
//2. Spalte von M mal 0.001 wird erste von B
//3. Spalte von M mal 2pi/12 wird zweite von B
B = [M(:,2).*0.001,M(:,3).*(2.0*PI/12.0)]
//Matrix d sind die negativen Werte der Spannung U, also die erste Spalte von M:
d = M(:,1).*(-1.0)
//Bestimmung von k und R:
//Scilab bietet schon die Kleinste Quadrate-Methode als Funktion an, der man einfach B und -d übergibt.
//Hier muß man anders, als wenn man es von Hand macht nicht d, sondern -d übergeben:
c = lsq(B,-d)
//liefert hier:
//R = 15.706362
//k = 0.0166143
//Wir können aber auch A und b bestimmen und das LGS lösen:
A = B'*B
b = B'*d
//Das Gleichungssystem kann über die inverse Matrix von A gelöst werden:
c2 = inv(A)*(-b)
//(es wird das gleiche Ergebnis wie oben geliefert.)
Code 0-1: Scilab-Programm zur Bestimmung von R und k mittels der Methode der kleinsten Quadrate.
Download der Meßdaten und des obigen Scilab-Skripts
Diskussion
- Mit R=15,7Ω wird hier ein stark abweichender Wert von den gemessenen 24Ω berechnet.
- Daher stellt sich die Frage, ob das berechnete k brauchbar ist.
- Alternativ wird nun der bekannte ohmsche Widerstand in die Rechnung eingesetzt und nur k bestimmt.
|
//Matrix mit Meßdaten laden:
M=fscanfMat("stationaer2.txt")
//Dimensionen feststellen:
[zeilen,spalten] = size(M)
//Konstante PI merken:
PI = 3.1415926535897932384626433832795
//Matrix B erzeugen (hier wird nur die Spalte mit Omega zur Bestimmung von k verwendet):
//2. Spalte von M mal 0.001 wird erste von B
//3. Spalte von M mal 2pi/12 wird zweite von B
B = [M(:,3).*(2.0*PI/12.0)]
//Matrix d sind die negativen Werte der Spannung U, also die erste Spalte von M,
//aber hinzu kommt nun das bekannte I*R, mit R=24Ohm (und Umrechnung von mA in A)
R=24.0
d = M(:,1).*(-1.0) + M(:,2).*(R*0.001)
//Bestimmung von k:
//Scilab bietet schon die Kleinste Quadrate-Methode als Funktion an, der man einfach B und -d übergibt.
//Hier muß man anders, als wenn man es von Hand macht nicht d, sondern -d übergeben:
c = lsq(B,-d)
//liefert hier:
//k = 0.0159620
//Wir können aber auch A und b bestimmen und das LGS lösen:
A = B'*B
b = B'*d
//Das Gleichungssystem kann über die inverse Matrix von A gelöst werden:
c2 = inv(A)*(-b)
//(es wird das gleiche Ergebnis wie oben geliefert.)
Code 0-2: Scilab-Programm zur Bestimmung von k bei Vorgabe von R mittels der Methode der kleinsten Quadrate.
Diskussion
- Obwohl R sehr stark variiert zwischen beiden Berechnungen, wird k ungefähr gleich berechnet:
- Berechnung1: k=0.0166143
- Berechnung2: k=0.0159620
- Somit sind die Werte relativ vertrauenswürdig.
|
Download der Meßdaten und der beiden obigen Scilab-Skripte.