matlab округление в большую сторону

У меня проблема с округлением, которое MATLAB делает (автоматически). В моем цикле время увеличивается на 0,05 секунды каждый раз, или если есть особое обстоятельство, оно будет добавлять значение времени между ними. Поэтому, чтобы получить следующее значение, я использовал

для вычисления следующего значения времени. Поскольку 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

Изменить:

Есть ли способ решить эту проблему?

1 ответ

2 Решение user3446867 [2014-12-15 00:34:00]

Дивакар дал мне намек на правильный ответ. он был решен путем использования

Но, скорее всего, альтернативным решением было бы предложение Менди Барела, чтобы преобразовать время в милисекунды, чтобы все числа были целыми числами. Спасибо всем за помощь, и этот вопрос сейчас решен.

Функции округления и знака

Ряд особых функций служат для выполнения операций округления числовых данных и анализа их знака.

  • fix(A) – возвращает массив А с элементами, округленными до ближайшего к нулю целого числа. Для комплексного А действительные и мнимые части округляются отдельно.

Если вы столкнулись с проблемой, как округлить число в Матлабе, то далее в статье вы можете узнать все виды округлений в Matlab.

Есть несколько видов Matlab округление:

a = [-1.9, -0.2, 3.4, 5.6, 7.0, 2.4+3.6i]

a =
Columns 1 through 4
-1.9000 -0.2000 3.4000 5.6000
Columns 5 through 6
7.0000 2.4000 + 3.6000i

Теперь используем функцию round:

ans =
Columns 1 through 4
-2.0000 0 3.0000 6.0000
Columns 5 through 6
7.0000 2.0000 + 4.0000i

2. ceil — Округление в большую сторону

a = [-1.9, -0.2, 3.4, 5.6, 7, 2.4+3.6i]

a =
Columns 1 through 4
-1.9000 -0.2000 3.4000 5.6000
Columns 5 through 6
7.0000 2.4000 + 3.6000i

Теперь используем ceil:

ans =
Columns 1 through 4
-1.0000 0 4.0000 6.0000
Columns 5 through 6
7.0000 3.0000 + 4.0000i

3. fix — Округление в сторону нуля

a = [-1.9, -0.2, 3.4, 5.6, 7.0, 2.4+3.6i]

a =
Columns 1 through 4
-1.9000 -0.2000 3.4000 5.6000
Columns 5 through 6
7.0000 2.4000 + 3.6000i

Теперь воспользуемся fix:

ans =
Columns 1 through 4
-1.0000 0 3.0000 5.0000
Columns 5 through 6
7.0000 2.0000 + 3.0000i

4. floor — Округление в меньшую сторону

a = [-1.9, -0.2, 3.4, 5.6, 7.0, 2.4+3.6i]

a =
Columns 1 through 4
-1.9000 -0.2000 3.4000 5.6000
Columns 5 through 6
7.0000 2.4000 + 3.6000i

Теперь применим floor:

ans =
Columns 1 through 4
-2.0000 -1.0000 3.0000 5.0000
Columns 5 through 6
7.0000 2.0000 + 3.0000i

Вот и все виды матлаб округление.

Поэтому из выше всего сказанного можно сделать вывод, что вам необходимо просмотреть много дополнительной информации и альтернатив!

Оцените статью
SoftLast
Добавить комментарий