用MATLAB来实现变步长梯形和变步辛普森求积法

用MATLAB来实现变步长梯形和变步辛普森求积法
1、 变步长梯形求积法原理:变步长求积法的思想是利用若干小梯形的面积代替原方程的积分,当精度达不到要求时,可以通过增加点数对已有的区间再次划分,达到所需精度时即可;其中由于新的式子中有原来n点中的部分项主要公式:T2n=Tn/2+ (h/2)*Σf (xk+0.5);
2、 变步长辛普森求积算法,是计算数值积分里面的一个常用算法。与变步长梯形公式一样,将求积区间逐步二分,在每个子区间上运用辛普森公式,最后累加起来。与变步长梯形公式相比,该算法就是运算次数较少,比复合梯形公式计算速度快。但是精度是一样的。
3、 题目1
复合梯形公式

在matlab编辑窗口输入以下程序:
function T = myInt3(f,a,b,e)
h = b-a;
T1 = h*(f(a)+f(b))/2;
T2 = T1/2 + h/2*f(a+h/2);
n = 2;
while abs(T2-T1) >= e

T1 = T2;
S = 0;    
for j=0:n-1
    x = a + (2*j+1)*(b-a)/(2*n);
    S = S+ f(x);
end
T2 = T1/2 +S*(b-a)/(2*n);
n = n*2;   

end
T = T2;
再在命令符窗口输入

F=@(x)exp(-x.^2);
myInt3(F,0,1,0.000001)
即可得到

在编辑窗口输入程序:
%举例说明1clc
clear all
F=@(x)exp(-x.^2);
Q=quadgk(F,0,1)
也可得到

题目2

程序
定义复合辛普森求积公式(simpr1.m):
function s=simpr1(f,a,b,n)
%f为被积函数;
%a,b分别为积分的上下限;
%n是子区间的个数;
%s是梯形总面积,即所求积分数值;
h=(b-a)/(2n);
s1=0;
s2=0;
for k=1:n
x=a+h
(2k-1);
s1=s1+feval(‘f’,x);
end
for k=1:(n-1)
x=a+h
2k;
s2=s2+feval(‘f’,x);
end
s=h
(feval(‘f’,a)+feval(‘f’,b)+4s1+2s2)/3;
2)定义被积函数f.m文件
function y=f(x)
y=[log(1.0+x)]/(1+x^2);
end
3)在不同个数的子区间下计算积分(在命令窗口输入)
simpr1(‘f’,0,1,4)
结果显示
通过以上数据可以发现,复合辛普森的求积公式比复合梯形公式的代数精度高很多。同时通过对比发现,复合辛普森积分公式比单独使用辛普森公式高近6个数量级,效果明显。数值模拟实验结果发现,当积分区间比较大的时候,可以采用复合积分的方法可以得到更好的效果,变步长积分方法,不仅可以很好地控制计算误差,并且可以寻找到合适的积分步长。同时,使用复合辛普森公式计算比使用复合梯形公式计算更快达到计算精度,工作量节省很多!

你可能感兴趣的:(matlab,开发语言)