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,