Metodo di newton approssimato
salve, sono alle prese con una function matlab che mi conseta di calcolare uno zero di funzione sfruttando il metodo di newton approssimato che sfrutta anzichè la derivata una sua approssimazione ((f(x)+h)-f(x))/2 con h fissato.
se questa è la function newton.m come posso implentare la stessa usando il metodo approssimato?
se questa è la function newton.m come posso implentare la stessa usando il metodo approssimato?
function [xvect,xdif,fx,nit]=newton(x0,nmax,toll,fun,dfun) err=toll+1; nit=0; xvect=x0; x=x0; fx=eval(fun); xdif=[]; while (nit < nmax & err > toll) nit=nit+1; x=xvect(nit); dfx=eval(dfun); if (dfx==0) err=toll*1.e-10; disp( 'La derivata non esiste' ); else xn=x-fx(nit)/dfx; err=abs(xn-x); xdif=[xdif;err]; x=xn; xvect=[xvect;x]; fx=[fx;eval(fun)]; end end
Risposte
dfx=eval(dfun); if (dfx==0) err=toll*1.e-10; disp( 'La derivata non esiste' ); else xn=x-fx(nit)/dfx
a occhio direi che al posto di questo pezzo ci metti il nuovo, praticamente al posto di calcolare dfx, essa la inizializzi con $(f(x+h)-f(x))/2$ (come hai scritto te puoi anche mettere h/2...secondo me hai messo una parentesi di troppo)...
quindi metterei dfx=(f(x+h)-f(x))/2 (in matlabbiano poi mettilo te...) e diretto xn=x-fx(nit)/dfx che tanto se h è fisso non hai problemi sull'esistenza...
questa è la prima idea magari non troppo giusta che mi è venuta in mente