Почему Matlab использует следующую функцию интерполяции?

Если вы попытаетесь выполнить линейную интерполяцию в Matlab, она, по-видимому, использует интерполянт с координатной сеткой.

Обычно я ожидаю, что функция линейной интерполяции будет выглядеть примерно так:

СПОСОБ A:

линейная интерполяция

Где мы хотим знать значение y(u) в u.

Тем не менее, Matlab использует следующие формулы:

СПОСОБ Б:

  1. Eq1

    введите здесь описание изображения

  2. Eq2

    введите здесь описание изображения

Таким образом, результат будет отличаться, если вы используете метод A и сравниваете ответ с методом B. Разница в результате, которую я обнаружил, составляет около 2 ^ -18 в арифметике с плавающей запятой двойной точности для определенных входных данных.

Мой вопрос:

Почему MATLAB выбирает метод B? Похоже, что метод А потребует меньше вычислений. Кроме того, является ли формула «более» правильной?

Выполнение метода А должно включать следующее:

темп = (у (к + 1) - у (к)) / (х (к + 1) - х (к))

y(u) = y1 + temp*(u-x(k))


person Veridian    schedule 31.07.2015    source источник
comment
одна из причин заключается в том, что в методе be вы можете легко выполнять итерацию и использовать данные с предыдущего шага. Формула называется темпоральными вычислениями.   -  person NKN    schedule 31.07.2015
comment
2^{-18} в отличии серьезно не о чем беспокоиться... это по сути 0. Вы можете вывести метод B из метода A, выполнив некоторые очень простые алгебраические манипуляции. Я также согласен с NKN по поводу временных вычислений.   -  person rayryeng    schedule 31.07.2015
comment
@rayryeng, я знаю, что это мало, но для моих целей я хочу знать, где возникают все возможные различия в результатах. Тем более, что я реализую ASIC, небольшие различия не позволяют мне сравнивать результаты для функциональной проверки.   -  person Veridian    schedule 31.07.2015
comment
@starbox - Скорее всего, это из-за разницы в порядке операций. Например, выполнение (5.0 / 3.0) и выполнение 5 * (1.0/3.0) на самом деле даст вам небольшие ошибки с плавающей запятой между ними обоими. Если бы вы попробовали это, вы бы получили разницу почти в eps = 2.22e-16.   -  person rayryeng    schedule 31.07.2015
comment
@rayryeng, спасибо, я знаю, почему возникает разница. Просто мне это не нравится :-)   -  person Veridian    schedule 31.07.2015
comment
Не беспокойтесь... Метод A выполняет одно множение, другое множение, а затем деление для вычисления правого члена. Метод B вычисляет один множитель, деление, а затем еще один множитель для вычисления правого члена. Разница в порядке операций, вероятно, является причиной небольшой численной разницы между обоими методами. Честно говоря, вы ничего не можете с этим поделать.   -  person rayryeng    schedule 31.07.2015
comment
Хотя формулы эквивалентны математически, они не эквивалентны численно. Уравнение 2, используемое MATLAB, широко распространено, поскольку оно гарантирует, что обе конечные точки могут быть надежно достигнуты при наличии ошибки округления с плавающей запятой. С небольшим дополнительным изменением формула 2 также позволяет проводить очень эффективные и точные вычисления с двумя FMA: fma (fma (-t_u, y_k, y_k), t_u, y_k1).   -  person njuffa    schedule 31.07.2015
comment
@njuffa - Хорошо объяснил. Подумайте о том, чтобы сделать это ответом.   -  person rayryeng    schedule 31.07.2015
comment
@njuffa, откуда ты знаешь, что это широко распространено?   -  person Veridian    schedule 31.07.2015
comment
Согласен с njuffa, речь идет об ошибках с плавающей запятой: если y_k - y_k+1 << y_k, мелкие ошибки будут усиливаться, так как вы вычитаете большие числа. Метод B также кажется более «симметричным» в y_k и y_k+1, что интуитивно кажется лучше (но он все еще асимметричен в x_k и x_k+1). Несколько связанных с Matlab вопросов здесь (обратите внимание на первый комментарий к принятому ответу) и здесь.   -  person Bas Swinckels    schedule 31.07.2015
comment
@rayryeng Я не могу ответить на вопрос, я могу просто предполагать, почему инженеры Mathworks решили использовать эту формулу.   -  person njuffa    schedule 01.08.2015
comment
Этот комментарий не был похож на спекуляцию... он звучал так, как будто вы знали, о чем говорили...   -  person rayryeng    schedule 01.08.2015


Ответы (1)


Обе формулы на самом деле одинаковы. Вы можете проверить это сами. Дело в том, что это не два разных метода (A и B). Единственная разница заключается в порядке или вычислении. Посмотрите на мой почерк :)

введите здесь описание изображения

person NKN    schedule 31.07.2015