如何将一个多项式转换到另一个坐标系?

8

通过使用各种矩阵运算,我解决了一个包含n次多项式系数的方程组。

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

我需要在给定的x范围内评估多项式,实际上我正在呈现多项式曲线。现在有个问题。我已经在一个坐标系(我们称之为“数据空间”)中完成了这项工作。现在我需要在另一个坐标系中呈现相同的曲线。将输入/输出转换到不同的坐标空间很容易,但最终用户只对系数[A,B,...,Z]感兴趣,因为他们可以自己重构多项式。如何呈现第二组系数[A',B',...,Z'],以在不同的坐标系中表示相同形状的曲线?
如果有帮助的话,我是在2D空间中工作的,只有简单的x和y。我也觉得这可能涉及将系数乘以一个变换矩阵?是否应该将坐标系之间的比例/平移因子合并在一起?这是该矩阵的逆吗?我觉得我正在朝着正确的方向前进...
更新:坐标系是线性相关的。这些信息会有用吧?

你的输入坐标空间是否线性相关? - Jamie
坐标系是线性相关的。 - basszero
5个回答

6
问题陈述有点不清楚,所以我首先会阐明自己的解释:
你有一个多项式函数
f(x)= Cn x^n + Cn-1 x^(n-1) + ... + C0
[我将A、B、... Z更改为Cn、Cn-1、...、C0,以便以下更容易使用线性代数。]
然后你还有一个变换,例如:z = ax + b,你想使用它来找到相同多项式的系数,但是用z表示:
f(z)= Dn z^n + Dn-1 z^(n-1) + ... + D0
这可以通过一些线性代数很容易地完成。特别是,您可以定义一个(n+1)×(n+1)矩阵T,使我们能够进行矩阵乘法。

d = T * c, 其中d是一个列向量,顶部条目为D0,最后一个条目为Dn,而列向量c类似于Ci系数,矩阵T的(i,j)-th [ith行,jth列] 条目tij由以下公式给出:

tij = (j choose i) ai bj-i.

其中(j choose i)是二项式系数,当i>j时= 0。此外,与标准矩阵不同,我认为i,j的范围从0到n(通常从1开始)。

这基本上是一种不错的方法,手动插入z=ax+b并使用二项式定理时,将多项式展开和重新压缩。

1
看看我的答案,可以快速计算出矩阵T。 - Camille
1
嗨,泰勒。我没有成功使用你的公式,所以我从头开始重新推导了一遍。我得到了 **t ij = (j choose i) a^(-j) * (-b)^(j-i)**。我已经用一个简单的线性方程测试了你的和我的公式。也许你可以更新你的答案,以造福其他人?或者是我可能漏掉了什么?...抱歉,迷你Markdown有点丑。 - Floris
1
嗨,泰勒。刚刚测试了二次多项式。同样的结果。 - Floris
1
@Tyler。我计算了变量更改的公式:**x <- ax + b**,结果发现这正是你的公式。 - Floris
答案中的转换矩阵是从 D_nC_n 的,即 c = T * d,@Floris 的评论显示了答案中介绍的函数的正确 T - Christian Herenz

4

如果我正确理解您的问题,那么在更改坐标后,函数不一定保持为多项式。例如,设y=x^2,新的坐标系为x'=y,y'=x。现在方程变为y'=sqrt(x'),它不是多项式。


4
如果您需要多次计算这个变量改变z = ax+b(指对不同的多项式进行计算),那么Tyler的答案是正确的。另一方面,如果您只需要执行一次,则将矩阵系数的计算与最终评估相结合更快。最好的方法是通过Hörner方法在点(ax+b)处对多项式进行符号化评估:
  • 将多项式系数存储在向量V中(初始时,所有系数均为零),并对i = n到0乘以(ax+b)并添加Ci
  • 添加Ci表示将其添加到常数项
  • 乘以(ax+b)意味着将所有系数乘以b进入向量K1,将所有系数乘以a并将它们从常数项移开进入向量K2,并将K1+ K2放回V。

这将更容易编程,计算速度更快。

请注意,将y更改为w = cy+d非常容易。最后,正如mattiast所指出的,一般的坐标变换不会给您提供多项式。

技术说明:如果您仍然想计算矩阵T(由Tyler定义),则应使用Pascal规则的加权版本来计算它(这是Hörner计算隐含地执行的):

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

这样,您可以简单地从左到右逐列计算它。


当然,如果您需要评估,这会更快,但通常您只需要系数(因为它们压缩了多项式的所有信息)。 - Christian Herenz

0

你有一个方程式:

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,一旦您有了x和y,就可以将这些结果代入原方程式并解出y'。
这是否容易取决于用于从一个空间转换到另一个空间的函数的复杂性。例如,像这样的方程式:
5x = x' and 10y = y'

对于结果来说,这些问题非常容易解决。

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

0
如果输入空间是线性相关的,则矩阵应该能够将一个系数集合转换为另一个系数集合。例如,如果您在“原始”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'

这个式子可以重写为矩阵问题并求解。


这个答案对于三次多项式是正确的。对于更高阶的多项式,您可以使用二项式系数进行推广。然后比较系数将会得到被接受的答案中的公式,该公式可以通过归纳证明。 - Christian Herenz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接