此段代碼是基於辛普森公式的積分計算方法
1.代碼
%%復合辛普森求積公式 %%Y是數值(attribute=0)或具體表達式(attribute=1),interval是求積區間,n是精度(如果是數值,則為數值長度-1) function CSQF = Compound_Simpson_quadrature_formula(Y,interval,n,attribute) a = interval(1);b = interval(2); h = (b-a)/n;lambda = 0.5; for i = 1:n+1 X(i) = a+h*(i-1); end if attribute == 0 for i = 1:n r = rand(1); Y_ave(i) = r*lambda*Y(i)+(1-r*lambda)*Y(i+1); end sum1 = 0; sum2 = 0; for i = 1:n sum1 = sum1+Y_ave(i); end for i = 2:n sum2 = sum2+Y(i); end CSQF = vpa(h*(Y(1)+Y(n+1)+4*sum1+2*sum2)/6,8); elseif attribute ==1 F = subs(Y,X); for i = 1:n r = rand(1); F_ave(i) = r*lambda*F(i)+(1-r*lambda)*F(i+1); end sum1 = 0; sum2 = 0; for i = 1:n sum1 = sum1+F_ave(i); end for i = 2:n sum2 = sum2+F(i); end CSQF = vpa(h*(F(1)+F(n+1)+4*sum1+2*sum2)/6,8); end end
2.例子
syms x; Y = exp(x)*sin(x)+log(x+1); interval=[0 pi]; attribute = 1; n = 1000; Compound_Simpson_quadrature_formula(Y,interval,n,attribute) vpa(int(Y,x,interval),8)
3.結果
ans = 14.815334 ans = 14.81429
通過結果看出,辛普森求積公式的精度並不是很高,同復合梯形公式一樣,取決於求積精度和積分表達式復雜程度