2012-04-19 1 views
1

나는 이것이 단순한 반복 일 거라고 생각했지만 외관상으로는 안되는 숫자를 계속 보았고 b = 425.0000 ... 내 while 루프를 끝내야 만했지만 왕족이되었다! 내가 cntr = cntr + 1을 가지고 있지만 다른 언어로 내가 cntr++이을 단축 할 수 또는 cntr+=1가 어떻게 MATLAB에서이 작업을 수행 할 수 있습니다 위의 또한 MATLAB 어떻게이 루프를 만들었지? 무한 + 또한 i = i + 1을 단축하는 방법?

temp = 85; 
b = 85; 
cntr = 0; 

while b < 425 
    temp = temp * 0.8 
    b = b + temp 
    cntr = cntr + 1 
end; 
cntr 

?

건배!

답변

5

조건에 따라 b의 현재 값이 특정 유효 자릿수까지 425 값에 근접하는지 테스트해야합니다. 당신은 지금이 작업을 수행 할 수 있습니다

temp = 85; 
b = 85; 
cntr = 0; 

while b < (425 - 0.0001) #<--- however many significant digits you need. 
    temp = temp * 0.8; 
    b = b + temp; 
    cntr = cntr + 1; 
end 

cntr 

문제는 당신의 while 루프가 425에 수렴하지만, 결코 확실히이 점점되지 않는 것입니다.

+0

감사합니다. 더 많은 설명을^_ ^ – Accendi

2

b 425에 수렴하지만, 실제로는 425 b에 도달하지 않은 것으로 보인다는 424.9999999999 같은 인 425로 반올림됩니다 표시 될 때

++ 또는 += 운영자는 내가 아는 한 매트랩이 없습니다 .

+0

424.99r 문제를 해결하는 방법에 대한 '++'및'+ ='및 모든 팁에 감사드립니다. – Accendi

1

문제를 demostrate 충분한 소수점을 인쇄하지 않는, 실행 해 다음

temp = 85; 
b = 85; 
cntr = 0; 

while (b < 425) && (cntr < 300) 
    temp = temp * 0.8; 
    b = b + temp; 
    cntr = cntr + 1; 
    fprintf(1, '%.20f\t%.20f\t%d\n', temp, b, cntr); 
end 

당신은 b은 결코 시간, 425에 도달하지 것을 볼 수 있습니다 그 값이 temp의 값 424.99999999999983입니다 0이므로 b은 더 이상 증가하지 않습니다.

MATLAB은 증가/감소 연산자를 구현하지 않습니다.

+0

아 감사합니다. – Accendi

1

MATLAB에는 사전 및 사후 증가 연산자가 없습니다.

+0

나는 여전히 그들이 언어에 추가하지 않은 것은 부끄러운 일이라고 생각한다. 동일한 장소에서 색인을 생성하고 증분하려는 코드를 실제로 정리할 수 있습니다. – jxramos

0

표현의 한계는 425이며 실제적으로 그 값에 도달하지 못했음을 의미합니다. 이 문제를 설명하기 위해 코드를 어떻게 든 편집해야합니다.

또한 no such increment operator입니다.