Eine Kondition von 8.304161685879715e+018 kann man durchaus als ziemlich mies bezeichnen. Um die Stabilität zu verbessern, könntest du eine Jacobi-Normalisierung* durchführen. Dazu teilst du die Zeilen durch ihr Pivotelement, was in diesem Fall die Elemente auf der Diagonalen sind.
Danke, ich werde das nach den Feiertagen mal testen.
Mein stümperhafter Versuch hatte nämlich die Kondition erhöht
Meine Ausgangsmatrix kommt ja auch aus 3 Messwerten, die ich in ein 3 Dimensionales Polynom 4. Ordnung eingesetzt habe.
http://bishopw.loni.ucla.edu/air5/3Dnonlinear.html
Interessanterweise passen meine Werte 1:1 mit denen dieses Polyfitn Scripts überein. http://www.mathworks.com/matlabcent.....leexchange/34765-polyfitn
Nur wenn man Matab alleine lösen lässt (nachdem man das Gleichungssystem aufgestellt hat), kommen andere Ergebnisse raus.
Wenn ich das Plotte, sieht man die Unterschiede, aber dennoch passen sie zu den Messwerten. Wirklich falsch scheint also weder meins/polyfitn noch Matlab itself zu sein.
Schlussendlich komme ich zu dem Entschluss, dass meine Scripte jetzt richtig rechnen. Am Ende soll es auf einem Microcontroller laufen (und Matlab verwende ich nur für Kontrollrechnungen), und da stoße ich in C trotz long double kurz und kräftig an die Präzisionsgrenzen Aber das ist dann wohl eher ein Thema für ein anderes Forum.
Insbesondere dürfte das Kapitel "7. Final remarks" für dich sehr interessant sein. Dort wird auch auf eine C++ Bibliothek verwiesen. Der klassische Ansatz über die Vandermonde-Matrix ist schlicht und einfach Mist, wegen der schlechten Kondition.
Insbesondere dürfte das Kapitel "7. Final remarks" für dich sehr interessant sein. Dort wird auch auf eine C++ Bibliothek verwiesen. Der klassische Ansatz über die Vandermonde-Matrix ist schlicht und einfach Mist, wegen der schlechten Kondition.
Die URL in dem Paper läuft auf ein 404- Mit einer C++ Library ist mir auch wenig geholfen, ich brauche etwas für C wenn.
LAPACK, GSL etc habe ich mir schon alle angesehen, ist aber zu fett für den Microcontroller.
Lightweight wie http://www.mhsatman.com/cmatrix.php wäre genau was ich bäuchte - entweder für die extended precision oder für die ganze multivariate polynomial interpolation.
Ich kann den Link in Firefox und IE öffnen. Auf meinem Smartphone ebenfalls. Du solltest die Software (auch Adobe PDF) aktualisieren?!
Die angegebene Bibliothek ist zwar in C++ implementiert. Ich denke jedoch, dass sich die relevanten Funktionalitäten extrahieren und nach C reduzieren lassen.
Inwiefern dir die von dir angegebene C-Bibliothek nützen soll, sehe ich nicht...
Ich kann den Link in Firefox und IE öffnen. Auf meinem Smartphone ebenfalls. Du solltest die Software (auch Adobe PDF) aktualisieren?!
Die angegebene Bibliothek ist zwar in C++ implementiert. Ich denke jedoch, dass sich die relevanten Funktionalitäten extrahieren und nach C reduzieren lassen.
Inwiefern dir die von dir angegebene C-Bibliothek nützen soll, sehe ich nicht...
Ich will gar nicht erst anfangen da irgendwas zu includen...da hängt mit Sicherheit ein ganzer Rattenschwanz dran. Vor ein paar Wochen hatte ich das auch schon mal versucht. Und vermutlich müsste ich dann auch alles komplett neu schreiben. Meins funktioniert ja, nur unter gewissen Umständen reicht die Präzision von long double nicht mehr aus.
Ich denke nicht, dass da ein Rattenschwanz dranhängt. Sicherlich, man muss sich da erstmal reinfuchsen. Ich weiß halt nicht, wie professionell deine Anwendung sein muss. Wenn es sich allerdings um eine Industrieanwendung handelt, muss man unbedingt den numerisch stabileren Ansatz wählen.
Ich denke nicht, dass da ein Rattenschwanz dranhängt. Sicherlich, man muss sich da erstmal reinfuchsen. Ich weiß halt nicht, wie professionell deine Anwendung sein muss. Wenn es sich allerdings um eine Industrieanwendung handelt, muss man unbedingt den numerisch stabileren Ansatz wählen.
Ja, da ist was dran.
Nach weiteren Untersuchungen bin ich zu dem Schluss gekommen, dass die Ergbniss bis zu einer Kondition von 10^3 über ein stimmen. Sobald die Kondition noch schlechter wird, weichen die Ergebnisse immer mehr davon ab.
Hier mal ein Beispiel
Code:
U1=repmat((100:100:1000)',10,1);
U2=repmat((1:10)',10,1);
II1 =[];
for i=1:10
II1 = [II1 ;ones(10,1)*10*i];
end
II2 =[];
for i=1:10
II2 = [II2 ;ones(10,1)*1*i];
end
%polynom 3rd Order
polynom1=ones(size(U1,1),10);
for z=1:size(U1,1)
polynom1(z,:)=[1,U1(z),II1(z),U1(z)^2,U1(z)*II1(z),II1(z)^2,U1(z)^3,U1(z)^2*II1(z),U1(z)*II1(z)^2,II1(z)^3];
end
polynom2=ones(size(U2,1),10);
for z=1:size(U2,1)
polynom2(z,:)=[1,U2(z),II2(z),U2(z)^2,U2(z)*II2(z),II2(z)^2,U2(z)^3,U2(z)^2*II2(z),U2(z)*II2(z)^2,II2(z)^3];
end
U1, II1 und U2, II2 sind quasi identisch aufgebaut, nur die Größenordnung ist anders. Man sollte eigentlich meinen dass die Kondition gleich bleibt, tut sie aber nicht.
Ich könnte auch in einem Matheforum nachfragen, warum sich das so verhält, aber dann würd ich es vermutlich noch weniger verstehen.
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.