《matlab-4 (数学实验)matlab编程求解线性代数》由会员分享,可在线阅读,更多相关《matlab-4 (数学实验)matlab编程求解线性代数(94页珍藏版)》请在金锄头文库上搜索。
1、第四章 线性代数问题求解,矩阵线性方程组的直接解法线性方程组的迭代法线性方程组的符号解法稀疏矩阵技术特征值与特征向量,4.1 矩阵4.1.1特殊矩阵的输入,数值矩阵的输入零矩阵、幺矩阵及单位矩阵 生成nn方阵: A=zeros(n), B=ones(n), C=eye(n) 生成mn矩阵: A=zeros(m,n), B=ones(m,n), C=eye(m,n) 生成和矩阵B同样位数的矩阵: A=zeros(size(B),随机元素矩阵若矩阵随机元素满足0,1区间上的均匀分布 生成nm阶标准均匀分布为随机数矩阵: A=rand(n,m) 生成nn阶标准均匀分布为随机数方阵: A=rand(n
2、),对角元素矩阵 已知向量生成对角矩阵: A=diag(V) 已知矩阵提取对角元素列向量: Vdiag(A) 生成主对角线上第k条对角线为V的矩阵: A=diag(V,k),例:diag( )函数的不同调用格式 C=1 2 3; V=diag(C) % 生成对角矩阵V = 1 0 0 0 2 0 0 0 3 V1=diag(V) % 将列向量通过转置变换成行向量V1 = 1 2 3 C=1 2 3; V=diag(C,2) % 主对角线上第 k条对角线为C的矩阵V = 0 0 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0,生成三对角矩阵: V=di
3、ag(1 2 3 4)+diag(2 3 4,1)+diag(5 4 3,-1)V = 1 2 0 0 5 2 3 0 0 4 3 4 0 0 3 4,Hilbert矩阵及逆Hilbert矩阵 生成n阶的Hilbert矩阵: A=hilb(n) 求取逆Hilbert矩阵: B=invhilb(n),Hankel(汉克 ) 矩阵 其中:第一列的各个元素定义为C向量,最后一行各个元素定义为R。H为对称阵。 H1=hankel(C) 由 Hankel 矩阵反对角线上元素相等得出一下三角阵均为零的Hankel 矩阵,Vandermonde(范德蒙)矩阵,伴随矩阵其中:P(s)为首项系数为一的多向式。,
4、符号矩阵的输入 数值矩阵A转换成符号矩阵: B=sym(A)例: A=hilb(3)A = 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000 B=sym(A)B = 1, 1/2, 1/3 1/2, 1/3, 1/4 1/3, 1/4, 1/5,4.1.2 矩阵基本概念与性质,行列式 格式 :d=det(A)例:求行列式 A=16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1; det(A)ans = 0,例: tic, A=sym(hilb(20); det(A), toc ans =
5、 1/2377454716768534509091644243427616440175419837753486493033185331234419759310644585187585766816573773440565759867265558971765638419710793303386582324149811241023554489166154717809635257797836800000000000000000000000000000000000elapsed_time = 2.3140高阶的Hilbert矩阵是接近奇异的矩阵。,矩阵的迹 格式: t=trace(A)矩阵的秩格式:r=
6、rank(A) 用默认的精度求数值秩 r=rank(A, ) 给定精度下求数值秩 矩阵的秩也表示该矩阵中行列式不等于0的子式的最大阶次。可证行秩和列秩(线性无关的)应相等。,例 A=16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1; rank(A)ans = 3该矩阵的秩为3,小于矩阵的阶次,故为非满秩矩阵。例 H=hilb(20); rank(H) 数值方法ans = 13 H=sym(hilb(20); rank(H) % 解析方法,原矩阵为非奇异矩阵ans = 20,矩阵范数,矩阵的范数定义:格式: N=norm(A) 求解默认的2范数 N=norm(A
7、,选项) 选项可为1,2,inf等,例:求一向量、矩阵的范数 a=16 2 3 13; norm(a), norm(a,2), norm(a,1), norm(a,Inf)ans = 2.092844953645635e+001 2.092844953645635e+001 3.400000000000000e+001 1.600000000000000e+001 A=16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1; norm(A), norm(A,2), norm(A,1), norm(A,Inf)ans = 34 34 34 34 符号运算工具箱未提供n
8、orm( )函数,需先用double( )函数转换成双精度数值矩阵,再调用norm( )函数。,特征多项式格式: C=poly(A)例: A=16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1; poly(A) 直接求取ans =1.000000000000000e+000 -3.399999999999999e+001 -7.999999999999986e+001 2.719999999999999e+003 -2.819840539024018e-012 A=sym(A); poly(A) 运用符号工具箱 ans = x4-34*x3-80*x2+2720
9、*x,矩阵多项式的求解,符号多项式与数值多项式的转换格式: f=poly2sym(P) 或 f=poly2sym(P,x) 格式: P=sym2poly(f),例: P=1 2 3 4 5 6; % 先由系数按降幂顺序排列表示多项式 f=poly2sym(P,v) % 以 v 为算子表示多项式 f = v5+2*v4+3*v3+4*v2+5*v+6 P=sym2poly(f)P = 1 2 3 4 5 6,矩阵的逆矩阵格式: C=inv(A)例: format long; H=hilb(4); H1=inv(H)H1 = 1.0e+003 * 0.01600000000000 -0.11999
10、999999999 0.23999999999998 -0.13999999999999 -0.11999999999999 1.19999999999990 -2.69999999999976 1.67999999999984 0.23999999999998 -2.69999999999976 6.47999999999940 -4.19999999999961 -0.13999999999999 1.67999999999984 -4.19999999999961 2.79999999999974,检验: H*H1ans = 1.00000000000001 0.000000000000
11、23 -0.00000000000045 0.00000000000023 0.00000000000001 1.00000000000011 -0.00000000000011 0.00000000000011 0.00000000000001 0 1.00000000000011 0 0.00000000000000 0.00000000000011 -0.00000000000011 1.00000000000011计算误差范数: norm(H*inv(H)-eye(size(H)ans = 6.235798190375727e-013 H2=invhilb(4); norm(H*H2-
12、eye(size(H)ans = 5.684341886080802e-014, H=hilb(10); H1=inv(H); norm(H*H1-eye(size(H)ans = 0.00264500826202 H2=invhilb(10); norm(H*H2-eye(size(H)ans = 1.612897415528547e-005 H=hilb(13); H1=inv(H); norm(H*H1-eye(size(H)Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. R
13、COND = 2.339949e-018.ans = 53.23696008570294 H2=invhilb(13); norm(H*H2-eye(size(H)ans = 11.37062973181391对接近于奇异矩阵,高阶一般不建议用inv( ),可用符号工具箱。, H=sym(hilb(7); inv(H) ans = 49, -1176, 8820, -29400, 48510, -38808, 12012-1176, 37632, -317520, 1128960, -1940400, 1596672, -5045048820, -317520, 2857680, -10584
14、000, 18711000, -15717240, 5045040-29400, 1128960, -10584000, 40320000, -72765000, 62092800, -2018016048510, -1940400, 18711000, -72765000, 133402500, -115259760, 37837800-38808, 1596672, -15717240, 62092800, -115259760, 100590336, -3329726412012, -504504, 5045040, -20180160, 37837800, -33297264, 11099088 H=sym(hilb(30); norm(double(H*inv(H)-eye(size(H)ans = 0,