我正在尝试使用Maclaurin系列近似cos(x)。 x和错误界限的值需要是用户输入,并且用户需要查看达到该答案所需的估计值和迭代次数。我试图用x = 2和错误< = .001来演示它。使用这些参数,我的代码总是返回8次迭代,答案为-.0476。我做错了什么?
function [CosApprox, Numberofterms] = cos_approx(x, E)
k(1)=1;
T=1;
cos_approx(1)=1
while T>=E
k=k+1;
cos_approx(k)= cos_approx(k-1) + ((-1)^(k-1))*(x^(2*(k-1)))/(2*(factorial(k-1)));
T=abs(cos_approx(k) - cos(x));
end
CosApprox=cos_approx(k)
Numberofterms=k
我是matlab的新手,所以如果我错过了一些明显的东西,我会道歉。
答案 0 :(得分:0)
你的代码没有返回8次迭代,它在我的计算机上返回513次迭代并且终止,因为我们在分子中划分了一个非常大的数字,超过2 ^(512)而另一个非常大的数字512!在分母中评估为Inf。
您使用的是错误的数学公式。
2*(factorial(k-1))
分母中的应该是
factorial(2*(k-1))
只需改变它就可以得到-0.4159的答案,而cos(2)近似为-0.4161。
既然你弄清楚了什么是错的,你可以尝试在速度和可读性方面改进代码。
备注:尽量不要给矢量和函数赋予相同的名称,这很令人困惑。