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

Visualisierung der Newtonverfahrens HILFE

 

Mumpe
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 06.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2011, 12:33     Titel: Visualisierung der Newtonverfahrens HILFE
  Antworten mit Zitat      
Hallo, ich habe eine leicht dringliche Frage:

Ich soll das Newtonverfahren veranschaulichen.

Veranschaulichen sie die funktionsweise des Newtonverfahrens, indem sie dessen Iterationsfolge graphisch darstellen:

plottens sie dazu die jeweilige Funktion, deren Nullstelle berechnert werden soll und sie nacheinander die Punkte (X0, F(X0)), (X1,0), (X1, F(X1)),...(Xn,0 F(Xn)) bis sie die Nullstelle erreicht haben oder die differenz zwischen Xn und der Nullstelle so klein geworden ist, dass man sie in der Graphischen Darstellung nicht mehr erkennen kann. Wählen sie zur verfanschaulichung des verfahrens folgende Funktionen.

1a)

y=x³-2x+2 , Startwerde X0=0,5 und X0=0
Probieren sie weitere Startwerde ihrer Wahl aus.

Da ich mit Matlab sehr sehr wenig erfahrung habe, würde ich mich freuen, wenn mir irgendwer ein paar tipps zur vorgehensweise geben könnte.

Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 23.06.2011, 13:25     Titel:
  Antworten mit Zitat      
Hier wird dir allerdings niemand deine Hausaufgaben erledigen. Sag uns doch bitte, was du dir schon angeschaut hast, was du schon ausprobiert hast und stelle dann klare Fragen wo Probleme oder Fehlermeldungen auftauchen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2011, 20:50     Titel:
  Antworten mit Zitat      
Hey, ich hab die gleiche Aufgabe zu machen...^^

Hier mein bisheriges Werk:
Code:

clc;
clear all;
fx=@(x) x^3-2*x+2;
f1x=@(x) 3*(x^2)-2;
eps=1e-6;
x(i);
x(i+1);
% Startwert
x(0)=0.5;

% Iteration beginnend ab i=0 (Startwert)
for i=0:7,fx(x(i))>epsvalentino rossi
    x(i+1)=x(i)-(fx(x(i))/f1x(x(i)));
end;
 


Problem ist nur, es gibt einige Fehlerwerte aus:

Code:

??? Error using ==>
sym.sym>checkindex at 2590
Index must be a positive
integer or logical.

Error in ==>
sym.sym>privformatscalar at
2540
    checkindex(x);

Error in ==>
sym.sym>privformat at 2524
    s = privformatscalar(x);

Error in ==>
sym.sym>sym.subsref at 1364
                [inds{k},refs{k}]
                =
                privformat(inds{k});

UND

??? Undefined function or
method 'x' for input
arguments of type 'double'.
 
Private Nachricht senden Benutzer-Profile anzeigen
 
oho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2011, 02:38     Titel:
  Antworten mit Zitat      
while anstatt for wäre wohl sinnvoller

und man sollte am ende der schleife x=x1 machen, ansonsten rechnet matlab ja immer mit dem gleichen wert

ansonsten dürfte sowas ja echt kein problem sein...
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2011, 19:21     Titel:
  Antworten mit Zitat      
Inzwischen hab ich die Lösung etwas umgeschrieben, nur es sieht nicht so aus, wies aussehen soll...:

Code:

clc;
clear all;
fx=@(x) x.^3-2*x+2;
f1x=@(x) 3*(x.^2)-2;
eps=1e-6;

%Startwert
x(1)=0.5;
x(2)=0;

%Iteration beginnend ab i=1 (Startwert)
i=1;
while abs(fx(x(i)))>eps
    x(i+1)=x(i)-(fx(x(i))/f1x(x(i)));
    i=i+1;
end
 


so nun hab ich die x-Werte und die y-Werte in einen jeweiligen Vektor geschrieben und geplottet, es kommt allerdings nur eine Gerade raus. Und wenn ich noch dazu die Nullstellen mit den dazugehörigen Funktionswerten mir anzeigen lasse, dann kommt nur ein komischer Graph raus.

Code:

px=[x(1) x(2)]
py=[fx(x(1)) fx(x(2))]
 


und der Graph ist als Anhang mit dran.
Edit by _Peter: Wenn du die Codeumgebung benutzt, musst du die BBCodes zulassen. Danke.

Komisch.jpg
 Beschreibung:

Download
 Dateiname:  Komisch.jpg
 Dateigröße:  15.05 KB
 Heruntergeladen:  557 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
oho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2011, 20:09     Titel:
  Antworten mit Zitat      
wenn du nur die y und x werte der jeweiligen iterationsstellen darstellst, dann kommt klar eine gerade zwischen den punkten raus.

wenn du die kurve der funktion hinterlegen willst, dann musst du auch die y-werte der funktion vom kleinsten x bis zum höchsten x ausrechnen lassen.
Code:

clc;
clear all;

fx=@(x) x.^3-2*x+2;
f1x=@(x) 3*(x.^2)-2;
eps=1e-6;

% Startwert
x(1)=3;

y=x.^3-2*x+2

% Iteration beginnend ab i=1 (Startwert)
i=1;
while abs(fx(x(i)))>eps
 x(i+1)=x(i)-(fx(x(i))/f1x(x(i)))
 f(i+1)=fx(x(i))
 i=i+1;
end
min=min(x)
max=max(x)
y=fx(min:0.1:max)
plot(x,f,'b*-')
hold on
plot(min:0.1:max,y,'r-')
hold off

Edit by _Peter_: Bitte Codeumgebung nutzen. Danke.
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2011, 21:42     Titel:
  Antworten mit Zitat      
Okay, danke erstmal^^

Kannst du mir kurz Zeile für Zeile erklären, was du gemacht hast? Ich sehe da nicht durch...
Private Nachricht senden Benutzer-Profile anzeigen
 
oho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2011, 22:13     Titel:
  Antworten mit Zitat      
Code:
f(i+1)=fx(x(i))


hier wird der y-wert für jeden schleifendurchgang aufgezeichnet in einem vektor, wie bei deinem x

Code:


hier wird das minimum und das maximum von x ausgrechnet

Code:


hier werden die y-werte von der funktion von dem minimum bis zum maximum der x-werte ausgerechnet, damit man die kurve im diagramm hinterlegen kann.. 0.1 ist die schrittweite


Code:
plot(x,f,'b*-')
hold on
plot(min:0.1:max,y,'r-')
hold off


der erste plot ist von den x-werte von der newton-berechnung und deren y-werte. Das b ist für blau, der stern für * an den stellen und das - für linie

der zweite plot geht über den x-bereich von min bis max und zeichnet da die kurve ein.

Hold on /off brauchst du damit die zwei plots in ein digramm gezeichnet werden

Das y=x.^3-2*x+2 kannst du streichen...
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2011, 22:38     Titel:
  Antworten mit Zitat      
Hey, danke!! Ich sitze seit Donnerstag an dieser Aufgabe und ich kam einfach nicht weiter...

und es sieht ganz schick aus...^^

Gut.jpg
 Beschreibung:

Download
 Dateiname:  Gut.jpg
 Dateigröße:  18.34 KB
 Heruntergeladen:  533 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2011, 23:03     Titel:
  Antworten mit Zitat      
Jetzt hab ich nur noch ein anderes Problem,ich soll alle Input Werte (Startwerte, Funktion, Ableitung, Achsenbegrenzungen, Anzahl der Iterationen) in einem gesonderten function-Unterprogramm zusammen, das Sie gegebenfalls ändern können. Wählen Sie den Maßstab so, dass alle Iterationen zu sehen sind. Erklären Sie mit Hilfe der Grafiken die Funktionsweise des Newtonverfahrens und diskutieren Sie, warum das Newton Verfahren nicht immer konvergiert.

Das fällt auf eine andere Teilaufgabe zurück, nämlich der:

Suchen Sie eine andere Funktion ihrer Wahl, die Sie für die Veranschaulichung des Newton-Verfahrens geeignet halten. Finden Sie je einen Startwert für Konvergenz und je einen für Divergenz?


So, hast du für mich einen Start-Ratschlag?
Also ich bin etwas ratlos....[/i]
Private Nachricht senden Benutzer-Profile anzeigen
 
oho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2011, 05:44     Titel:
  Antworten mit Zitat      
Zu Konvergenz sollt dir doch wiki weiterhelfen. Die erklären, dir das Verhalten ausführlich. Es wird sich da ja auch auf diese funktion von deinem Bsp. bezogen.

Zu deinem Beispiel:

Ich würde einfach ein paar Zeilen noch davor setzen. Dann geht ein Fenster auf bei dem du die Sachen abändern kannst. Wenn du unbedingt 2 files brauchst, dann muss du halt den Zusatzteil in ein 2. files kopieren und darunter den Namen des 1.Files schreiben, dann ruft das 2.Files das erste auf.

Das Newtonverfahren kannst du doch gut mit dem diagramm darstellen. Du musst halt auf den startwert achten.


Code:

clear all;
 
prompt={'Funktion','Ableitung','Startwert','Iteration','Min','Max'}
defaultanswer={'x.^3 - 2*x +2; ','3*(x.^2)-2','-3','100','-3','0.5' };
name='Newton';
numlines=1;


Abfrage=inputdlg(prompt,name,numlines,defaultanswer)



x(1)=[str2num(Abfrage{3})]
n=[str2num(Abfrage{4})]
minx=[str2num(Abfrage{5})]
maxx=[str2num(Abfrage{6})]


fx=eval(['@(x) ' (Abfrage{1})])
f1x=eval(['@(x) ' (Abfrage{2})])


eps=1e-6;

i=1;
while abs(fx(x(i)))>eps
 x(i+1)=x(i)-(fx(x(i))/f1x(x(i)))
 f(i+1)=fx(x(i))
 if i==n
     break
 end
 i=i+1
end

y=fx(minx:0.1:maxx)
plot(x,f,'b*-')
hold on
plot(minx:0.1:maxx,y,'r-')
hold off
 


Was studierst du denn überhaupt?
 
oho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2011, 15:30     Titel:
  Antworten mit Zitat      
mir ist noch eingefallen wie du es visualisieren kannst:

Code:

clear all;
 
prompt={'Funktion','Ableitung','Startwert','Iteration','Min','Max'};
defaultanswer={'x.^3 - 2*x +2; ','3*(x.^2)-2','-0.3','100','-3','3.6' };
name='Newton';
numlines=1;


Abfrage=inputdlg(prompt,name,numlines,defaultanswer);

x(1)=[str2num(Abfrage{3})];
n=[str2num(Abfrage{4})];
minx=[str2num(Abfrage{5})];
maxx=[str2num(Abfrage{6})];


fx=eval(['@(x) ' (Abfrage{1})]);
f1x=eval(['@(x) ' (Abfrage{2})]);
y=fx(minx:0.1:maxx);

i=1;
f(i)=fx(x(i));

if f(i)~=0
   
Startwert=x(1)
eps=1e-6;

while abs(fx(x(i)))>eps
 x(i+1)=x(i)-(fx(x(i))/f1x(x(i)));
 f(i+1)=fx(x(i));
 if i==n;
     Abbruch bei n==n
     break
 end
 
 
 
 hold on
 plot(minx:0.1:maxx,y,'r-'),title 'Newton-Verfahren'
 plot(x,f,'b*-'),title 'Newton-Verfahren'
 hold off
 K(i)=getframe;
 
 i=i+1;
end

Iterationen=i-1
Nullstelle=x(i-1)

y=fx(minx:0.1:maxx);
plot(x,f,'b*-'),title 'Newton-Verfahren';
hold on
plot(minx:0.1:maxx,y,'r-'),title 'Newton-Verfahren';
hold off

else
   
Iterationen=i-1
Nullstelle=x
plot(x,f,'b*-'),title 'Newton-Verfahren'
hold on
plot(minx:0.1:maxx,y,'r-'),title 'Newton-Verfahren'
hold off


end
movie(K,3)
 
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2011, 16:17     Titel:
  Antworten mit Zitat      
Cool, danke^^

Könnt ihr mir wieder ein paar Erklärungen zu euren Codes geben?

Ich studiere Elektrotechnik...^^
Private Nachricht senden Benutzer-Profile anzeigen
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2011, 16:53     Titel:
  Antworten mit Zitat      
Übrigens, für die Konvergenz und Divergenz Aufgabe hätte ich eine Idee:

wie wäre es mit y=1/x?

die konvergiert gegen 1, wenn der Startwert 1 ist und divergeirt, wenn x größer oder kleiner als 1 ist ausgenommen der 0. Wäre das eine Beispiel Funktion für Newton?
Private Nachricht senden Benutzer-Profile anzeigen
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2011, 17:02     Titel:
  Antworten mit Zitat      
Sag mal, kann man den Bereich vergößern, den Matlab plottet?

Ich möchte nämlich, dass die gesamte Funktion gezeigt wird sowie das Newton Verfahren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3  Weiter

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.