WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Rückwärtseinsetzen

 

markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 21.12.2012, 09:02     Titel:
  Antworten mit Zitat      
MaFam hat Folgendes geschrieben:
Ich vermute, wie gesagt, dass die Kondition von A dafür verantwortlich ist. Allerdings kann der Backslash-Operator damit ja auch umgehen...


Die Kondition ist laut Matlab 8.304161685879715e+018 Smile
Ich glaube das ist schlecht, oder?
Was kann man machen um die Kondition zu verbessern?
Private Nachricht senden Benutzer-Profile anzeigen


MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 21.12.2012, 11:17     Titel:
  Antworten mit Zitat      
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.

*ohne Garantie auf Erfolg
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 23.12.2012, 12:38     Titel:
  Antworten mit Zitat      
So geht es. Ich habe die Toleranz angepasst.

Code:

clc
format long

A=dlmread('data.txt');

% Nullzeilen entfernen
A( all(A ==0, 2), :) = [];

rank(A,1e-12)

% Jacobi-Normalisierung
for i=1:size(A,1)
    if(A(i,i)~=0)
        A(i,:)=A(i,:)/A(i,i);
    end
end

rank(A,1e-12)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 23.12.2012, 20:50     Titel:
  Antworten mit Zitat      
Danke, ich werde das nach den Feiertagen mal testen.
Mein stümperhafter Versuch hatte nämlich die Kondition erhöht Smile
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 02.01.2013, 16:27     Titel:
  Antworten mit Zitat      
Code:


>> rank(A)

ans =

    16

>> A( all(A ==0, 2), :) = [];
>> rank(A,1e-12)

ans =

    35

>> for i=1:size(A,2)
  if(A(i,i)~=0)
        A(i,:)=A(i,:)/A(i,i);
    end
end

rank(A,1e-12)

ans =

    25

>>
 


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 Very Happy Aber das ist dann wohl eher ein Thema für ein anderes Forum.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 02.01.2013, 17:16     Titel:
  Antworten mit Zitat      
Schau dir unbedingt dieses Paper an: http://www.uni-giessen.de/tomas.sauer/Publ/intsurvey.pdf.gz

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 02.01.2013, 17:48     Titel:
  Antworten mit Zitat      
MaFam hat Folgendes geschrieben:
Schau dir unbedingt dieses Paper an: http://www.uni-giessen.de/tomas.sauer/Publ/intsurvey.pdf.gz

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 03.01.2013, 09:30     Titel:
  Antworten mit Zitat      
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...
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 03.01.2013, 10:01     Titel:
  Antworten mit Zitat      
MaFam hat Folgendes geschrieben:
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...


Reden wir beide von dieser URL aus der PDF? http://www.mi.uni-erlangen.de/~sauer/interpol

Meine verlinkte Library war nur als Beispiel für eine kleine schlanke Bibliothek zu sehen Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 03.01.2013, 10:29     Titel:
  Antworten mit Zitat      
Gut, dann dies hier: http://sourceforge.net/projects/mvinterp/

Es ist eine ausführliche Beschreibung dabei. Zudem gibt es (schlanken) C-Code!

Mit der Bib. kann man sogar approximieren, was du ja letztlich auch getan hast....
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 03.01.2013, 10:34     Titel:
  Antworten mit Zitat      
MaFam hat Folgendes geschrieben:
Gut, dann dies hier: http://sourceforge.net/projects/mvinterp/

Es ist eine ausführliche Beschreibung dabei. Zudem gibt es (schlanken) C-Code!

Mit der Bib. kann man sogar approximieren, was du ja letztlich auch getan hast....


Interessant, das hab ich noch nicht gefunden.
Allerdings hat Library als abhängigkeit die Gnu Scientific Library, und die ist riesen groß.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 03.01.2013, 10:39     Titel:
  Antworten mit Zitat      
Na,

Code:

#include<gsl/gsl_blas.h>
#include<gsl/gsl_linalg.h>
#include<gsl/gsl_matrix.h>
#include<gsl/gsl_permutation.h>
#include<gsl/gsl_permute_vector.h>
#include<gsl/gsl_vector.h>
 


ist doch nicht die Welt...
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 03.01.2013, 10:54     Titel:
  Antworten mit Zitat      
MaFam hat Folgendes geschrieben:
Na,

Code:

#include<gsl/gsl_blas.h>
#include<gsl/gsl_linalg.h>
#include<gsl/gsl_matrix.h>
#include<gsl/gsl_permutation.h>
#include<gsl/gsl_permute_vector.h>
#include<gsl/gsl_vector.h>
 


ist doch nicht die Welt...


Ich will gar nicht erst anfangen da irgendwas zu includen...da hängt mit Sicherheit ein ganzer Rattenschwanz dran. Very Happy 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.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 03.01.2013, 10:58     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 07.01.2013, 08:45     Titel:
  Antworten mit Zitat      
MaFam hat Folgendes geschrieben:
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

cond(polynom1)

cond(polynom2)
 


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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.