1

我有一个方程,f(x)=exp(x)+3x^2然后我用定点迭代来求解这个方程这是我的代码f(x)=0x=?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终于得到了,但我认为这不是答案,有人可以向我解释我的代码有什么问题吗?

4

1 回答 1

1

让我们将答案划分为“子问题”:

  1. 一般来说:如果您没有解决方案的想法,请不要使用数值方法。正如丹尼尔所表明的,这个方程在实数上没有任何解。如果你有一个合理的 x0,首先绘制它的邻域!

  2. 一般来说:您的目标是解决方程式还是实施该方法?Matlab 具有例如fsolve函数(并且您已经添加了 matlab 标记以及 scilab),或者,如果您想设计自己的函数,牛顿法在这些易于微分的函数(sin、exp、x^n... )。

  3. 特别是:在您的代码中添加一些内容,如果解决方案不收敛,您可以逃避 while 循环。比你的输出应该是“DOESN'T CONVERGE”,这绝对比神秘好inf(例如打破循环if i>1e3或类似的东西)。

于 2015-02-27T13:26:22.440 回答