50 lines
1.1 KiB
Matlab
50 lines
1.1 KiB
Matlab
function [ areai,areaf,err,m ] = static_quadratic( f,m )
|
|
%algoritmo dei trapezi per approssimare un integrale
|
|
% input
|
|
% f = function handle
|
|
% m = matrice n x 2 ordinata in modo crescente per righe rispetto alla
|
|
% prima colonna. la prima colonna rappresenta un punto x, la seconda
|
|
% colonna la f(x). ogni valore della seconda colonna deve essere uguale a
|
|
% 0 o essere la f(x) del punto x della prima colonna sulla medesima riga.
|
|
% output
|
|
% areai = area iniziale
|
|
% areaf = area finale
|
|
% err = errore area iniziale - finale in valore assoluto
|
|
% m = la matrice iniziale con i nuovi punti aggiunti
|
|
|
|
|
|
[x,~] = size(m);
|
|
for i=1:x
|
|
if m(i,2) == 0
|
|
m(i,2)= f(m(i,1));
|
|
end
|
|
end
|
|
|
|
areai=0;
|
|
for i=1:x-1
|
|
k=i+1;
|
|
areai= areai + (((m(i,2) + m(k,2)) * ( m(k,1) - m(i,1) )) /2);
|
|
end
|
|
|
|
i=1;
|
|
k=i+1;
|
|
j=x;
|
|
while i<= ((x * 2)-2)
|
|
valuex= ( m(i,1) + m(k,1) ) /2;
|
|
valuey= f(valuex);
|
|
m= [m(1:i,:);valuex,valuey;m(k:j,:)];
|
|
i=i+2;
|
|
k=k+2;
|
|
j= j + 1;
|
|
end
|
|
|
|
areaf=0;
|
|
for i=1:j-1
|
|
k=i+1;
|
|
areaf= areaf + (((m(i,2) + m(k,2)) * ( m(k,1) - m(i,1) )) /2);
|
|
end
|
|
|
|
err = abs(areaf - areai) / 3;
|
|
end
|
|
|