对数域
P
P
P上的向量空间
P
n
P^n
Pn的线性变换
T
T
T,只要在某个基
ϵ
1
,
ϵ
2
,
⋯
,
ϵ
n
\boldsymbol{\epsilon}_1,\boldsymbol{\epsilon}_2,\cdots,\boldsymbol{\epsilon}_n
ϵ1,ϵ2,⋯,ϵn下,用
α
1
=
T
(
ϵ
1
)
,
α
2
=
T
(
ϵ
2
)
,
⋯
,
α
n
=
T
(
ϵ
n
)
\boldsymbol{\alpha}_1=T(\boldsymbol{\epsilon}_1),\boldsymbol{\alpha}_2=T(\boldsymbol{\epsilon}_2),\cdots,\boldsymbol{\alpha}_n=T(\boldsymbol{\epsilon}_n)
α1=T(ϵ1),α2=T(ϵ2),⋯,αn=T(ϵn)构造其变换矩阵
A
=
(
α
1
,
α
2
,
⋯
,
α
1
)
\boldsymbol{A}=(\boldsymbol{\alpha}_1,\boldsymbol{\alpha}_2,\cdots,\boldsymbol{\alpha}_1)
A=(α1,α2,⋯,α1),则
∀
x
∈
P
n
\forall\boldsymbol{x}\in P^n
∀x∈Pn,在基
ϵ
1
,
ϵ
2
,
⋯
,
ϵ
n
\boldsymbol{\epsilon}_1,\boldsymbol{\epsilon}_2,\cdots,\boldsymbol{\epsilon}_n
ϵ1,ϵ2,⋯,ϵn下,
T
(
x
)
=
A
x
T(\boldsymbol{x})=\boldsymbol{Ax}
T(x)=Ax。
例1 我们知道,ℝ上次数小于
n
n
n的多项式集合ℝ
[
x
]
n
[x]_n
[x]n同构于ℝ
n
^n
n,ℝ
[
x
]
n
[x]_n
[x]n的基底
1
,
x
,
⋯
,
x
n
−
1
1,x,\cdots,x^{n-1}
1,x,⋯,xn−1对应ℝ
n
^n
n的自然基底
e
1
,
e
2
,
⋯
,
e
n
\boldsymbol{e}_1,\boldsymbol{e}_2,\cdots,\boldsymbol{e}_n
e1,e2,⋯,en。ℝ
[
x
]
n
[x]_n
[x]n上的微分变换对基底的像对应
D
(
e
1
)
=
(
0
0
⋮
0
)
,
D
(
e
2
)
=
(
1
0
⋮
0
)
,
⋯
,
D
(
e
n
)
=
(
0
⋮
n
−
1
0
)
D(\boldsymbol{e}_1)=\begin{pmatrix}0\\0\\\vdots\\0\end{pmatrix},D(\boldsymbol{e}_2)=\begin{pmatrix}1\\0\\\vdots\\0\end{pmatrix},\cdots,D(\boldsymbol{e}_n)=\begin{pmatrix}0\\\vdots\\n-1\\0\end{pmatrix}
D(e1)=
00⋮0
,D(e2)=
10⋮0
,⋯,D(en)=
0⋮n−10
。所以微分变换
D
D
D在ℝ
n
^n
n的自然基
e
1
,
e
2
,
⋯
,
e
n
\boldsymbol{e}_1,\boldsymbol{e}_2,\cdots,\boldsymbol{e}_n
e1,e2,⋯,en下的矩阵为
A
=
(
0
1
0
⋯
0
0
0
0
2
⋯
0
0
⋮
⋮
⋮
⋱
⋮
⋮
0
0
0
⋯
0
n
−
1
0
0
0
⋯
0
0
)
.
\boldsymbol{A}=\begin{pmatrix}0&1&0&\cdots&0&0\\0&0&2&\cdots&0&0\\\vdots&\vdots&\vdots&\ddots&\vdots&\vdots\\0&0&0&\cdots&0&n-1\\0&0&0&\cdots&0&0\end{pmatrix}.
A=
00⋮0010⋮0002⋮00⋯⋯⋱⋯⋯00⋮0000⋮n−10
.
用Python计算多项式
f
(
x
)
=
5
−
x
+
7
x
2
−
21
x
3
∈
f(x)=5-x+7x^2-21x^3\in
f(x)=5−x+7x2−21x3∈ℝ
[
x
]
4
[x]_4
[x]4在微分变换
D
D
D下的像。
import numpy as np #导入numpy
def polyDifMat(n): #构造微分变换矩阵
A=np.diag(np.arange(1,n)) #初始化为对角阵
A=np.vstack((np.hstack((np.zeros((n-1,1)),A)), #水平连接
np.zeros(n))) #竖直连接
return A
n=4
A=polyDifMat(n) #4阶微分变换矩阵
f=np.array([5,-1,7,-21]).reshape(n,1) #多项式向量
f1=(np.matmul(A, f)).flatten() #微分变换
print(myPoly(f1))
程序的第2~6行定义构造微分变换矩阵的函数polyDifMat,参数n表示矩阵的阶数。其中,第3行调用numpy的diag函数,用序列 { 1 , 2 , ⋯ , n − 1 } \{1,2,\cdots,n-1\} {1,2,⋯,n−1}将A初始化为 n − 1 n-1 n−1阶对角阵。第4~5行调用numpy的hstack和vstack函数分别在A的左边和底边各粘贴1列零和1行零。第8行调用该polyDifMat函数构造4阶微分变换矩阵(因为微分对象是一个3次多项式)。第9行设置多项式 f ( x ) = 5 − x + 7 x 2 − 21 x 3 f(x)=5-x+7x^2-21x^3 f(x)=5−x+7x2−21x3对应的向量f。第10行调用numpy的矩阵相乘函数matmul计算对f的微分变换。由于算得的是一个2-维数组,调用numpy的flatten函数将其扁平化为1-维数组f1。第11行调用博文《自定义代数系统》中定义的myPoly类用f1初始化一个多项式对象,并打印。运行程序,输出
-1.0+14.0∙x-63.0∙x**2
即
D
(
f
(
x
)
)
=
−
1
+
14
x
−
63
x
2
D(f(x))=-1+14x-63x^2
D(f(x))=−1+14x−63x2。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好。