Errore Script Newton-Raphson

di il
1 risposte

Errore Script Newton-Raphson

Buongiorno, ho un problema con uno script di Matlab che svolge il Metodo di Newton-Raphson "normale" e "modificato", in pratica quando clicco su esegui il programma mi disegna la funzione che ho scritto, ma poi non mi esegue ciò che sta dopo il comando del grafico. Chiedo se qualcuno è in grado di darmi una mano a risolvere questo problema, metto il file per eventuali chiarimenti.
%---Definizione della funzione e la sua derivata prima---
f=@(x) sin(x)-x+((x.^-4)/24);
df=@(x) (-1/(6*x.^5)+cos(x)-1);
%---Disegna la funzione f(x) e l'asse x nella stessa figura---
a=-1;b=1;
figure(1)
ezplot(f,[a b]);hold on; plot([a b],[0 0],'k-');hold off; 
%---Assegnazione parametri metodo Newton-Raphson e Newton-Raphson Modificato---
itmax=100;
x0=1;
tol=10^-6;
r=1;
maxiter=100;
%----------------------------------------------------------------
% NEWTON:  calcola una radice della funzione f definita 
% usando il metodo iterativo di Newton-Raphson
% Test di arresto sullo scarto (dif)
%----------------------------------------------------------------
% [x,iter,scarti]=newton(f,df,x0,tol,itmax)
%----------------------------------------------------------------
% parametri di input: 
%        f: funzione della quale si cerca una radice 
%        d: derivata prima di f
%        x0 = approssimazione iniziale
%        toll: tolleranza  
%        itmax: numero massimo di iterazioni 
% parametri di output: 
%        x: vettore delle approssimazione della radice 
%        iter:  numero di iterazioni effettuate
%        scarti: vettore degli scarti successivi
%----------------------------------------------------------------
function[x,iter,scarti]=newton(f,df,x0,tol,itmax)
 xold=x0;
 x=[x0];
 scarti=[];
 dif=tol+1;
 iter=0;
 while (abs(dif) > tol) & (iter < itmax)
    fx=feval(f,xold);
    if fx == 0 return; end
       dfx=feval(df,xold);
    if dfx == 0
       disp('ERRORE: derivata nulla.'); return;
    end
    iter=iter+1;
    dif=-fx/dfx;
    xnew=xold+dif;
    scarti=[scarti;dif];
    x=[x; xnew];
    xold=xnew;
 end
 
 if (iter >=itmax)
    disp('raggiunto il numero massimo di iterazioni')
end
%----------Newton-raphson modificato----------------------------------------
%   newtonmod----Esegue il metodo di Newton modificato per la risoluzione di
%   f(x)=0 anche in presenza di radici multiple, nota la loro
%   molteplicità
%
%   [x,i,tolf]=NEWTONMOLT(x0,r,f,df,tolx,nmax)
%   [xmod,itermod,scartimod]= newtonmod(f,df,x0,tol,maxiter,r);
%   I parametri della funzione sono:
%       x0 -> il punto iniziale
%       r -> molteplicità della radice cercata
%       f -> funzione di cui valutare uno zero
%       df -> la derivata della funzione f
%       tol -> tolleranza per la radice
%       maxiter -> limite superiore al numero di iterazioni
%
%   I valori di ritorno sono:
%       xmod -> la soluzione trovata
%       itermod -> il numero di iterazioni impiegate per ottenere la soluzione
%       tolf -> la tolleranza sulla funzione
  function[xmod,itermod,tolf]=newtonmod(f,df,x0,tol,maxiter,r)
 
   itermod=0;
   dif=tol+1;
   xmod=x0;
   while(itermod<maxiter & dif>tol)
      fx=feval(f,xmod);
      dfx=feval(df,xmod);
      tolf=tol*abs(dfx);
      if abs(fx)<=tolf
         break
      end
      x1=xmod-r*(fx/dfx);
      dif=abs(x1-xmod);
      xmod=x1;
      itermod=itermod+1;
    end

1 Risposte

  • Re: Errore Script Newton-Raphson

    Se tutto il codice che hai inserito nella domanda è contenuto al'interno di un unico ".m" file, uno dei problemi consiste nel fatto che non è possibile, all'interno di un ".m" file scrivere uno script (una serie di istruzioni non facenti parte di una funzione) e, successivamente, una o più funzioni.

    Se hai tentato di eseguire il file, MatLab avrebbe dovuto generare un messaggio di errore:
    function[x,iter,scarti]=newton(f,df,x0,tol,itmax)
    ?
    Error: Function definitions are not permitted in this context.
    Nel caso specifico, devi salvare le due funzioni in due ".m" files separati (chiamandoli con il nome delle rispettive funzioni).

    A parte questo, se anche fosse possibile (e non lo è) strutturare il file in quel modo, devi "chiamare" esplicitamente le funzioni nello script, non basta semplicemente definirle.
Devi accedere o registrarti per scrivere nel forum
1 risposte