1. 用1阶至4阶Newton-Cotes公式计算积分
程序:
function I = NewtonCotes(f,a,b,type)
%
syms t;
t=findsym(sym(f));
I=0;
switch type
case 1,
I=((b-a)/2)*(subs(sym(f),t,a)+subs(sym(f),t,b));
case 2,
I=((b-a)/6)*(subs(sym(f),t,a)+4*subs(sym(f),t,(a+b)/2)+...
subs(sym(f),t,b));
case 3,
I=((b-a)/8)*(subs(sym(f),t,a)+3*subs(sym(f),t,(2*a+b)/3)+...
3*subs(sym(f),t,(a+2*b)/3)+subs(sym(f),t,b));
case 4,
I=((b-a)/90)*(7*subs(sym(f),t,a)+...
32*subs(sym(f),t,(3*a+b)/4)+...
12*subs(sym(f),t,(a+b)/2)+...
32*subs(sym(f),t,(a+3*b)/4)+7*subs(sym(f),t,b));
case 5,
I=((b-a)/288)*(19*subs(sym(f),t,a)+...
75*subs(sym(f),t,(4*a+b)/5)+...
50*subs(sym(f),t,(3*a+2*b)/5)+...
50*subs(sym(f),t,(2*a+3*b)/5)+...
75*subs(sym(f),t,(a+4*b)/5)+19*subs(sym(f),t,b));
case 6,
I=((b-a)/840)*(41*subs(sym(f),t,a)+...
216*subs(sym(f),t,(5*a+b)/6)+...
27*subs(sym(f),t,(2*a+b)/3)+...
272*subs(sym(f),t,(a+b)/2)+...
27*subs(sym(f),t,(a+2*b)/3)+...
216*subs(sym(f),t,(a+5*b)/6)+...
41*subs(sym(f),t,b));
case 7,
I=((b-a)/17280)*(751*subs(sym(f),t,a)+...
3577*subs(sym(f),t,(6*a+b)/7)+...
1323*subs(sym(f),t,(5*a+2*b)/7)+...
2989*subs(sym(f),t,(4*a+3*b)/7)+...
2989*subs(sym(f),t,(3*a+4*b)/7)+...
1323*subs(sym(f),t,(2*a+5*b)/7)+...
3577*subs(sym(f),t,(a+6*b)/7)+751*subs(sym(f),t,b));

本文介绍了使用C语言和Matlab实现不同阶数的Newton-Cotes公式计算积分,包括复合梯形公式和复合辛普森公式。通过示例代码展示如何运用这些方法,并讨论了误差与步长的关系,指出复合辛普森公式通常具有更高的精度。同时,还使用三点和五点Gauss-Legendre公式进行积分计算。
最低0.47元/天 解锁文章
1696

被折叠的 条评论
为什么被折叠?



