Programma per il calcolo approssimato di un integrale
Inviato: 31 lug 2013, 14:26
Ciao a tutti
, devo svolgere un esercizio utilizzando matlab.
L' esercizio assegnato è
Ho provato a svolgerlo in questo modo, ma non avendo molta esperienza con matlab ho paura di aver commesso diversi errori, vi chiedo quindi un piccolo aiuto
Io ho provato a svolgerlo così :
L' esercizio assegnato è
Ho provato a svolgerlo in questo modo, ma non avendo molta esperienza con matlab ho paura di aver commesso diversi errori, vi chiedo quindi un piccolo aiuto
Io ho provato a svolgerlo così :
Codice: Seleziona tutto
%% ***********************************************************************
%% PROGRAMMA simpson_comp_itera
%
% programma per il calcolo della formula dei simpson
% composita su 'N' intervalli per approssimare l'integrale
% di 'f' nell'intervallo [a,b],
% Con ciclo FOR ino ad N_max
% flag == 0 --> precisione non raggiunta ( aumentare n_max numero massimo
% iterazioni consentite)
% == 1 --> precisione raggiunta
% Si esegue confronto con integrale ottenuto da matlab
%% ***********************************************************************
clear
% tolleranze
n_max = 50;
disp('Numero massimo iterazioni consentite: '),disp( n_max)
toll=10^(-6);
disp('Precisione prefissata:'), disp(toll)
% assegnazione dati
ab=input('Inserisci intervallo di integrazione ([a,b]): ');
a=ab(1);
b=ab(2);
% valutazioni negli estremi di integrazione
fa = f(a);
fb = f(b);
% Ampiezza intervallo
h = b-a;
% Approssimazione dell'integrale in un intervallo (N=1)
I(1) = (b-a)*(fa+fb)/6
N=1;
% Variabile di controllo
flag=0;
for iter = 1: n_max
% Raddopio gli intervalli
N=2*N;
% Ampiezza degli intervalli
h= (b-a)/N ; %%% Si dimezza h = h/2;
% Somma valutazioni di f
somma=0;
for i =1:N-1
somma = somma + f(a+i*h);
end
%%% somma=sum(f(a+[1:N-1]));
% Formula simpson composita
I(iter+1) = (b-a)*( fa + 2* somma + 4* somma + fb )/6;
if abs( I(iter+1) - I(iter))< toll * abs(I(iter+1))
flag=1;
disp('Precisione prefissata raggiunta con iterazioni:')
disp(iter)
break
end
end
if flag==0
disp('==========================================================')
disp('ATTENZIONE: PRECISIONE NON RAGGIUNTA')
disp('==========================================================')
end
format long
disp('==========================================================')
disp(' Approssimazioni calcolate')
disp(' Iterazione Integrale approssimato')
disp('==========================================================')
disp([[0:iter]' I' ])
Iesatto = quad('f',a,b);
disp('==========================================================')
disp('Integrale esatto: '); disp(Iesatto)
disp('==========================================================')
format short