Calcolo Numerico (Ingegneria Energia/Meccanica, Canale A) Prova di Laboratorio I, del 15 Giugno 2019, fila I

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 delle secanti

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

che permette di determinare la zero di f con dati iniziali x_{0}, x_{1}.

A tal proposito,

• Si crei una function di nome secanti.m che implementi l’algoritmo relativo a tale metodo, avente come input:

(a) la funzione f,

(b) i due valori iniziali x0 e x1,

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

(d) il numero massimo di iterazioni consentite nmax;

• la stessa function deve dare in output

(a) il vettore xv che contiene le iterate (inclusi i valori iniziali x_{0} e x_{1}),

(b) il vettore fxv dei residui calcolati nelle corrispondenti iterate presenti in xv,

(c) il numero n di iterazioni effettuate;

• la function dovrà avere la seguente intestazione:

  function [xv, fxv] = secanti (f, x0, x1, toll, nmax)
  % Uso:
  %   [xv, fxv] = secanti(f, x0, x1, toll, nmax)
  %
  % Dati di ingresso:
  %   f:      funzione
  %   x0:     prima iterata
  %   x1:     seconda iterata
  %   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
  %   fxv:    vettore contenente i valori di f(xv)

• lo script inizialmente, ponga xv(1) = x0, xv(2) = x1, valuti fxv(1) = f(x0), fxv(2) = f(x1);

• lo script mediante un ciclo-for con n=2:nmax testi se

                                  abs(xv(n)-xv(n-1)) <= toll;  (2)

– in caso affermativo esca per return dal ciclo for;

– in caso non affermativo,

∗ testi se fxv(n)-fxv(n-1) valga 0 e in caso affermativo esca con return dopo aver scritto su monitor

         il messaggio di errore non si e' potuto terminare il processo correttamente;

∗ in caso fxv(n)-fxv(n-1) non valga 0, calcoli la nuova iterazione del metodo delle secanti come descritto in (1) e la salvi in xv(n+1), calcoli il residuo di f in xv(n+1) e lo assegni a fxv(n+1).

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

  sono state effettuate troppe iterazioni;

(continua →)

2. Si scriva una function demo I che mediante un comando del tipo f=@(x) ... definisca la funzione f(x) = x^{2} − π, e ponga x0=1, x1=2, toll pari a 10^{−6}, nmax=1000. Di seguito risolva mediante secanti l’equazione f(x) = 0 in oggetto, calcolando lo zero positivo. Si scrivano sotto l’ultima componente di xv con 1 cifra prima della virgola e 6 dopo la virgola, in formato decimale, come pure l’ultima componente di fxv con 1 cifra prima della virgola e 2 dopo la virgola, in formato esponenziale.

                           xv(end)                              fxv(end)

3. Si scriva una function demo II che

• definisca la funzione f(x) = log(x) − 10 mediante il comando @;

• si pongano x0=2, x1=2.5, toll pari a 10^{−12}, nmax=1000;

• si calcoli con secanti lo zero di f(x) = 0;

• si esegua il grafico, in scala semilogaritmica, delle coppie (k, |f(x_{k})|), con k = 1, …, n (qui n é la lunghezza del vettore xv) e lo si salvi sul file residui.jpg;

• scriva su monitor

(a) l’ultima componente di xv con 1 cifra prima della virgola e 15 dopo la virgola, in notazione esponenziale,

(b) il valore assoluto dell’ultima componente di fxv con 1 cifra prima della virgola e 15 dopo la virgola, in notazione esponenziale;

• si scrivano tali risultati nella tabella

                             xv(end)                              fxv(end)