這段代碼實現的是最一般的數值積分法——梯形求積法,積分值的准確依賴於所取精度大小
1.代碼
%%復合梯形求積公式
%%Y是數值(attribute=0)或具體表達式(attribute=1),interval是求積區間,n是精度(如果是數值,則為數值長度-1)
function CTQF = Compound_trapezoid_quadrature_formula(Y,interval,n,attribute)
a = interval(1);b = interval(2);
h = (b-a)/n;
if attribute == 0
sum = 0;
for i=1:1:n-1
sum=sum+Y(i+1);
end
Tn = (Y(1)+Y(n+1)+2*sum)*h/2;
CTQF = vpa(Tn,8);
elseif attribute == 1
syms x;
X(1) = a;
X(n+1) = b;
for i=1:1:n-1
X(i+1)=a+i*h;
end
sum=0;
for i=1:1:n-1
sum=sum+subs(Y,x,X(i+1));
end
Tn=(subs(Y,x,a)+subs(Y,x,b)+2*sum)*h/2;
CTQF = vpa(Tn,8);
end
2.例子
syms x; Y = exp(x)*sin(x)+log(x+1); interval=[0 pi]; attribute = 1; n = 1000; Compound_trapezoid_quadrature_formula(Y,interval,n,attribute) vpa(int(Y,x,interval),8)
3.結果
ans = 14.814269 ans = 14.81429
我們選取的精度為1000,即區間分割個數,結果精確到1e-4,而隨着所需要精確程度的變大,運算時間將大大增加
