with(linalg)调入线性代数系统
矩阵输入:matrix(m,n,[a11,a12,…a1n,a21,…a2n,…,am1,…,amn])或array(1..m,1..n, [[a11,…,a1n],…,[am1,…,amn]]) extend(A,m,n) 矩阵A增加m行n列 向量:vector([a11,a12,…,a1n])或array(1..n,[a11,…,a1n])
几个特殊矩阵:对角阵:band(V,n) ,对角块:copyinto(A,B,m,n)拷贝A到B的m行n列,方块diag(A,B…),雅可比jacobian(函数向量,自变量), 范德蒙:Vandermonde(向量)
> with(linalg): >A:=matrix(6,6,[3,4,-1,1,-9,10,6,5,0,7,4,-16,1,-4,7,-1,6,-8,2,-4,5,-6,12,-8,-3,6,-7,8,-1,1,8,-,9,1,3,0]): >B:=matrix(6,6,[1,2,4,6,-3,2,7,9,16,-5,8,-7,8,11,20,1,5,5,10,15,28,13,-1,9,12,19,36,25,-7,23,2,4,6,-3,0,5]): > b:=array(1..6,[1,3,5,7,9,11]): > diag(A,B);extend(B,6,6,0);copyinto(A,",7,7); > band([1],5);copyinto(b,",1,3);
运算:加,减,数乘 A+B,A-B,a*A,a*A+c*B等,用evalm()显示. 矩阵乘积multiply(A,B) 增广矩阵augment(A,B,…)或concat(A,B,…) 纵向增广矩阵 stack(A,B,…) 转置transpose(A) 行列式det(A) 伴随adj(A) 逆inverse(A)或A^(-1) 求秩rank(A) 化阶梯:gausselim(A,'r','d') r为A的秩,d为A行列式,用backsub(")求解 gaussjord(A,'r','d')?
> evalm(A)+evalm(B)=evalm(A+B);C:=concat(A,b);stack(A,B); > gausselim(C,'r','d');r;rank(A);d;det(A); > gaussjord(C,'r','d'); > inverse(A);multiply(A,");adj(A);multiply(A,");
解线性方程组 Ax=b: 写线性方程组geneqns(A,x,b),解方程linsolve(A,b,'r',x)其中b为向量
> geneqns(A,x,b);linsolve(A,b,x);
特征值,特征向量 eigenvals(A) eigenvects(A) 加radical显根号形式,implicit显复数形式 注:求数值解时,矩阵应数值化evalf(A)。一般四阶以上没有解析解。 特征矩阵charmat(A,t);特征多项式charpoly(A,x),相似变换frobenius(A,'p') 标准型jordan 判断相似issimilar(A,B,'p') p为变换矩阵, 正定矩阵分解cholesky(A) 判断正交orthog(A)
> eigenvals(matrix(2,2,[1,2,2,4])); > eigenvects(matrix(2,2,[1,2,2,4])); > frobenius(matrix(2,2,[1,2,2,4]),'p'); > multiply(inverse(p),",p); > jordan(matrix(2,2,[1,2,2,4]),'p');orthog(p);
初等变换:交换行(列)swaprow(A,i,j) swapcol(A,i,j) i行(列)乘m mulrow(A,i,m) mulcol(A,i,m) i行(列)乘m加到j行(列)addrow(A,i,j,m) addcol(A,i,j,m)
> addrow(A,2,5,-2);mulcol(A,3,3);
其他矩阵操作:取子阵submatrix(A,m1..m2,n1..n2) 取行列row(A,i..j) col(A,i..j) 删除行列delrow(A.i..j) delcol(A,i..j) 向量组的基basis(向量组) 行(列)向量基rowspace(A,'d')colspace(A,'d')d个数;正交化GramSchmidt(向量组) 标准化normalize(向量);数量积dotprod(U,V);向量积crossprod(U,V)
> submatrix(A,[2,4,6],[1,4,5]);row(A,2);col(A,4); > rowspace(A,'d');d; > multiply(A,b); >u := vector( [1,x,y] );v := vector( [1,0,0] ); >dotprod(u, v); >A := matrix(3,2, [2,0,3,4,0,5]); > rowspace(A); > colspace(A);
|