Punti fissi e zeri di funzione
Metodo della tangente fissa ★
Function ➔
function [xnew,it,vettscarti]=es1scheda6(f,df,x0,toll,itmax)% metodo della tangente fissa per gli zeri di funzione it=0;xold=x0;vettscarti=zeros(itmax,1);scarto=2*toll;C0=df(xold);while scarto>toll && it<itmax it=it+1;xnew=xold-(f(xold)/C0);scarto=abs(xnew-xold);vettscarti(it)=scarto;xold=xnew;end vettscarti=vettscarti(1:it);end
Esempio di script per applicare la function ➔
clear close all f=@(x) exp(2*x)-x-8;df=@(x) 2*exp(2*x)-1;ddf=@(x) 4*exp(2*x);a=0.5; b=1.5;x0=1.5;itmax=50;toll=1.e-6;fplot(f,[a,b]) hold on plot([a,b],[0 0]) [xnew,it,vettscarti]=es1scheda6(f,df,x0,toll,itmax);fprintf(1,'valore approssimato %g \n',xnew);fprintf(1,'numero di iterazioni %i \n',it);plot(xnew,f(xnew),'ro') % zero della funzione figure semilogy(1:it,vettscarti,'o',1:it,vettscarti,'LineWidth',2) % profilo di convergenza M=vettscarti(2:it)./vettscarti(1:it-1); % M= fattore di convergenza o costante asintotica dell’errore fprintf(1,'approssimazione del fattore di convergenza se p=1 %gM)\n',
Metodo della secante fissa ★
Function ➔
function [xnew,it,vettscarti]=es2scheda6(f,x0,x1,toll,itmax)% metodo della secante fissa it=0;xold=x0;vettscarti=zeros(itmax,1);scarto=2*toll;C0=(f(x1)-f(xold))/(x1-xold);while scarto>toll && it<itmax it=it+1;xnew=xold-(f(xold)/C0);scarto=abs(xnew-xold);vettscarti(it)=scarto;xold=xnew;end vettscarti=vettscarti(1:it);end
Esempio di script per applicare la function ➔
clear close all f=@(x) exp(2*x)-x-8;df=@(x) 2*exp(2*x)-1;ddf=@(x) 4*exp(2*x);a=0.5; b=1.5;x0=1.5;x1=1.2;itmax=50;toll=1.e-6;fplot(f,[a,b]) hold on plot([a,b],[0 0]) [xnew,it,vettscarti]=es2scheda6(f,x0,x1,toll,itmax);fprintf(1,'valore approssimato %g \n',xnew);fprintf(1,'numero di iterazioni %i \n',it);plot(xnew,f(xnew),'ro') % zero della funzione figure semilogy(1:it,vettscarti,'o',1:it,vettscarti,'LineWidth',2) % profilo di convergenza M=vettscarti(2:it)./vettscarti(1:it-1); % M= fattore di convergenza o costante asintotica dell’errore fprintf(1,'approssimazione del fattore di convergenza se p=1 %g\n', M)
Metodo della secante variabile ★
Function ➔
function [xnew,it,vettscarti]=funRF(f,x0,x1,toll,itmax)% metodo della secante variabile it=1;xoldold=x0;xold=x1;vettscarti=zeros(itmax,1);scarto=abs(xold-xoldold);vettscarti(1)=scarto;while scarto>toll && it<itmax it=it+1;Cn=(f(xold)-f(xoldold))/(xold-xoldold);xnew=xold-f(xold)/Cn;scarto=abs(xnew-xold);vettscarti(it)=scarto;xoldold=xold;xold=xnew;end vettscarti=vettscarti(1:it);end
Esempio di script per applicare la function ➔
clear close all f=@ (x) 3*exp(-x)-atan(x);df=@ (x) -3*exp(-x)- (1/1+x.^2);a=0; b=2;x0=1.5;x1=1.2;toll=1.e-8;itmax=50;% metodo della secante fissa [xnew,it,vettscarti]=es2scheda6(f,x0,x1,toll,itmax);fprintf(1,'valore approssimato %g \n',xnew); %xnew=csi fprintf(1,'numero di iterazioni %i \n',it);M=vettscarti(2:it)./vettscarti(1:it-1); % M= fattore di convergenza o costante asintotica dell’errore fprintf(1,'approssimazione del fattore di convergenza se p=1 %eM)\n',fplot(f,[a,b]) hold on plot([a,b],[0 0]) plot(xnew,f(xnew),'ro') % zero della funzione figure semilogy(1:it,vettscarti,'o',1:it,vettscarti,'LineWidth',2) % profilo di convergenza hold on % metodo della secante variabile [xnew,it,vettscarti]=funRF1(f,x0,x1,toll,itmax);fprintf(1,'iterazioni effettuate = %i \n',it);fprintf(1,'approssimazione raggiunta = %15.9g \n',xnew);M1=vettscarti(2:it)./(vettscarti(1:it-1)).^1.618;fprintf(1,'approssimazione del fattore di convergenza se p=1.618%e \n',M1) semilogy(1:it,vettscarti,'o',1:it,vettscarti,'LineWidth',2)
Metodo di Newton-Raphson ★
Function ➔
function [xnew,it,vettscarti]=funNR(f,df,x0,toll,itmax) % quando andrò a chiamare questa function mi devo ricordare di mettere prima tolle poi itmax % function [xnew,it,vettscarti]=funpfisso(g,x0,toll,itmax) % input: f funzione data come function handle % df derivata prima della f data come function handle % x0 approssimazione iniziale % toll tolleranza prefissata % it max numero massimo di iterazioni % output: xnew valore approssimato per il punto fisso oppure valore distante da esso % it numero di iterazioni effettuate % vettscarti vettore degli scarti ad ogni iterazione it=0;xold=x0;vettscarti=zeros(itmax,1); % preallocazione di memoria per il vettore degli scarti scarto=2*toll; % scarto=toll+1;% scarto lo pongo uguale ad un valore fittizio maggiore di toll in modo da % poter entrare nel ciclo while e applicare il metodo while scarto>toll && it<itmax it=it+1; % vado avanti di una iterazione nel metodo xnew=xold - f(xold)/df(xold); % applico il metodo di Newton-Raphson scarto=abs(xnew-xold); % aggiorno lo scarto vettscarti(it)=scarto; % aggiorno la componente it del vettore scarti xold=xnew;end vettscarti=vettscarti(1:it); % tagliamo il vettore alle prime it componenti in modo da togliere tutti gli zeri in più che non servono % chiudo la function end
Metodo del punto fisso ★
Function ➔
function [xnew,it,vettscarti]=funpfisso(g,x0,toll,itmax) % quando andrò a chiamare questa function mi devo ricordare di mettere prima tolle poi itmax % function [xnew,it,vettscarti]=funpfisso(g,x0,toll,itmax) % input: g funzione di punto fisso data come function handle % x0 approssimazione iniziale % toll tolleranza prefissata % it max numero massimo di iterazioni % output: xnew valore approssimato per il punto fisso oppure valore distante da esso % it numero di iterazioni effettuate % vettscarti vettore degli scarti ad ogni iterazione it=0;xold=x0;vettscarti=zeros(itmax,1); % preallocazione di memoria per il vettore degli scarti scarto=2*toll; % scarto=toll+1;% scarto lo pongo uguale ad un valore fittizio maggiore di toll in modo da % poter entrare nel ciclo while e applicare il metodo while scarto>toll && it<itmax it=it+1; % vado avanti di una iterazione nel metodo xnew=g(xold); % applico il metodo di punto fisso scarto=abs(xnew-xold); % aggiorno lo scarto vettscarti(it)=scarto; % aggiorno la componente it del vettore scarti xold=xnew;end vettscarti=vettscarti(1:it); % tagliamo il vettore alle prime it componenti in modo da togliere tutti gli zeri in più che non servono %chiudo la function end
Script che applica il metodo di Newton-Raphson e il metodo del punto fisso
clear close all f=@ (x) 3*(x.^3)+x;df=@ (x) 9*(x.^2)+1;ddf=@(x) 18*x;a=-1; b=1;fplot(f,[a,b]) % grafico della funzione associata all'equazione hold on plot([a,b],[0 0]) % asse x % applicazione metodo di N-R - stampa dei valori di it e approssimazione x0=0.1;toll=1.e-10;itmax=30;[xnew,it,vettscarti]=funNR(f,df,x0,toll,itmax); % richiamo alla fun di N-R fprintf(1,'iterazioni effettutate = %i \n', it);fprintf(1,'approssimazione raggiunta = %15.9g \n',xnew);% grafico di convergenza figure semilogy(1:it,vettscarti,'o',1:it,vettscarti,'LineWidth',2) % profilo di convergenza % stima del fattore di convergenza del metodo di N-R con p=1 M1=vettscarti(2:it)./vettscarti(1:it-1);M2=vettscarti(2:it)./(vettscarti(1:it-1)).^2;M3=vettscarti(2:it)./(vettscarti(1:it-1)).^3;tabella=[M1,M2,M3]; % per fare tabella dei dati fprintf(1,'appross. del fattore di convergenza se p=1 \t appross. del fattore di convergenza se p=2 \t appross. del fattore di convergenza se p=3 \n');fprintf(1,'%30e \t %30e \t %50e \n', tabella'); % poi faccio la trasposta % schema di punto fis
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.