我有等式f(x)=exp(x)+3x^2
,f(x)=0
,x=?
然后我使用scilab
使用定点迭代求解该等式,这是我的代码
function fixed_point(fung,x0,err)
x=zeros(100);
ea = 100;
i = 1;
x(i)=x0;
printf(" \t i \t x(i) \t ea(%%)");
printf("\n\t %d \t %f \t %f", i, x(i), abs(ea));
while (abs(ea) >err) do
i=i+1;
z =x(i-1);
x(i) = evstr(fung)+z;
ea =100*(x(i)-x(i-1))/x(i);
printf("\n\t %d \t %f \t %f", i, x(i), abs(ea));
end
printf("\n Akar = %f", x(i));
endfunction
然后我用它来调用它:
fixed_point ('exp(z)-(3 .* z .*z)',0.00000000001,0.5)
我最后得到x(i)=inf
,但我认为这不是答案,有人可以向我解释我的代码有什么问题吗?
答案 0 :(得分:1)
让我们将答案分成"子问题":
一般情况下:如果您不了解解决方案,请不要使用数值方法。正如丹尼尔所表明的那样,这个等式在实数上没有任何解决方案。如果你有一个合理的x0,首先绘制它的邻域!
一般来说:您的目标是解决方程还是实施该方法? Matlab有例如fsolve
函数(你已经添加了matlab标签和scilab),或者,如果你想设计自己的函数,Newton's method在这些易于区分的函数上运行得很好(sin,exp ,x ^ n ......)。
特别是:如果解决方案没有收敛,请在代码中添加允许您转义while循环的内容。比你的输出应该是" DOESN' T CONVERGE"这肯定比神秘的inf
好(例如打破循环if i>1e3
或类似的东西)。