|
|
Newton-Verfahren in Scilab |
|
Bad_Rockk |
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 24.07.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.07.2008, 12:57
Titel: Newton-Verfahren in Scilab
|
|
|
|
|
Hallo zusammen,
bin Maschinenbau-Student und sitze gerade an einer Numerik-Aufgabe.
Es geht darum über das Newtonverfahren näherungsweise die Nullstellen einer Funtion zu bestimmen.
ich habe schon einen entwurf von dem Verfahren, nur seh ich gerade nicht wo ich meine funktion einfügen kann?!
hier mal der bisherige entwurf:
// newtonsolve.sci
function [y,iter]=newtonsolve2(f,df,x)
err=1e-7;
yact=f(x);
xact=x;
iter = 0;
// Schleife solange yact nicht null ist
while abs(yact)>err
iter = iter + 1
// berechne Jacobi-Matrix
jac = df(xact)
// diese Abfrage ist schon ein Verbesserung gegenüber einer Standardimplementierung
if (det(jac)<=err)
iter = -iter
break
end
// neuer Aufpunkt x berechnet sich aus dem alten
xact=xact-jac\yact
// neuer functionswert
yact=f(xact)
end
y=xact
endfunction
meine frage ist einfach die, wie muss ich meine Funktion angeben?? Sitze schon mehrere Stunden an Numerik, vielleicht bin ich einfach jetzt blind und es ist offensichtlich! Aber bin wirklich für jede Hilfe dankbar!
Danke schonmal im vorraus.
|
|
|
|
|
nschlange |
Ehrenmitglied
|
|
Beiträge: 1.320
|
|
|
|
Anmeldedatum: 06.09.07
|
|
|
|
Wohnort: NRW
|
|
|
|
Version: R2007b
|
|
|
|
|
|
Verfasst am: 24.07.2008, 13:40
Titel:
|
|
Hi,
ich nehme an, es geht folgendermaßen:
Du nimmst eine Vektor x
Eine Funktion f
und deren Ableitung df
und übergibst beides mit einem Startwert an die Funktion
Zitat: |
newtonsolve2(f,df,2) |
_________________
Viele Grüße
nschlange
"Chuck Norris ejakuliert fluessigen Stahl!"
|
|
|
Bad_Rockk |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 24.07.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.07.2008, 18:46
Titel:
|
|
erstmal danke für die schnelle antwort.
sprich einfach vor der ersten zeile meines entwurfs
f=... und die ableitung als df=... angeben?
eine frage noch, warum muss x ein vektor sein? weil das ganze problem ist eigentlich im x-y-system. also keine z komponente. warum muss ich da dann nen vektor angeben? und wenn woher weiß ich welcher vektor der richtige ist?
|
|
|
nschlange |
Ehrenmitglied
|
|
Beiträge: 1.320
|
|
|
|
Anmeldedatum: 06.09.07
|
|
|
|
Wohnort: NRW
|
|
|
|
Version: R2007b
|
|
|
|
|
|
Verfasst am: 24.07.2008, 20:46
Titel:
|
|
Hi,
mit Vektor meine ich hier nicht ein Element eines Vektorraumes. Es ist im Wesentlichen eine Liste von Zahlen; das sind einfach die Stellen, an denen f und df berechnet werden.
In dieser Funktion musst Du nichts ändern, nur halt diese passenden Parameter beim Aufrufen der Funktion übergeben.
_________________
Viele Grüße
nschlange
"Chuck Norris ejakuliert fluessigen Stahl!"
|
|
|
Bad_Rockk |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 24.07.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.07.2008, 09:56
Titel:
|
|
|
|
|
aber woher soll ich denn wissen an welchen stellen, das berechnet werden soll?
es geht ja gerade darum die x-werte rauszufinden, für die die funktion=0 ist!
Habe es momentan so:
x=[0]
f=(2.25-(x-1)^2)^(0.5)+1-(-sqrt(3)*x+2*sqrt(3)+1)
df=sqrt(3)-(1.0*(x-1))/(2.25-(x-1)^2)^0.5
// newtonsolve.sci
function [y,iter]=newtonsolve2(f,df,x)
err=1e-7;
yact=f(x);
xact=x;
iter = 0;
// Schleife solange yact nicht null ist
while abs(yact)>err
iter = iter + 1
// berechne Jacobi-Matrix
jac = df(xact)
// diese Abfrage ist schon ein Verbesserung gegenüber einer Standardimplementierung
if (det(jac)<=err)
iter = -iter
break
end
// neuer Aufpunkt x berechnet sich aus dem alten
xact=xact-jac\yact
// neuer functionswert
yact=f(xact)
end
y=xact
endfunction
als ausgabe bekomme ich dann:
x =
0.
f =
- 2.3460676
df =
2.626478
habe jetzt eben mal x=0 gesetzt, bekomme da auch en ergebniss raus aber das ist das negative was ich haben will.
Habe die rechnung schonmal über ein normales CAS-System gemacht und da eben meine 2 Nullstellen rausbekommen. Und muss jetzt mit dem Newtonverfahren eine Näherung machen. Und schlussendlich die ergebnisse vergleichen.
als nullestellen kommen:
x1=1,13763...
x2=2,36237...
raus.
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
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.
|
|