Как преобразовать полином в другую систему координат? - PullRequest
6 голосов
/ 26 сентября 2008

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

Ax^(n-1) + Bx^(n-2) + ... + Z

Затем я оцениваю полином в заданном диапазоне x, по сути, я рендеринг полиномиальной кривой. Теперь вот подвох. Я проделал эту работу в одной системе координат, которую мы назовем «пространство данных». Теперь мне нужно представить ту же кривую в другом координатном пространстве. Легко преобразовать ввод / вывод в и из координатных пространств, но конечного пользователя интересуют только коэффициенты [A, B, ...., Z], поскольку они могут восстанавливать полином самостоятельно. Как я могу представить второй набор коэффициентов [A ', B', ...., Z '], которые представляют кривую одинаковой формы в другой системе координат.

Если это поможет, я работаю в 2D-пространстве. Обычные старые х и у. Я также чувствую, что это может включать умножение коэффициентов на матрицу преобразования? Будет ли это включать масштаб / коэффициент перевода между системами координат? Будет ли обратная матрица? Я чувствую, что направляюсь в правильном направлении ...

Обновление: системы координат линейно связаны. Была бы полезной информация а?

Ответы [ 5 ]

4 голосов
/ 27 сентября 2008

Суть проблемы немного неясна, поэтому сначала я уточню свою интерпретацию:

У вас есть полиномиальная функция

f (x) = C n x n + C n-1 x n-1 +. .. + C 0

[Я изменил A, B, ... Z на C n , C n-1 , ..., C 0 , чтобы более легко работа с линейной алгеброй ниже.]

Тогда у вас также есть преобразование, такое как: z = ax + b , которое вы хотите использовать, чтобы найти коэффициенты для того же полинома, но в терминах z

f (z) = D n z n + D n-1 z n-1 +. .. + D 0

Это можно сделать довольно легко с помощью некоторой линейной алгебры. В частности, вы можете определить матрицу (n + 1) & times; (n + 1) T , которая позволяет нам умножать матрицу

d = T * c ,

где d - вектор-столбец с верхней записью D 0 , до последней записи D n вектор столбцов c аналогичен коэффициентам C i , а матрица T имеет (i, j) -й [i *] 1081 * th строка, j th column] запись t ij , заданная

t ij = ( j выберите i ) a i b ji .

Где ( j выберите i ) - биномиальный коэффициент и = 0, когда i > j . Кроме того, в отличие от стандартных матриц, я думаю, что i, j каждый в диапазоне от 0 до n (обычно вы начинаете с 1).

Это в основном хороший способ записать расширение и повторное сжатие полинома, когда вы вручную подключаете z = ax + b и используете биномиальную теорему .

3 голосов
/ 27 сентября 2008

Ответ Тайлера является правильным, если вам приходится вычислять это изменение переменной z = ax + b много раз (я имею в виду много разных многочленов). С другой стороны, если вам нужно сделать это только один раз, гораздо быстрее объединить вычисление коэффициентов матрицы с окончательной оценкой. Лучший способ сделать это - символически оценить ваш полином в точке (ax + b) по методу Хёрнера:

  • вы сохраняете коэффициенты полинома в векторе V (в начале все коэффициенты равны нулю), а для i = n до 0 вы умножаете его на (ax + b) и добавляете C i .
  • добавление C i означает добавление его к постоянному члену
  • умножение на (ax + b) означает умножение всех коэффициентов на b в вектор K 1 , умножение всех коэффициентов на a и смещение их от постоянного члена в вектор K 2 и помещение K 1 + K 2 обратно в V.

Это будет проще для программирования и быстрее для вычислений.

Обратите внимание, что преобразование y в w = cy + d действительно просто. Наконец, как указывает Маттиаст, общее изменение координат не даст вам полином.

Техническое примечание : если вы все еще хотите вычислить матрицу T (как определено Тайлером), вы должны вычислить ее, используя взвешенную версию правила Паскаля (это то, что вычисление Хёрнера подразумевает):

t i, j = b t i, j-1 + a t i-1, j-1

Таким образом, вы вычисляете это просто, столбец за столбцом, слева направо.

2 голосов
/ 27 сентября 2008

Если я правильно понимаю ваш вопрос, нет гарантии, что функция останется полиномиальной после того, как вы измените координаты. Например, пусть y = x ^ 2, а новая система координат x '= y, y' = x. Теперь уравнение становится y '= sqrt (x'), что не является полиномом.

0 голосов
/ 26 сентября 2008

Если входные пространства линейно связаны, то да, матрица должна иметь возможность преобразовывать один набор коэффициентов в другой. Например, если у вас был свой полином в «оригинальном» x-пространстве:

топор ^ 3 + bx ^ 2 + cx + d

и вы хотели превратиться в другое w-пространство, где w = px + q

тогда вы хотите найти такие ', b', c 'и d', что

ax ^ 3 + bx ^ 2 + cx + d = a'w ^ 3 + b'w ^ 2 + c'w + d '

и с некоторой алгеброй

a'w ^ 3 + b'w ^ 2 + c'w + d '= a'p ^ 3x ^ 3 + 3a'p ^ 2qx ^ 2 + 3a'pq ^ 2x + a'q ^ 3 + b'p ^ 2x ^ 2 + 2b'pqx + b'q ^ 2 + c'px + c'q + d '

поэтому

a = a'p ^ 3

b = 3a'p ^ 2q + b'p ^ 2

c = 3a'pq ^ 2 + 2b'pq + c'p

d = a'q ^ 3 + b'q ^ 2 + c'q + d '

, который можно переписать как матричную задачу и решить.

0 голосов
/ 26 сентября 2008

У вас есть уравнение:

y = Ax^(n-1) + Bx^(n-2) + ... + Z

В пространстве xy, а вы хотите в некотором пространстве x'y. Вам нужны функции преобразования f (x) = x 'и g (y) = y' (или h (x ') = x и j (y') = y). В первом случае вам нужно решить для х и решить для у. Если у вас есть x и y, вы можете подставить эти результаты в исходное уравнение и решить для y '.

Является ли это тривиальным или нет, зависит от сложности функций, используемых для преобразования из одного пространства в другое. Например, такие уравнения как:

5x = x' and 10y = y'

чрезвычайно легко решить для результата

y' = 2Ax'^(n-1) + 2Bx'^(n-2) + ... + 10Z
...