2012-04-19 1 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?

Cheers!

ответ

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 

Проблема заключается в том, что ваш цикл, пока сходится на 425, но никогда вполне не попасть туда.

+0

Спасибо, еще больше объяснений^_ ^ – Accendi

2

кажется, что b сходится к 425, но на самом деле не достигнет 425. b нечто вроде 424.9999999999, который при отображении округляются до 425.

Там нет ++ или += операторов в Matlab, насколько я знаю ,

+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, к тому времени, его значение 424.99999999999983 значение temp0 и поэтому b никогда не увеличивается.

MATLAB не реализует никаких операторов приращения/уменьшения.

+0

Ahh Большое спасибо! – Accendi

1

MATLAB не имеет эквивалента операторов до и после инкремента.

+0

Я все еще думаю, что это такой позор, что они не добавили этого к языку. Он может действительно убрать код, где вы хотите индексировать и увеличивать в одном месте. – jxramos

0

Кажется, что предел вашего выражения равен 425, то есть он никогда не достигает этого значения. Вам нужно будет как-то отредактировать код.

Также есть no such increment operator.

Смежные вопросы