Corso di Calcolo numerico -...

10
Corso di Calcolo numerico Dr Roberto PISANO Dipartimento di Scienza dei Materiali ed Ingegneria Chimica e-mail: [email protected] Tel: +39 011 090 4694 POLITECNICO DI TORINO – FACOLTA’ DI INGEGNERIA Corso di Laurea in Ingegneria Civile

Transcript of Corso di Calcolo numerico -...

Corso di Calcolo numerico

Dr Roberto PISANO

Dipartimento di Scienza dei Materiali ed Ingegneria Chimica

e-mail: [email protected]

Tel: +39 011 090 4694

POLITECNICO DI TORINO – FACOLTA’ DI INGEGNERIA

Corso di Laurea in Ingegneria Civile

Esercizio 6.1

Si scriva una function che implementi l’algoritmo di bisezione perapprossimare la radice contenuta in un intervallo [a, b] di un’equazionenon lineare f(x)=0.

Suggerimento

Si crei un M-file di tipo function, denominato bisezione.m, chericeva in ingresso: a, b, f, tol e k_max e restituisca x enum_it.

y=fzero('f',x_0,toll): calcola un’approssimazione y, contolleranza assoluta toll,di una radice di un’equazione f(x)=0 apartire dall’approssimazione iniziale x_0.

Esercizio 6.1 – soluzione 1/2function [x,num_it]=bisezione(a,b,f,tol,k_max)

% Calcolo la funzione negli estremi a,b.

fa=feval(f,a);

fb=feval(f,b);

% Verifico che il metodo di bisezione possa essere

% applicato.

if fa*fb>0

disp(’La funzione deve soddisfare f(a)*f(b)<0!’)

return

end

Esercizio 6.1 – soluzione 2/2for i=1:k_maxnum_it=i;c=(a+b)/2;fc=feval(f,c);if abs(b-a)<tolbreakendif (fa*fc)<0b=c;fb=fc;elsea=c;fa=fc;endendx=c;return

Esercizio 6.2

Applicare la function scritta nell’esercizio 6.1 all’equazione:

x2-2=0

Esercizio 6.3

Si confrontino i risultati ottenuti al punto precedente con quelli ottenutiusando la funzione MatLab predefinita fzero.

Suggerimento

Si definisca la funzione usando la funzione MatLab predefinitainline oppure la si implementi in un M-file di tipo function.

y=fzero('f',x_0,toll): calcola un’approssimazione y, contolleranza assoluta toll,di una radice di un’equazione f(x)=0 apartire dall’approssimazione iniziale x_0.

Esercizio 6.2 / 6.3 – soluzione 1/1

clc

clear all

funz=inline(’x.^2-2’);

a=0;

b=4;

tol=1e-6;

k_max=1000;

[x1,num_it]=bisezione(a,b,funz,tol,k_max)

x2=fzero(funz,1)

Esercizio 6.4

Si scriva una function che implementi il metodo di Newton per larisoluzione di un’equazione non lineare f(x)=0

Suggerimento

Si crei un M-file di tipo function, denominato Newton.m, chericeva in ingresso: x0, f, tol_f, tol_r e k_max e restituisca x

e num_it.

Esercizio 6.4 – soluzione 1/1

function [x,iter]=newton(x0,f,df,tol_f,tol_r,k_max)%Inizializzo le seguenti variabili:iter=0;err=2*tol_r;x=x0;% Eseguo l’algoritmo in modo iterativo fino quanto la% tolleranza voluta non e’ stata raggiunta:while (i<k_max&err>tol_r)

fx=feval(f,x);dfx=feval(df,x);if abs(fx)<=tol_f

breakendx1=x-(fx/dfx);err=abs(x1-x)/abs(x1);iter=iter+1;x=x1;

end

Esercizio 6.5

Applicare la function scritta nell’esercizio 6.4 all’equazione:

ex-2x2=0

Esercizio 6.6

Si confrontino i risultati ottenuti al punto precedente con quelli ottenutiusando la funzione MatLab predefinita fzero.

Suggerimento

Si definisca la funzione usando la funzione MatLab predefinitainline oppure la si implementi in un M-file di tipo function.

y=fzero('f',x_0,toll): calcola un’approssimazione y, contolleranza assoluta toll,di una radice di un’equazione f(x)=0 apartire dall’approssimazione iniziale x_0.

Per la funzione esponenziale si usi la funzione MatLabpredefinita exp(x).

Esercizio 6.5 / 6.6 – soluzione 1/1clcclear allclose allfunz=inline(’exp(x)-2*x^(2)’);dfunz=inline(’exp(x)-4*x’);fplot(’exp(x)-2*x^(2)’,[-5,5])grid onx0=0;tol_f=1e-6;tol_r=1e-6;k_max=1000;[x,iter]=newton(x0,funz,dfunz,tol_f,tol_r,k_max)pausex =fzero(funz,x0)

Si confrontino i risultati ottenuti al variare dell’approssimazione iniziale(x0).