matlab代码--数值积分
- 格式:pdf
- 大小:159.53 KB
- 文档页数:12
数值积分
1.CombineTraprl复合梯形公式求积分 function [I,step] = CombineTraprl(f,a,b,eps)
%f 被积函数
%a,b 积分上下限
%eps 精度
%I 积分结果 %step 积分的子区间数
if(nargin ==3)
eps=1.0e-4;
end
n=1;
h=(b-a)/2;
I1=0;
I2=(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b))/h;
while abs(I2-I1)>eps n=n+1;
h=(b-a)/n;
I1=I2;
I2=0;
for i=0:n-1 x=a+h*i;
x1=x+h;
I2=I2+(h/2)*(subs(sym(f),findsym(sym(f)),x)+subs(sym(f),findsym(sym(f)),x1));
end end
I=I2;
step=n;
2.IntSimpson用辛普森系列公式求积分
function [I,step] = IntSimpson(f,a,b,type,eps)
%type = 1 辛普森公式
%type = 2 辛普森3/8公式 %type = 3 复合辛普森公式
if(type==3 && nargin==4)
eps=1.0e-4; %缺省精度为0.0001
end
I=0;
switch type
case 1, I=((b-a)/6)*(subs(sym(f),findsym(sym(f)),a)+...
4*subs(sym(f),findsym(sym(f)),(a+b)/2)+...
subs(sym(f),findsym(sym(f)),b));
step=1;
case 2,
I=((b-a)/8)*(subs(sym(f),findsym(sym(f)),a)+...
3*subs(sym(f),findsym(sym(f)),(2*a+b)/3)+ ...
3*subs(sym(f),findsym(sym(f)),(a+2*b)/3)+subs(sym(f),findsym(sym(f)),b)); step=1;
case 3,
n=2;
h=(b-a)/2; I1=0;
I2=(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b))/h;
while abs(I2-I1)>eps
n=n+1;
h=(b-a)/n; I1=I2;
I2=0;
for i=0:n-1
x=a+h*i;
x1=x+h; I2=I2+(h/6)*(subs(sym(f),findsym(sym(f)),x)+...
4*subs(sym(f),findsym(sym(f)),(x+x1)/2)+...
subs(sym(f),findsym(sym(f)),x1));
end
end I=I2;
step=n;
end
3.NewtonCotes用牛顿-科茨系列公式求积分
function I = NewtonCotes(f,a,b,type)
%type = 1 科茨公式
%type = 2 牛顿-科茨六点公式 %type = 3 牛顿-科茨七点公式
I=0;
switch type case 1,
I=((b-a)/90)*(7*subs(sym(f),findsym(sym(f)),a)+...
32*subs(sym(f),findsym(sym(f)),(3*a+b)/4)+...
12*subs(sym(f),findsym(sym(f)),(a+b)/2)+...
32*subs(sym(f),findsym(sym(f)),(a+3*b)/4)+7*subs(sym(f),findsym(sym(f)),b));
case 2,
I=((b-a)/288)*(19*subs(sym(f),findsym(sym(f)),a)+...
75*subs(sym(f),findsym(sym(f)),(4*a+b)/5)+... 50*subs(sym(f),findsym(sym(f)),(3*a+2*b)/5)+...
50*subs(sym(f),findsym(sym(f)),(2*a+3*b)/5)+...
75*subs(sym(f),findsym(sym(f)),(a+4*b)/5)+19*subs(sym(f),findsym(sym(f)),b));
case 3,
I=((b-a)/840)*(41*subs(sym(f),findsym(sym(f)),a)+...
216*subs(sym(f),findsym(sym(f)),(5*a+b)/6)+...
27*subs(sym(f),findsym(sym(f)),(2*a+b)/3)+...
272*subs(sym(f),findsym(sym(f)),(a+b)/2)+... 27*subs(sym(f),findsym(sym(f)),(a+2*b)/3)+...
216*subs(sym(f),findsym(sym(f)),(a+5*b)/6)+41*subs(sym(f),findsym(sym(f)),b));
end
4.IntGauss用高斯公式求积分 function I = IntGauss(f,a,b,n,AK,XK)
if(n<5 && nargin == 4)
AK = 0;
XK = 0;
else XK1=((b-a)/2)*XK+((a+b)/2);
I=((b-a)/2)*sum(AK.*subs(sym(f),findsym(f),XK1));
end
ta = (b-a)/2; tb = (a+b)/2;
switch n
case 0,
I=2*ta*subs(sym(f),findsym(sym(f)),tb);
case 1,
I=ta*(subs(sym(f),findsym(sym(f)),ta*0.5773503+tb)+...
subs(sym(f),findsym(sym(f)),-ta*0.5773503+tb));
case 2,
I=ta*(0.55555556*subs(sym(f),findsym(sym(f)),ta*0.7745967+tb)+...
0.55555556*subs(sym(f),findsym(sym(f)),-ta*0.7745967+tb)+...
0.88888889*subs(sym(f),findsym(sym(f)),tb));
case 3,
I=ta*(0.3478548*subs(sym(f),findsym(sym(f)),ta*0.8611363+tb)+...
0.3478548*subs(sym(f),findsym(sym(f)),-ta*0.8611363+tb)+...
0.6521452*subs(sym(f),findsym(sym(f)),ta*0.3398810+tb)...
+0.6521452*subs(sym(f),findsym(sym(f)),-ta*0.3398810+tb));
case 4,
I=ta*(0.2369269*subs(sym(f),findsym(sym(f)),ta*0.9061793+tb)+...
0.2369269*subs(sym(f),findsym(sym(f)),-ta*0.9061793+tb)+... 0.4786287*subs(sym(f),findsym(sym(f)),ta*0.5384693+tb)...
+0.4786287*subs(sym(f),findsym(sym(f)),-ta*0.5384693+tb)+...
0.5688889*subs(sym(f),findsym(sym(f)),tb));
end
5.IntGaussLada用高斯拉道公式求积分
function I = IntGaussLada(f,a,b,n,AK,XK)
if(n<6 && nargin == 4) AK = 0;
XK = 0;
else
XK1=((b-a)/2)*XK+((a+b)/2);
I=((b-a)/2)*((2/n/n)*subs(sym(f),findsym(sym(f)),a)+... sum(AK.*subs(sym(f),findsym(sym(f)),XK1)));
end
ta = (b-a)/2;
tb = (a+b)/2; switch n
case 2,
I=ta*0.5*subs(sym(f),findsym(sym(f)),ta*(-1)+tb)+...
1.5*ta*subs(sym(f),findsym(sym(f)),ta*(1/3)+tb);
case 3,