线性代数Python计算:线性变换

在这里插入图片描述
对数域 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 xPn,在基 ϵ 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,,xn1对应ℝ 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)= 000 ,D(e2)= 100 ,,D(en)= 0n10 。所以微分变换 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= 000010000200000000n10 .
用Python计算多项式 f ( x ) = 5 − x + 7 x 2 − 21 x 3 ∈ f(x)=5-x+7x^2-21x^3\in f(x)=5x+7x221x3 [ 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,,n1}将A初始化为 n − 1 n-1 n1阶对角阵。第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)=5x+7x221x3对应的向量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+14x63x2
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值