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

Startwerte in Abhängigkeit des Newton-Verfahren-Ergebnisses

 

Alisa

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2013, 15:27     Titel: Startwerte in Abhängigkeit des Newton-Verfahren-Ergebnisses
  Antworten mit Zitat      
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)
Code:

clear all


i=1;
j=1;
z=1;
while i<251
    x=(-1+i*(1-(-1)/250));
    startwertx(1,i)=x;
   
   i=i+1;
   while j<251
    y=(-1+j*(1-(-1)/250));
    startwerty(1,j)=y;
   j=j+1;
   
   end
   
%[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([-260 260 -260 260]);
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

%Startwert führt zu keinem Ergebnis -> gelb

    plot(startwertx(1,z),startwerty(1,z),'y+')
    hold on
    drawnow;
   
z=z+1;




end


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.04.2013, 09:51     Titel: Re: Startwerte in Abhängigkeit des Newton-Verfahren-Ergebni
  Antworten mit Zitat      
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

% Besser:
startwert = (1:250) * (1 + 1/250) - 1;

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



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 - 2025 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.