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).
Top Related