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));
end
syms x
f=exp(-x).*sin(x);
a=0;b