MATLAB,定点迭代

时间:2017-03-26 06:36:46

标签: matlab iteration root

我得到一个函数,f(x)= 5 * sin(x)* exp(-x-0.2)-1,我想找到一个使用定点迭代的根。该指令告诉我重新安排方程式得到x = g(x)。

所以我将它转换为x = -ln [1 /(5sin(x)] - 0.2

我希望在更新x时创建一个满足x(1 + i)= g(i)关系的while循环,直到x收敛。我猜这个会聚'这意味着abs(x(i)-x(i + 1))非常小,但不太确定。

x(1)=1;
while abs(x(i+1)-x(i)>0.0001 && i<50
    g(i)=-log(1/(5*sin(x(i))))-0.2;
    x(i+1)=g(i);
end

我的代码显然是错误的。我知道我必须更新我喜欢,i = i + 1;在某个地方,但我不知道应该如何应用它。另外,我发现我没有在开头声明x(1 + 1),而且我从哪里得到错误,但是......不知道如何修复它。

请帮忙。

2 个答案:

答案 0 :(得分:0)

将测试收敛到循环中,因为你只有一个x值开头:

x(1) = 1;
max_iter = 50;
for i = 1 : max_iter
    x(i+1) = -log(1/(5*sin(x(i)))) - 0.2;
    if abs(x(i+1) - x(i)) < 0.0001
        break; end
end

答案 1 :(得分:0)

如果你想在while循环中执行它,那么你需要在while循环之外进行第一次迭代:

x(1) = 1;
x(2) = -log(1/(5*sin(x(1)))) - 0.2;
i = 2;
max_iter = 50;
while (abs(x(i) - x(i-1)) > 0.0001) && (i < max_iter)
   x(i+1) = -log(1/(5*sin(x(i)))) - 0.2;
   i = i + 1;
end

或者,您可以测试while条件中x的元素数量,但不太优雅。