2017-03-26 1 views
0

함수 f (x) = 5 * sin (x) * exp (-x-0.2) -1이 주어졌으며 고정 소수점 반복을 사용하여 루트를 찾고 싶습니다. 지시는 x = g (x)가되도록 방정식을 다시 정렬하라고했습니다. 고정 소수점 반복

그래서 그것을 변환하는 X = -ln [1/(5sin (X)] - 0.2

I는 while 루프 만족 × (1 + I) = g (I)의 관계 등을 할 나는 x가 수렴 할 때까지. 나는 여기에 '수렴하는'의미 추측하고, X를 업데이트하는 것이 복근 (X (I) -x (내가 + 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)을 선언하지 않은 것을 볼 수있다. 처음에는 오류가 발생하지만 해결 방법은 없습니다.

도와주세요. 당신이 시작하는 X의 하나 개의 값이 있기 때문에

답변

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(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 루프를 사용하는 방법을 알고 있었지만 명확하게하지 않았다고 생각합니다. –