Hejsan Kan det här vara något? Lite väl överdriven... Ja okej. Men det har jag gjort ungefär tror jag. Rent spontant är det svårt att se exakt hur du ska göra det.Implementera newton raphson i MATLab
Jag är ganska färsk på att använda MATLab och försöker implementera en funktion som ska kunna lösa icke linjära problem.
Jag vill ha en egen funktion som utför newton-raphsons metod.
Metoden följer formeln x(k+1) = x(k) - (f(xk) / f'(xk))
Man börjar med en startgissning x0 och får x1. Som sedan stoppas in ifrån början i formeln. För att fortsätta till man har hittat en lösning. Dvs ett nollställe. Hur går jag tillväga ungefär för att implementera det i MATlab kod?
Mvh
FredrikSv: Implementera newton raphson i MATLab
http://www.eeng.dcu.ie/~ee317/Matlab_Examples/iter/newton_raphson_polynom.mSv:Implementera newton raphson i MATLab
Jag förutsätter att du känner till MATLABs syntax.
Då är principen något i stil med:
function x = NewtonRaphson (f, df, x0, tolerance)
lastguess = x0;
guess = x0 - f(x0)/df(x0);
while guess-lastguess < tolerance
lastguess = guess;
guess = guess - f(guess)/df(guess);
endSv: Implementera newton raphson i MATLab
Min kod ser ut så här:
%Detta är min defenition av NewtonRaphson metoden.
function g = NewtonRaphson (fx, x)
tol=[10^-6];
k=0.1;
while abs( x(k+1)-x(k) ) <= tol
x(k+1)=x(k)-((fx, x)/(@CentralDiff, fx, x)); <---Felmeddelande om denna rad.
k=k+1;
end
%Här försöker jag anropa funktionen.
x=[0.5];
xnoll= NewtonRaphson(@funktionen, x);
disp(xnoll);
Jag får felmeddelandet på raden som jag har markerat. Det står att det är ett fel-utformat uttryck.
Jag kan inte lista ut vad felet är. Men jag är ganska osäker på MATlab så jag kanske är ute och cyklar.
Jag har en funktion som heter CentralDiff som deriverar funktioner.(inparametrar -funktion och x)
@funktionen är en funktion som jag har definierat i en egen funktion.
Ska jag anropa @funktionen i bråket i raden med felmeddelandet kanske?
hoppas att någon kan hjälpa mig.
Mvh FreddeSv:Implementera newton raphson i MATLab
Jag tror att du vill anropa CentralDiff på fx och x. Vi kan säga så här: @ använder du uteslutande när du vill skicka en funktion. Alltså, när en funktion behöver få tag i en annan för att kunna göra sitt jobb, men som inte vet vilken annan funktion det är, så skickar man denna funktion mha @. Jag skulle alltså snarare gissa på:
CentralDiff(@fx, x)
Sen skulle jag inte haft [] runt tol, och jag skulle ha skickat med tol och k som parametrar. Och snarare än att ha en egenskriven funktion för derivata skulle jag skicka med den som parameter också. Ju mer specifika grejer du tar bort ur koden, desto lättare blir den att utvidga och förstå.