题目如下,没有什么思路用matlab编写

img

img

你好同学,代码供参考:

z = 2;
for i = 1:30
    n = i+1;
    z = 2^(n-1/2)*sqrt(1-sqrt(1-4^(1-n)*z^2));
    fprintf('迭代%d次,z=%.8f,误差%.8f%%\n', i, z, abs(z-pi)/pi*100);
end

结果

迭代1次,z=2.82842712,误差9.96836838%
迭代2次,z=3.06146746,误差2.55046416%
迭代3次,z=3.12144515,误差0.64131489%
迭代4次,z=3.13654849,误差0.16056070%
迭代5次,z=3.14033116,误差0.04015469%
迭代6次,z=3.14127725,误差0.01003958%
迭代7次,z=3.14151380,误差0.00250995%
迭代8次,z=3.14157294,误差0.00062749%
迭代9次,z=3.14158773,误差0.00015687%
迭代10次,z=3.14159142,误差0.00003922%
迭代11次,z=3.14159235,误差0.00000980%
迭代12次,z=3.14159258,误差0.00000245%
迭代13次,z=3.14159263,误差0.00000064%
迭代14次,z=3.14159265,误差0.00000004%
迭代15次,z=3.14159265,误差0.00000026%
迭代16次,z=3.14159261,误差0.00000147%
迭代17次,z=3.14159291,误差0.00000819%
迭代18次,z=3.14159413,误差0.00004684%
迭代19次,z=3.14159655,误差0.00012414%
迭代20次,z=3.14159655,误差0.00012414%
迭代21次,z=3.14167427,误差0.00259777%
迭代22次,z=3.14182968,误差0.00754485%
迭代23次,z=3.14245127,误差0.02733069%
迭代24次,z=3.14245127,误差0.02733069%
迭代25次,z=3.16227766,误差0.65842421%
迭代26次,z=3.16227766,误差0.65842421%
迭代27次,z=3.46410162,误差10.26577908%
迭代28次,z=4.00000000,误差27.32395447%
迭代29次,z=0.00000000,误差100.00000000%
迭代30次,z=0.00000000,误差100.00000000%

可见随着迭代次数增加,最终z并没有收敛到pi,而是越来越趋于0.
这是因为4的-n次方快速收敛到了0,而根号里面一个1减去一个接近于1的数,两个相近的数相减会导致误差传递,同时大数2的n次方乘以相减之后的小数,最终结果的谬误就更大了
有帮助望采纳呢