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

Newton-Verfahren: Ableitung von f bilden

 

Kings_of_Leon
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 28.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2015, 16:27     Titel: Newton-Verfahren: Ableitung von f bilden
  Antworten mit Zitat      
Hallo Smile Ich möchte zunächst das Newtonverfahren programmieren. Es hängt noch an der Ableitung, durch die man ja teilen muss. Ich wollte mir zunächst nen Vektor mit Nullen vordefinieren, der dann beschrieben werden soll mit den jeweiligen x(i)'s, die ich dann in eine Datei schreiben möchte. Wer kann mir weiterhelfen? der Befehl t=diff(y,x) scheint nicht zu klappen. An was liegt das? Kann es sein, dass ich die x(i)'s erst befüllen muss? Wäre lieb, wenn ihr euch melden könntet.
Code:
% Das ist mein Programm
clear;
close all;
clc;

syms x y
eps=10.^-8;
N=100;
f=exp(x)-x-4;
x=zeros(N,1);
x(1)=1;
t=diff(f,x);

%Newton-Verfahren
for i=2:100
         while  abs(x(i)-x(i-1)) >= eps  || f(x(i))>= eps && i<N
                     x(i+1)=x(i)-(f(x(i))./t);
                     xi=x(i+1);
                    if t(x)==0
                    break
                    end
             end
 
end

%Gebe die Werte in die Datei ErgebnisseallerVerfahren aus
fid=fopen('ErgebnisseallerVerfahren.txt','w');
fprintf(fid, 'Newtonverfahren\n\n\n');
fprintf(fid, '%12.8f 12.8%f\n 12.8%f\n\n',x(i),abs(f(x(i))), abs(x(i)-x(i-1)));
fclose(fid);
 
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.11.2015, 18:20     Titel:
  Antworten mit Zitat      
Hallo,

das Problem dürfte die Vermischung von symbolisch und numerisch sein: du definierst x zunächst symbolisch, dann aber als Double - dann ergibt diff aber keinen Sinn mehr.

Bitte auch immer die erhaltene Fehlermeldung angeben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Kings_of_Leon
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 28.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2015, 21:28     Titel:
  Antworten mit Zitat      
Vielen Dank Harald,

habe das syms am Anfang jetzt weggelassen. Trotzdem stimmt was mit der Ableitung noch nicht....ich erhalte immer "Error using diff
Difference order N must be a positive integer scalar.

Error in Aufgabe12 (line 14)
t=diff(f,x);"
Was ist da jetzt falsch? Bin noch kompletter Anfänger was Matlab betrifft und komme gerade an der Aufgabe nicht weiter...
der code ist:
Code:
clear;
close all;
clc;

eps=10.^-8;
N=100;
x=zeros(N,1);
x(1)=1;
f=exp(x)-x-4;
t=diff(f,x);

%Newton-Verfahren
for i=2:100

         while  abs(x(i)-x(i-1)) >= eps  || f(x(i))>= eps && i<N
                     x(i+1)=x(i)-(f(x(i))./t);
                     xi=x(i+1);
                    if t(x)==0
                    break
                    end
             end
 
end

%Gebe die Werte in die Datei ErgebnisseallerVerfahren aus
fid=fopen('ErgebnisseallerVerfahren.txt','w');
fprintf(fid, 'Newtonverfahren\n\n\n');
fprintf(fid, '%12.8f 12.8%f\n 12.8%f\n\n',x(i),abs(f(x(i))), abs(x(i)-x(i-1)));
fclose(fid);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.11.2015, 23:17     Titel:
  Antworten mit Zitat      
Hallo,

die Frage sollte sich an sich klären, wenn du die Dokumentation von diff liest. Egal ob Anfänger oder nicht, das Lesen der Doku ist absolut empfehlenswert, wenn man Probleme mit einer Funktion hat.

Was soll denn t nun sein? Es reicht ja nicht, an einer Stelle das syms wegzulassen und an anderen Stellen dann unverändert weiterzuarbeiten, z.B. f(x(i)) und t(x) .

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Kings_of_Leon
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 28.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2015, 20:53     Titel:
  Antworten mit Zitat      
Ok, also ich hab das syms jetzt doch wieder eingeführt und zwar nicht nur für die variable x, sondern auch für die variablen t und f. Aber kannst du mir genau sagen, was das syms macht? Das sieht die Variable ja irgendwie als symbolisch an. Ist da der Vorteil das man somit den Wert an einer Funktion ausrechnen kann?
Wenn ja, könnte man das ohne den Befehl syms nicht?
Nun habe ich aber folgendes Problem:
Ich erhalte für die Zeile
while abs(x(i)-x(i-1)) >= eps || f(x(i))>= eps && i<N

folgende Fehlermeldung

Error in Aufgabe12 (line 19)
while abs(x(i)-x(i-1)) >= eps || f(x(i))>= eps && i<N

Warum? Was ist falsch an der Aussage?

Liebe Grüße und Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.11.2015, 22:29     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Aber kannst du mir genau sagen, was das syms macht?

Es definiert eine Variable als symbolisch. Alle Berechnungen, an denen diese Variable beteiligt ist, werden auch symbolisch ausgeführt.

Zitat:
Ist da der Vorteil das man somit den Wert an einer Funktion ausrechnen kann?

An sich eben nicht. Man möchte nicht Werte, sondern Formeln als Ergebnis haben.

Zitat:
folgende Fehlermeldung

Error in Aufgabe12 (line 19)
while abs(x(i)-x(i-1)) >= eps || f(x(i))>= eps && i<N


Die Fehlermeldung ist insofern unvollständig, als dass die eigentliche Fehlermeldung fehlt.
Zudem weiß ich nicht, welchen Code du aktuell verwendest.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Kings_of_Leon
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 28.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2015, 22:37     Titel:
  Antworten mit Zitat      
Ok und wie lautet der Befehl zum Schluss, wenn ich dann doch den Funktionswert an einer bestimmten Stelle haben möchte?
Mein COde lautet:
Code:
%clear;
close all;
clc;

syms x f t
eps=10.^-8;
N=100;
x(1)=1;
f=@(x) exp(x)-x-4;
t=diff(f,x);

%Newton-Verfahren
for i=2:100

         while  abs(x(i)-x(i-1)) >= eps  || f(x(i))>= eps && i<N
                     x(i+1)=x(i)-(f(x(i))./t);
                     x(i)=x(i+1);
                    if t(x)==0
                    break
                    end
             end
 
end

%Gebe die Werte in die Datei ErgebnisseallerVerfahren aus
fid=fopen('ErgebnisseallerVerfahren.txt','w');
fprintf(fid, 'Newtonverfahren\n\n\n');
fprintf(fid, '%12.8f 12.8%f\n 12.8%f\n\n',x(i),abs(f(x(i))), abs(x(i)-x(i-1)));
fclose(fid);

 
und die vollständige Fehlermeldung ist:
Index exceeds matrix dimensions.

Error in sym/subsref (line 776)
R_tilde = builtin('subsref',L_tilde,Idx);

Error in Aufgabe12 (line 19)
while abs(x(i)-x(i-1)) >= eps || f(x(i))>= eps && i<N

wobei es line 776 bei mir gar nicht gibt...aber ich glaube das wesentliche ist hier auch eher das "index exceeds matrix dimensions"....also irgendwas mit der dimension von x(i) scheint nicht zu stimmen?!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2015, 19:12     Titel:
  Antworten mit Zitat      
Hallo,

du vermischt weiterhin syms mit numerisch.

Du definierst x(1), verwendest aber in der ersten Iteration der for-Schleife x(2).

Wenn du symbolische Variablen verwendest, kannst du mit subs Werte einsetzen.

Grüße,
Harald
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.