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 in Scilab

 

Bad_Rockk
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 24.07.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2008, 12:57     Titel: Newton-Verfahren in Scilab
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen


nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 24.07.2008, 13:40     Titel:
  Antworten mit Zitat      
Hi,

ich nehme an, es geht folgendermaßen:
Du nimmst eine Vektor x
Zitat:
x=0:0.001:5;

Eine Funktion f
Zitat:
f=sin(x);

und deren Ableitung df
Zitat:
df=cos(x);

und übergibst beides mit einem Startwert an die Funktion
Zitat:
newtonsolve2(f,df,2)

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Bad_Rockk
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 24.07.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2008, 18:46     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 24.07.2008, 20:46     Titel:
  Antworten mit Zitat      
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!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Bad_Rockk
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 24.07.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2008, 09:56     Titel:
  Antworten mit Zitat      
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.
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 - 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.