Как можно преобразовать многочлен в другую систему координат?

StackOverflow https://stackoverflow.com/questions/141422

Вопрос

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

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

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

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

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

Это было полезно?

Решение

Постановка задачи немного неясна, поэтому сначала я проясню свою собственную интерпретацию этой проблемы:

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

f (x) = Cnxn + Cn-1xn-1 + ...+ C0

[Я изменил A, B, ...Z превращается в Cn, Сn-1, ..., C0 чтобы было легче работать с линейной алгеброй, приведенной ниже.]

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

f (z) = Dnzn + Dn-1zn-1 + ...+ D0

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

  d = T * c ,

где d является вектором столбца с верхней записью D0, к последней записи Dn, вектор столбца c аналогично для Ci коэффициенты и матрица T имеет (i,j)-й [iче строка, jче запись в столбце] tайджей заданный

  tайджей = (j выбирай i) ai bджей-и.

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

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

Другие советы

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

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

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

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

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

ti,j = b ti,j-1 + a ti-1,j-1

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

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

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

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

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

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

5x = x' and 10y = y'

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

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

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

ax ^ 3 + bx ^ 2 + cx + d

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

затем вы хотите найти a', 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'

которая может быть переписана как матричная задача и решена.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top