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

 

oho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2011, 18:49     Titel:
  Antworten mit Zitat      
Code:
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);


Im promt stehen die Abfragen drin, die du bei dem eingabe-teil siehst.

Bei defaultanswers die Vorschläge. Löscht du das, dann stehen keine Vorschläge drin und du musst eben alles eintippen. So kannst du im Eingabe-Teil eben die Werte bestätigen oder ändern.

name ist dir Überschrift des eingabe-teils.

numlines ist die anzahl an linien, die du pro frage hast

Abfrage= das sind dann die eingaben die du an das programm zurückschickst.


Code:

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})]);


hier werden deine angaben in die die richtigebn formate umgewandelt und den variabeln zugeteilt.

Code:

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

if f(i)~=0
   
Startwert=x(1)
 


mit f errechnet es den funktionswert zu deinem startwert x und mit if wird entschieden ob überhaupt eine iteration nötig ist, könnte ja sein, dass man die nullstelle erraten hat.

Startwert dient nur dazu, dass am schluss nochmal der startwert und nicht die variable auf dem bilschirm kommt

Code:
if i==n;
     Abbruch bei n==n
     break
 end


durch die vorgabe an iterationen wird hier die schleife auf dieses maximum begrenzt. Findet das verfahren nach i=n iterationen keine nullstelle, dann teilt es mit das es durch Abbruch bei n Iterationen beendet wurde

Code:

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


hier erfolgt zu jedem schleifen-ende ein plot, der dann auf dem bildschirm kommt. Getframe zeichnet die plots auf, damit du sie mit movie(K) abspielen kannst. Was in der letzten Zeile steht. Die Ziffer ist die anzahl der Abspielungen.

Code:
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


das ist für den falls, dass du startwert=nullstelle hast.

[/code]

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.


du kannst doch deine x-wert-begrenzungen vergrössern


Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2011, 23:12     Titel:
  Antworten mit Zitat      
Also, mal abgesehen ist das verdammt genial. Ich habs gerade erst jetzt geschafft, mir das mal in Matlab anzuschauen, genial...^^

Sogar mit einer Abfrage am Anfang, echt genial...^^

Wenn ihr mir das, wie gesagt, jetzt noch Zeile für Zeile erklären könnt, wie ihr DAS geschafft habt, dann wäre ich euch sehr dankbar...

Man, das ist echt genial...ohne Scheiß...^^

Aber leider klappt es nur für diese Funktion. sobald ich eine andere Funktion eingebe, kommt der Fehler:

??? In an assignment A(I)
= B, the number of elements
in B and
I must be the same.

Könnt ihr mir sagen, was das bedeuten??
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, 23:19     Titel:
  Antworten mit Zitat      
Ah, danke für die ganzen Erklärungen...^^

Nur, was bedeutet eigentlich inputdlg?

Und wo sind meine x Wert Begrenzungen...? Ich seh da noch nicht ganz so

durch...^^
Private Nachricht senden Benutzer-Profile anzeigen
 
oho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2011, 00:43     Titel:
  Antworten mit Zitat      
Also ich habe es mit ein paar Funktionen ausprobiert. (u.a. auch mit 1/x) und es hat funktioniert. Nur eine Änderung habe ich vorgenommen, dass es nach ne Abbruch, dies auch sagt, und nicht Nullstelle ausgibt.

Problematisch wirds nur wenn x-achsen-begrenzungen nicht mit mehr mitkommen., da ja das verfahren bei falschen einsatz ins unermässliche läuft.

Inputdl bringt die Antworten aus der Abfrage ins Programm rein.

x-achsen-begrenzungen sind min und max. Die kannst du unter den Vorgaben in der defaultanswer-zeile abändern, dann brauchst du sie nur zu bestätigen oder eben manuell in der Eingabeaufforderung,

Bei welcher Funktion hat es denn nicht funktioniert? Hast du auch die Ableitung geändert?

Code:
clear all;
 
prompt={'Funktion','Ableitung','Startwert','Iteration','Min','Max'};
defaultanswer={'x.^(-1) ; ','-x.^(-2)','-0.3','30','-30','30' };
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=0;

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
  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
if i<n-1
Iterationen=i-1
Nullstelle=x(i-1)
end

if i>=n
warning('Verfahren nach max. Anzahl an Iterationen abgebrochen')    
end
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,1)
 
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2011, 22:25     Titel:
  Antworten mit Zitat      
ich hab es bei y=sinx und y'=x*sinx probiert und da kam die Fehlermeldung, die ich gestern um 23.12 Uhr gesendet habe.
Was bedeutet die??
Private Nachricht senden Benutzer-Profile anzeigen
 
oho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 02:59     Titel:
  Antworten mit Zitat      
Ovid hat Folgendes geschrieben:
ich hab es bei y=sinx und y'=x*sinx probiert und da kam die Fehlermeldung, die ich gestern um 23.12 Uhr gesendet habe.
Was bedeutet die??


Was sie bedeutet weiss ich nicht Smile

Hattest du schon ein paar Bier getrunken? Razz

sin(x) wird mit cos(x) abgeleitet und dann läuft das programm bis zum abbruch auch.

weil das ja dann ein fall von divergenz ist. Smile
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 14:01     Titel:
  Antworten mit Zitat      
Kein Bier, ein Fall von geistiger Ohmnachtung...xD

Aber trotzdem kommt eine Fehlermeldung, die mich nicht weiterbringt:

[code]
??? In an assignment A(I)
= B, the number of elements
in B and
I must be the same.
[/code]

Kann mir irgendwer helfen??
Private Nachricht senden Benutzer-Profile anzeigen
 
oho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 21:04     Titel:
  Antworten mit Zitat      
also bei mir funktioniert es mit sin(x) sowie cos(x).

was gibst du genau an startwerten usw. ein?
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 21:21     Titel:
  Antworten mit Zitat      
Startwert 1,75
Iteration 100
Min: -3
Max: 3.6
Private Nachricht senden Benutzer-Profile anzeigen
 
oho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 22:27     Titel:
  Antworten mit Zitat      
Ovid hat Folgendes geschrieben:
Startwert 1,75
Iteration 100
Min: -3
Max: 3.6


jetzt weiss ich auch woher ich die fehlermeldung kenne...

du musst 1.75 und nicht 1,75 schreiben Smile
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 23:44     Titel:
  Antworten mit Zitat      
Jetzt kommt eine andere Fehlermeldung, mit den gleichen Werten wie vorhin und natürlich der Berichtigung von 1.75...Wink

Hier die Fehlermeldung:

??? Undefined function or
variable 'sinx'.

Error in ==> @(x)sinx

Warum ist sie jetzt undefiniert??
Private Nachricht senden Benutzer-Profile anzeigen
 
oho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.06.2011, 00:15     Titel:
  Antworten mit Zitat      
weil die funktion sin(x) und nicht sinx heisst Wink
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.06.2011, 00:37     Titel:
  Antworten mit Zitat      
aaah, sie funktioniert...^^ dann danke erstmal, Leute.

Falls ich noch Fragen habe, komm ich hier gerne wieder...^^
Private Nachricht senden Benutzer-Profile anzeigen
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.06.2011, 22:48     Titel:
  Antworten mit Zitat      
sagt mal, habt ihr vielleicht auch ein paar Lösungsvorschläge zu meinem anderen Problem hier? :

http://www.gomatlab.de/visualisieru.....dgl-2-ordnung-t18799.html
Private Nachricht senden Benutzer-Profile anzeigen
 
Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2011, 13:34     Titel:
  Antworten mit Zitat      
Übrigens, hab ich wieder ne Fehlermeldung bekommen, sobald ich versuche, die Funktion 1/x und deren Ableitung -(1/(x^2)) zu benutzen:

??? Error using ==>
mrdivide
Matrix dimensions must
agree.

Error in ==> @(x)(1/x)

Startwert: 1
Min: -5
Max: 10
Iterationen: 100

Was sagt mir der Fehler jetzt...?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  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.