1

これは単純な反復だと思いましたが、どうやらそうではないようです。画面に数字が表示され続けているのでb = 425.0000、whileループが終了するはずですが、高貴にふわふわしています。

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でこれを行うにはどうすればよいですか?

乾杯!

4

5 に答える 5

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に収束しているが、そこに到達することは決してないということです。

于 2012-04-19T21:48:29.607 に答える
2

425に収束しているように見えbますが、実際には425にbは達していません。これは424.9999999999のようなもので、表示すると425に丸められます。

私の知る限り、Matlabには演算子はありませ++ん。+=

于 2012-04-19T21:36:51.297 に答える
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

その値がisの値にbなるまでに、425に達することはなく、それ以上増分することはありません。424.99999999999983temp0b

MATLABは、インクリメント/デクリメント演算子を実装していません。

于 2012-04-19T21:40:52.557 に答える
1

MATLABには、インクリメント前およびインクリメント後の演算子に相当するものはありません。

于 2012-04-19T21:41:02.473 に答える
0

式の制限は425のようです。つまり、実際にはその値に達することはありません。これを説明するために、なんらかの方法でコードを編集する必要があります。

また、そのようなインクリメント演算子はありません

于 2012-04-19T21:41:19.680 に答える