我得到一个函数,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),而且我从哪里得到错误,但是......不知道如何修复它。
请帮忙。
答案 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的元素数量,但不太优雅。