У меня проблема с закруглением, которое MATLAB делает (автоматически). В моем цикле время увеличивается на 0,05 секунды каждый раз, или если есть особое обстоятельство, оно будет добавлять значение времени между ними. Поэтому, чтобы получить следующее значение, я использовалокругление в matlab
floor((t(n-1)/dt)*dt+dt
для расчета следующего значения времени. Поскольку floor ((t (n-1)/dt) вычислил количество шагов в 0,05 секунды, и затем он будет снова умножаться с этим временным интервалом и добавит еще один шаг, чтобы получить следующее значение. Даже если текущее время не является кратным 0,05, следующий шаг будет. Точно то, что я хотел. Однако Matlab делает некоторое округление, я не понимаю, см. снимок экрана ниже. Я даже добавил допуск 10^-14 для противодействия округлениям , но когда время станет больше, округление станет больше, чем допуск.
Как вы можете видеть на скриншоте, деление 32.05 на 0.05 дает 640.9999999999999 вместо 641. И в моем сценарии это заставляет цикл продолжать навсегда, так как это перекрывается до 640, то есть время больше не будет увеличиваться и будет оставаться на уровне 32,05 в каждом цикле.
* Мне нужно 10 репутации по крайней мере, для изображения, так вот ссылка: http://i.imgur.com/E9freYH.jpg
Edit:
Есть ли способ решить эту проблему?
Вместо добавления '10^-14' попробуйте добавить' eps (t (n-1)) 'и увидеть, как это разрешает проблему. – Divakar
Что я нахожу странным в ваших расчетах, так это то, что простая команда 32.05/0.05 уже дает неточный результат. Это также происходит, когда вы перезапускаете Matlab и затем вводите это как свою первую команду (то есть без первого запуска какого-либо скрипта вообще)? –
нет, это только усугубляет ситуацию. Цикл for уже находится в бесконечной петле на 0,30 секунды. esp (t (n-1)) приводит к 5.551115123125783e-17, который намного меньше, чем старый допуск. ----------------------------------- , когда я перезапускаю матлаб, 32.05/0.05 дает точный результат 461, но после запуска скрипта он будет продолжать давать 460.99999999999, пока я его не перезапущу. – user3446867