Calcolo Numerico (Ingegneria Energia/Meccanica, Canale A) Prova di Laboratorio IV, del 24 Gennaio 2020, fila II

Cognome e nome Matricola

Postazione

FIRMA PER CONSEGNARE

FIRMA PER RITIRARSI

1. Si raccomanda agli studenti di commentare adeguatamente script e function Matlab.

2. Ogni porzione di codice deve avere quale prima riga un commento mediante % con nome, cognome, numero di matricola e postazione.

1. Si implementi il seguente metodo iterativo di Newton Modificato

x_{n+1} = x_{n} − \frac{Mf(x_{n})}{f′(x_{n})}  (1)

che permette di determinare la zero di f a partire dal dato iniziale x_{0}. A tal proposito,

• Si crei una function di nome newtonmod.m che implementi il metodo di Newton modificato, avente come input (a) le funzioni f, f′;

(b) il numero reale M

(c) il valore iniziale x_{0}

(d) la tolleranza toll per il test di arresto (basato sul valore assoluto della differenza di due iterate successive),

(e) il numero massimo di iterazioni consentite nmax;

• la stessa function deve dare in output (a) il vettore xv che contiene le iterate (\underline{incluso} il valore iniziale x_{0}),

(b) il vettore step la cui n-sima componente contiene il valore assoluto di x_{n+1} − x_{n};

(c) il numero nit di iterazioni effettuate (cioé la lunghezza di xv meno 1);

• la function dovrà avere la seguente intestazione:

  function [xv,step,nit] = newtonmod (f,f1,M,x0,toll,nmax)
  % Uso:
  %   function [xv,step,nit] = newtonmod (f,f1,M,x0,toll,nmax)
  %
  % Dati di ingresso:
  % f: funzione
  % f1: derivata di f
  % M: numero reale
  % x0: valore iniziale
  % toll: tolleranza richiesta per il valore assoluto tra due iterate successive
  % nmax: massimo numero di iterate permesse
  %
  % Dati di uscita:
  % xv: vettore contenente le iterate (e x0)
  % step: vettore contenente il valore assoluto della differenza di due iterate successive
  % nit: numero di iterazioni

• lo script inizialmente, ponga xv(1) = x0;

• lo script contenga un ciclo-for con n=1:nmax che – assegni ad fxv il valore assunto dalla valutazione di f in xv(n);

– verifichi se il valore di fxv sia uguale a 0 e in caso affermativo esca per return dal ciclo for, ponendo

     step=0, nit=n;

– assegni ad f1xv il valore assunto dalla valutazione di f′ in xv(n);

– verifichi se il valore di f1xv sia uguale a 0 e in caso affermativo esca per return dal ciclo for, ponendo

     step=NaN, nit=NaN;

– se il valore di f1xv non risulta uguale a 0 ∗ ponga quale xv(n+1) il valore della n-sima iterazione del metodo di Newton Modificato definito da (1);

∗ ponga quale step(n) il valore assoluto della differenza delle due iterate xv(n), xv(n+1);

∗ se step(n) é inferiore di toll esca per return dal ciclo for, ponendo nit uguale a n;

• se si esce dal ciclo-for per un numero di iterazioni superiori a nmax, scriva su monitor il messaggio sono state

  effettuate troppe iterazioni e ponga nit uguale a nmax+1;

(continua →)

2. Si scriva una function demo I che

• mediante un comando del tipo f=@(x) ... definisca la funzione f(x) = (x − π/2)^{2};

• mediante un comando del tipo f1=@(x) ... definisca la funzione f′(x), ovvero la derivata di f da calcolarsi \underline{esplicitamente};

• ponga M=1, x0=2, toll pari a 10^{−6}, nmax=1000;

• applichi il metodo di Newton Modificato mediante una chiamata del tipo [xv,step,nit] = newtonmod

  (f,f1,M,x0,toll,nmax);
• sul file valori step 1.txt

– si scriva l’ultimo valore di xv, (in notazione decimale con 10 cifre prima della virgola e 15 dopo la virgola);

– si scriva il valore di nit, (in notazione decimale con 5 cifre prima della virgola e nessuna dopo la virgola);

– si scrivano i valori delle componenti di step, (in notazione esponenziale con una cifra prima della virgola

e una dopo la virgola);

• Quanto vale l’ultima componente di xv (in notazione decimale con una cifra prima della virgola e tre dopo la virgola)? Qual’e’ l’ultimo valore dello step al termine delle iterazioni (in notazione esponenziale con una cifra prima della virgola e una dopo la virgola)? Qual’e’ il valore di nit?

ultima componente di xv ultima componente di step

                                                                              nit

3. Si scriva una function demo II che

• mediante un comando del tipo f=@(x) ... definisca la funzione f(x) = (x − π/2)^{2};

• mediante un comando del tipo f1=@(x) ... definisca la funzione f′(x), ovvero la derivata di f da calcolarsi \underline{esplicitamente};

• ponga M=2.01, x0=2, toll pari a 10^{−6}, nmax=1000;

• applichi il metodo di Newton Modificato mediante una chiamata del tipo [xv,step,nit] = newtonmod

  (f,f1,M,x0,toll,nmax);
• sul file valori step 2.txt

– si scriva l’ultimo valore di xv, (in notazione decimale con 10 cifre prima della virgola e 15 dopo la virgola);

– si scriva il valore di nit, (in notazione decimale con 5 cifre prima della virgola e nessuna dopo la virgola);

– si scrivano i valori delle componenti di step, (in notazione esponenziale con una cifra prima della virgola

e una dopo la virgola);

• Quanto vale l’ultima componente di xv (in notazione decimale con una cifra prima della virgola e tre dopo la virgola)? Qual’e’ l’ultimo valore dello step al termine delle iterazioni (in notazione esponenziale con una cifra prima della virgola e una dopo la virgola)? Qual’e’ il valore di nit?

ultima componente di xv ultima componente di step

                                                                              nit