Mexed функция дает очень небольшую разницу при выполнении математики

Итак, я попробовал матричную экспоненциальную функцию с использованием набора инструментов MATLAB Coder, и я получил его для сборки. Я продолжал тестировать, чтобы увидеть, были ли результаты надежными и более эффективными. Хотя код был быстрее, ответ на него был очень слабым.

Я запустил оригинальную функцию и получил ответ:

p =
            1            0            0            0            0            0            0            0            0            0            0            0
        -0.05            1    -1.25e-07        5e-06            0            0            0            0            0            0            0            0
            0            0            1            0            0            0            0            0            0            0            0            0
     1.25e-07       -5e-06        -0.05            1            0            0            0            0            0            0            0            0
            0            0            0            0            1            0            0            0            0            0            0            0
            0            0            0            0        -0.05            1            0            0            0            0            0            0
  -2.0833e-05      0.00125  -5.2083e-11   4.1667e-09            0            0            1         0.05            0     1.25e-07            0            0
     -0.00125         0.05  -4.1667e-09      2.5e-07            0            0            0            1            0        5e-06            0            0
   5.2083e-11  -4.1667e-09  -2.0833e-05      0.00125            0            0            0    -1.25e-07            1         0.05            0            0
   4.1667e-09     -2.5e-07     -0.00125         0.05            0            0            0       -5e-06            0            1            0            0
            0            0            0            0  -2.0833e-05      0.00125            0            0            0            0            1         0.05
            0            0            0            0     -0.00125         0.05            0            0            0            0            0            1

И затем я запустил мексированную версию функции с тем же вводом:

p2 =
            1            0            0            0            0            0            0            0            0            0            0            0
        -0.05            1    -1.25e-07        5e-06            0            0            0            0            0            0            0            0
            0            0            1            0            0            0            0            0            0            0            0            0
     1.25e-07       -5e-06        -0.05            1            0            0            0            0            0            0            0            0
            0            0            0            0            1            0            0            0            0            0            0            0
            0            0            0            0        -0.05            1            0            0            0            0            0            0
  -2.0833e-05      0.00125  -5.2083e-11   4.1667e-09            0            0            1         0.05            0     1.25e-07            0            0
     -0.00125         0.05  -4.1667e-09      2.5e-07            0            0            0            1            0        5e-06            0            0
   5.2083e-11  -4.1667e-09  -2.0833e-05      0.00125            0            0            0    -1.25e-07            1         0.05            0            0
   4.1667e-09     -2.5e-07     -0.00125         0.05            0            0            0       -5e-06            0            1            0            0
            0            0            0            0  -2.0833e-05      0.00125            0            0            0            0            1         0.05
            0            0            0            0     -0.00125         0.05            0            0            0            0            0            1

На первый взгляд, эти две матрицы равны, но на самом деле они ОЧЕНЬ НЕМНОГО:

p-p2
ans =
            0            0            0            0            0            0            0            0            0            0            0            0
  -6.9389e-18            0            0   8.4703e-22            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0
  -3.3881e-21  -2.1684e-19  -3.2312e-26   8.2718e-25            0            0            0            0            0    5.294e-23            0            0
  -2.1684e-19            0  -8.2718e-25    5.294e-23            0            0            0            0            0   8.4703e-22            0            0
   6.4623e-27            0  -3.3881e-21   2.1684e-19            0            0            0            0            0            0            0            0
            0            0            0   6.9389e-18            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0

Большая часть результата эквивалентна исходной функции, но часть - нет. Кроме того, разница между ними настолько мала, что я не могу поверить, что это будет математическая ошибка, а не ошибка точности. И причина, по которой я так обеспокоен этим, заключается в том, что это вызывает проблемы с наложением причины, по которой я использую функцию.

Есть ли причина, по которой функция mex отключается так мало, и есть ли способ это исправить?

1 ответ

Различия, которые вы наблюдаете, настолько малы, что вы можете считать результаты фактически одинаковыми.

То, как они вычисляются, отличается, и поэтому вы не получите точно такой же результат. Все же разница примерно machine epsilon и это просто из-за того, что компьютеры работают не с бесконечной точностью, а с некоторым дискретным представлением чисел.

Другие вопросы по тегам