2017-03-26 18 views
0

私は関数f(x)= 5 * sin(x)* exp(-x-0.2)-1を与えられ、固定小数点反復を使って根を見つけたいと思います。命令はx = g(x)を得る方程式を再配置するように指示しました。 MATLAB固定小数点の反復

は、私はそれを変換するX = -ln [1 /(5sin(X)] - 0.2

Iは、whileループを満たす×(1 + I)= G(I)関係とを作りたいです私は、xが収束するまで、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 = 1 + 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の要素の数はテストできますが、それほどエレガントではありません。

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 
+0

私はwhileループでそれを行うことができる方法はありますか?私はforループでそれをする方法を知っていたが、私はそれを明確にしなかったと思う –