将Matlab转换为Mathematica,定点迭代

时间:2018-05-02 00:58:00

标签: matlab wolfram-mathematica

这是我的Matlab代码:

clear;clc;format ('long','g')
i=1;
x(i)=0;
error(i) = 9999;

while error(i) >= 0.05
    x(i+1) = (0.2062129)*(20+(2*x(i)))^(2/5);
    error(i+1)=abs((((x(i+1)-x(i))/(x(i+1)))*100));
    i=i+1;
end

disp('           root                 error(%)');
disp([x',error'])

如何将其转换为Mathematica,以便它在matlab中生成根和错误列表?

2 个答案:

答案 0 :(得分:1)

由于我们没有从Matlab获得的输出,因此很难知道这是否足够正确。将它与你拥有的东西相比较并从那里开始。

captions

在几分之一秒内返回

expr={1,0,9999};
f[{i_,xi_,err_}]:=(xipp=0.2062129*(20+(2*xi))^(2/5);
  {i+1,xipp,Abs[(((xipp-xi)/(xipp))*100)]});
NestWhileList[f,expr,#[[3]]>=.05&]

答案 1 :(得分:0)

我建议不要在你喜欢的函数中隐藏收敛测试:

f[xi_] := 0.2062129*(20 + (2*xi))^(2/5)
NestWhileList[f, 0, Abs[(#2 - #1)/#2*100] >= .05 &, 2]
  

{0,0.683483,0.701799,0.70228,0.702293}

你也可以这样做:

FixedPointList[f, 0, SameTest -> (Abs[(#2 - #1)/#2*100] < .05 &)]

请注意,在这两种情况下,如果您只想要最终结果而不是中间值列表,则可以使用FixedPointNestWhile