2012-04-19 226 views
1

我認爲這將是一個簡單的迭代,但顯然不是,我一直看到屏幕上的數字和b = 425.0000 ......這應該結束我的while循環,但我已經變得豪爽!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 
在上面我有 cntr = cntr + 1但在其他語言,我可以縮短這 cntr++cntr+=1我怎麼能做到這一點在MATLAB

還?

乾杯!

回答

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 2012-04-19 21:51:52

2

似乎b收斂到425,但實際上並沒有達到425 b是一樣的東西424.9999999999,當顯示四捨五入爲425

沒有+++=運營商在Matlab據我所知。

+0

感謝'++'和'+ ='以及關於如何修復424.99r概率的提示? – Accendi 2012-04-19 21:46:45

1

你沒有足夠的印刷小數位在於向世人證明問題,請嘗試運行以下:

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的時候它的價值是424.99999999999983temp值是0所以b永遠不會進一步增加。

MATLAB沒有實現任何增量/減量運算符。

+0

啊,非常感謝! – Accendi 2012-04-19 21:49:58

1

MATLAB沒有相當於前後增量操作符。

+0

我仍然認爲他們沒有在語言中加入這種感覺真是太可惜了。它可以清理你想在同一個地方索引和增加的代碼。 – jxramos 2015-08-22 00:08:48

0

看來,你的表達限制是425,這意味着它從來沒有真正達到這個價值。你必須以某種方式編輯你的代碼來解決這個問題。

此外,還有no such increment operator

相關問題