编程实现复化梯形, 复化 Simpson 求积公式,求pi的近似值,要求精度达到 10^-4.
clear
a=0
b=1
fprintf('复化梯形公式:\n')
for i=1:100
h=(b-a)/i; %初始化 步长
y=(h/2)*(f(a)+f(b));
fprintf('i=%d ',i)
if i>1
for j=1:(i-1)
y=y+h*(f(a+j*h));
end
c=[c,y];%存储每个估计值
end
fprintf('%8.8f\n',y)
f2=abs(y-pi);
f1=0.5*10^(-4);
if f2<f1 %判断是否达到精度
fprintf('break\n')
break
end
end
fprintf('复化Simpson公式:\n')
for i=1:50
h=(b-a)/i;
y=(h/6)*(f(a)+f(b));
fprintf('i=%d ',i)
if i>1
for j=1:(i-1)
y=y+(h/3)*(f(a+j*h));
end
c=[c,y];
end
for ff=0:(i-1)
y=y+(2*h/3)*(f(a+(ff+0.5)*h));
end
fprintf('%8.8f\n',y)
f2=abs(y-pi);
f1=0.5*10^(-4);
if f2<f1
fprintf('break')
break
end
end
function [y]=f(x)
y=4/(1+x^2);
end
结果:
复化梯形公式:
i=1 3.00000000
i=2 3.10000000
i=3 3.12307692
i=4 3.13117647
i=5 3.13492611
i=6 3.13696307
i=7 3.13819131
i=8 3.13898849
i=9 3.13953504
i=10 3.13992599
i=11 3.14021524
i=12 3.14043525
i=13 3.14060646
i=14 3.14074231
i=15 3.14085191
i=16 3.14094161
i=17 3.14101595
i=18 3.14107825
i=19 3.14113097
i=20 3.14117599
i=21 3.14121472
i=22 3.14124830
i=23 3.14127759
i=24 3.14130330
i=25 3.14132599
i=26 3.14134611
i=27 3.14136403
i=28 3.14138007
i=29 3.14139448
i=30 3.14140747
i=31 3.14141922
i=32 3.14142989
i=33 3.14143961
i=34 3.14144848
i=35 3.14145660
i=36 3.14146405
i=37 3.14147091
i=38 3.14147723
i=39 3.14148308
i=40 3.14148849
i=41 3.14149351
i=42 3.14149817
i=43 3.14150251
i=44 3.14150657
i=45 3.14151035
i=46 3.14151389
i=47 3.14151720
i=48 3.14152032
i=49 3.14152324
i=50 3.14152599
i=51 3.14152858
i=52 3.14153102
i=53 3.14153332
i=54 3.14153550
i=55 3.14153756
i=56 3.14153951
i=57 3.14154136
i=58 3.14154311
break
复化Simpson公式:
i=1 3.13333333
i=2 3.14156863
break>>