Startwerte in Abhängigkeit des Newton-Verfahren-Ergebnisses
Alisa
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 07.04.2013, 15:27
Titel: Startwerte in Abhängigkeit des Newton-Verfahren-Ergebnisses
Hallo liebe Matlab-Champs,
ich habe ein für mich unüberwindbares Problem. Ich soll ein Nichtlineares Gleichungssystem via Newton-Verfahren lösen, und die Lösung, abhängig davon ob und wenn ja, zu welchem Ergebnis die Konvergenz führt, einfärben. Ausserdem soll die graphische Darstellung der Ergebnisse und ihrer Startwerte während der Berechnung geplottet werden. Bisher bekomme ich die richtigen drei Ergebnisse heraus, allerdings hapert es an der Visualisierung und ich verzweifle bald noch. Matlab und ich sind leider nicht die besten Freunde. Ausserdem bin ich quasi Anfängerin.Bin froh um JEDE Hilfe!
Was mich ebenfalls wundert: Seitdem ich die If-Abfragen, zum Herausfinden zu welchem Ergebnis der Startwert kommt, eingefügt habe, werden weder das Gitter noch die Achsen noch das hold on im Plot beachtet. Das macht mich wahnsinnig.
Im folgenden mein Code (Ohne Newton, Jacobi und die Gleichungsfunction)
%[xLast,err,n]=newton([x(z) ; y(z)],'gleichungen',1e-5,50) [xLast,err,n]=newton([x ; y],'gleichungen',1e-5,50);
Erg(1,z)=xLast(1,1);
Erg(2,z)=xLast(2,1);
grid axis([-260260-260260]);
plot(xLast(1,1),xLast(2,1),'k*') hold on
drawnow;
%Startwert führt zu (1,0)->rot
if n<50 && err<1e-5 if xLast(2,1)<1e-3 && xLast(2,1)>-0.5 plot(startwertx(1,z),startwerty(1,z),'r+') hold on
drawnow;
end
%Startwert führt zu (-0.5,0.8...) ->blau
if xLast(2,1)>0.5 plot(startwertx(1,z),startwerty(1,z),'b+') hold on
drawnow;
end
%Startwert führt zu (-0.5,-0.8..)->grün
if xLast(2,1)<-0.5 plot(startwertx(1,z),startwerty(1,z),'g+') hold on
drawnow;
end end
Verfasst am: 08.04.2013, 09:51
Titel: Re: Startwerte in Abhängigkeit des Newton-Verfahren-Ergebni
Hallo Alisa,
Du könntest einfach den debugger verwenden, um Zeile für Zeile durch den Code zugehen -- wenn Dein Programm nicht mit "clear all" beginnen würde. Die findet man aber so häufig am Anfang von Programmen von Programmier-Anfängern, dass ich mich nur wundern kann, welche Dozenten und/oder Lehrbücher so einen Mist empfehlen. Einerseits löscht "clearr all" neben den Variablen auch alle Funktionen aus dem Speicher und das erneute Einlesen von der Festplatte benötigt viel Zeit ohne jede Art von Vorteil. Andererseits löscht es aber auch alle Breakpoints und macht damit das Debuggen unmöglich. Und alles, was das Debuggen einschränkt, ist grundsätzlich eine massiv schlechte Idee beim erstellen von Programmen.
Also: "clear all" löschen und am besten denjenigen, der es empfohlen hatte, bitten, hier im Forum darüber zu diskutieren.
Dann einen Breakpoint setzen (rote Punkte auf der linken Seite im Editor), das Programm nochmal starten und dann Zeile für Zeile durch den Code gehen und die lokalen Variablen kontrollieren.
Man kann den Code noch deutlich vereinfachen, z.B.:
Code:
% Statt: while j<251
y=(-1+j*(1-(-1)/250));
startwerty(1,j)=y;
j=j+1;
end
Hier ist es merkwürdig, dass die Schleife über j die Werte überschreibt, die in der Schleife über i erzeugt werden. Ist das so gewollt?
Die Probleme mit den IF-Abfragen sind sicherlich nicht, dass die entsprechenden Befehle "nicht beachtet" werden, sondern sie werden nicht ausgeführt. Der Debugger wird dir helfen zu verstehen, weshalb nicht.
Gruß, Jan
Einstellungen und Berechtigungen
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.