用MATLAB做线性代数实验
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x2 x3 2 x2 3 x 2
分解为最简分式之和的程序如下:
-0.5000 - 1.3229i -1.0000 r = [] 结果表示出来即是:
f ( x)
如果是在实数范围内分解:
0.25 0.4725 i x 0.51.3229 i
0.25 0.4725 i x 0.51.3229 i
用 MATLAB 做线性代数实验
1. 多项式运算
【1】表示方法与根 表示方法:降幂,向量形式. 例如, p( x ) 2 x x 3 x5 被表示为向量 p=[-1 0 1 0 2 0] 而不是 p=[0 2 0 1 0 -1] 或者 p=[2 1 -1]. 相关 MATLAB 函数 函数名 含义 %注意保证第一个分量不能为零
1 2 1 2 ,B ,解矩阵方程 (1) AX B , (2) XA B 。 3 4 1 0
MATLAB 程序如下: A=[1 2;3 4]; B=[1 2;-1 1]; X1=inv(A)*B X1=A\B X2=B*inv(A) X2=A/B 注意:一般矩阵方程求解需要先利用运算规律化成三种基本类型之一,然后 再计算。例如,设 A diag(1, 2,1) , A XA 2 XA 8E ,求 X . 解: (1)先将上述方程变形为 2 E A* XA 8 E ,因为 A 可逆,则 在方程两边左乘 A 得
A 2 E A* XA 8 A ,右乘 A 的逆矩阵得到
% AX=B or
% XA=B
2 A | A | E X 8 E
(2)编程计算: A=diag([1 -2 1]); B=2*A-det(A)*eye(3); if det(B)~=0 X=8*inv(B)*eye(3) else disp 'ÎÞ½â' end
p1 ( x ) q( x ) p2 ( x ) r ( x ) , d (r ( x )) d ( p2 ( x ))
例如,求多项式 f ( x ) x 3 6 x 2 11 x 6 , g( x ) x 5 2 x 2 1 的最大公因式和最小公倍 式。 p=[1 -6 11 -6]; q=[1 0 0 -2 0 1]; [q1,r1]=deconv(q,p) [q2,r2]=deconv(p,r1(4:6)) %注意保证第一个分量不能为零 [q3,r3]=deconv(r1(4:6),r2(3:4))
Ax b 的一个特解;
第三步,利用 Ax b 的解的结构理论构造处通解。 Case3: (3)当 Ax b 有无解时,可以采用下述方法求出最小二乘解 命令:x=(A'*A)\(A'*b); 命令:x=linsolve(A,B,opt) 例如:求下列线性方程组的通解
x 2 y 3z 0 1. 4 x 5 y 6z 0 ; 7 x 8 y 9z 0 2 x y 3z 1 4. 2z 6 ; 2 x 4 x 2 y 5z 7
例如,求多项式 f x 3 x 2 2 x 1, g x 3 x 2 y xy x y 2 2 的嵌套分解以及因式分 解程序如下: syms x; syms y;
f=x^3+x^2+2*x+1; g=x+x*y+y^2+x^2*y+x^3+2; horner(f) horner(g)
poly2sym(r2) poly2sym(r2(3:4)/r2(3)) % 首1的最大公因式 s=deconv(conv(p,q),r2(3:4)/r2(3));%最小公倍式 poly2sym(s)
2. 矩阵元素操作 【1】矩阵创建 通过元素列表输入,例如:A=[1 2 3;4 5 6;7 8 9]; 通过外部数据加载,例如:load A.mat % 要求 A.mat 自己创建 在 m 文件中创建,例如: 通过函数创建,例如: zeros(n,m) ones(n,m) rand(n,m) randn(n,m) magic(n) vander(c) 零阵 壹阵 随机阵 正态随机 幻方阵 由向量 C 生成范德蒙矩阵
编程创建,矩阵元素有特殊规律 已知矩阵 A,产生关联的矩阵,如对角阵、上三角阵、下三角阵、同阶矩 阵等 已知矩阵 A、B、C、D,创建分块矩阵 【2】元素操作 改变某元素
ห้องสมุดไป่ตู้
扩充矩阵 A 选择部分行、部分列 选择子矩阵 删除行、删除列 替换行、替换列 拉升成向量 旋转矩阵、翻转矩阵 【3】基本属性获取: 获取矩阵的行数、列数:[m,n]=size(A) 获取矩阵的秩:r=rank(A) 获取矩阵的行最简形:[R,P]=rref(A) 【4】初等变换 初等行变换:交换行、数乘行、替换行 初等列变换:交换列、数乘列、替换列
factor(f) factor(g)
【4】有理分式的分解与合并 相关 MATLAB 函数 函数名 含义
p( x ) [a,b,r]=residue(p,q) 将 q ( x ) 分解为最简分式之和
[p,q]=residue(a,b,r) 将简单分式之和合并为有理分式 例如,将有理分式 f ( x ) p=[1 2]; q=[1 2 3 2]; [a,b,r]=residue(p,q) 输出:a = -0.2500 - 0.4725i -0.2500 + 0.4725i 0.5000 b= -0.5000 + 1.3229i
【2】参数方程解的判别 【注意】 :含有参数情况的线性方程组的解的情况讨论,不能直接使用 Matlab 中 的函数:rank,rref,因为 Matlab 会默认这些参数及其表达式不等于零。因此,应 该编写独立的过程加以讨论。 试就参数 s 的各种情况,讨论下述线性方程组的解的情况:
sx y z 1 x sy z s 。 2 x y sz s
x 2 y 3z 0 2 x y 3z 1 2. 2 x 4 y 6 z 0 ;3. 4 x 2 y 5z 4 ; 3 x 6 y 9z 0 2 x y 4z 0
x 2 y 6 z 7 w 67 x 9 y 7 z 14w 117 5. x 2 y 5 z 9w 79 3 x 6 y 16 z 25w 225
3. 矩阵代数运算 【1】基本运算(加法、减法、乘法、转置、幂运算、.运算) “.”元素:对元素进行 【2】逆矩阵、行列式 逆矩阵:inv(A) 行列式:det(A) 【3】矩阵方程求解 AX=B:X=inv(A)*B 或者 X=A\B
XA=B:X=B*inv(A) 或者 X=A/B 例如: 已知 A
A(3,:)=A(3,:)+A(2,:) % 接下来讨论下述矩阵: A = [ 1, [ 0, [ 0, 1, s - 1, 0, s, 1 - s, - s^2 - s + 2, s^2] s - s^2] - s^3 - s^2 + s + 1]
rt=solve(A(3,3)*A(2,2)); B1=subs(A,s,rt(1))
poly2sym(p) 由多项式系数转为多项式函数的表达式陪 p(x) polyval(p,a) roots(p) poly(r) 计算 p(a) p(x)=0 的所有复根 由根向量创建多项式的系数
【2】四则运算及带余除法 相关 MATLAB 函数 函数名 p3=conv(p1,p2) 含义 计算多项式的乘积 算 带 余 除 法 :
4. 线性方程组 Ax b 求解 【1】求解方法 【判别原理】 : (1)若 R( A) R( A, b) n ,则方程组 Ax b 有唯一解; (2)若 R( A) R( A, b) n ,则方程组 Ax b 有无穷多解; (3)若 R( A) R( A, b) ,则方程组 Ax b 无解。 Matlab 命令:rank(A),rref([A,b]),linsolve(A,b),null(A),A\b。 【求解方法】原理:高斯消元法。将增广矩阵化成行最简形,然后求解。 【步骤】 :Case1:当 Ax b 有唯一解时,可采用如下两种方法之一 利用命令:x=A\b; 利用命令:x=linsolve(A,b); 利用 LU 、 QR 、 Cholesky 分解命令: x=U\(L\b) ; x=Q\(R\b) ; x=R\(R'\b) Case2: 当 Ax b 有无穷多解时,可以采用下述方法 利用命令:null(A,'r'); 第一步,利用 z=null(A,'r')求出 Ax 0 的基础解系; 第二步,利用 A\b 或者 rref([A,b])或者 linsolve(A,b) 求出
MATLAB 程序如下: sym s; A=[s 1 1 1;1 s 1 s;1 1 s s^2] rref(A) % 只能获得唯一解情况
% 交换第 1 行和第 3 行 B=A A(1,:)=B(3,:) A(3,:)=B(1,:) % 消元 A(2,:)=A(2,:)-A(1,:) A(3,:)=A(3,:)-s*A(1,:)
[q,r]=deconv(p1,p2) 计
p1 ( x ) q( x ) p2 ( x ) r ( x ) , d (r ( x )) d ( p2 ( x ))
加、减法:首先应该将相应的系数向量化为同维数的向量,方法是在较低维数向 量的前面添加 0 元素。
例如,设 p1 ( x ) x 3 x 2 2 , p2 ( x ) 3 x 1 ,计算 p1 ( x ) p2 ( x ) 的 MATLAB 实现方法如 下: clear p1=[1 1 0 -2]; p2=[3 1]; m=length(p1); n=length(p2); t=max(m,n); p1=[zeros(1,t-m) p1]; p2=[zeros(1,t-n) p2]; p3=p1+p2; poly2sym(p3) 【3】分解与合并 相关 MATLAB 函数 函数名 collect(f) expand(f) horner(f) factor(f) 含义 对符号多项式 f 进行合并同类项 对符号多项式 f 进行展开 对符号多项式 f 进行嵌套分解 对符号多项式 f 进行因式分解 % 将多项式按照幂次对齐 % 取向量的长度
B2=subs(A,s,rt(2))
5. 向量空间 【1】线性相关性的判别方法 【判别原理】设 A [1 , 2 , , n ] ,若 rank ( A) n ,则 1 , 2 , , n 线性无关;否 则线性相关。由 1 , 2 , , n 张成的向量空间的维数等于矩阵 A 的秩;其一个极大线 性无关组即为张成空间的一个基。 例如,判断下列向量组的线性相关性,并求张成空间的维数和一个极大线性 无关组。 (1) . 1 1, 2,1, 3 , 2 4, 1,5,6 , 3 1, 3, 4,7 , 4 1, 2,1,1 ;
0.5 x 1
[p1,q1]=residue(a(1:2),b(1:2),r);%合并前两项 poly2sym(p1) poly2sym(q1) 结果为: f ( x )
0.5 x 1 x2 x 2
0.5 x 1
【5】最大公因子式与最小公倍数 利用带余除法命令以及辗转相除法,可以求两个多项式的最大公因式和最小公倍 式。 [q,r]=deconv(p1,p2) 计 算 带 余 除 法 :
分解为最简分式之和的程序如下:
-0.5000 - 1.3229i -1.0000 r = [] 结果表示出来即是:
f ( x)
如果是在实数范围内分解:
0.25 0.4725 i x 0.51.3229 i
0.25 0.4725 i x 0.51.3229 i
用 MATLAB 做线性代数实验
1. 多项式运算
【1】表示方法与根 表示方法:降幂,向量形式. 例如, p( x ) 2 x x 3 x5 被表示为向量 p=[-1 0 1 0 2 0] 而不是 p=[0 2 0 1 0 -1] 或者 p=[2 1 -1]. 相关 MATLAB 函数 函数名 含义 %注意保证第一个分量不能为零
1 2 1 2 ,B ,解矩阵方程 (1) AX B , (2) XA B 。 3 4 1 0
MATLAB 程序如下: A=[1 2;3 4]; B=[1 2;-1 1]; X1=inv(A)*B X1=A\B X2=B*inv(A) X2=A/B 注意:一般矩阵方程求解需要先利用运算规律化成三种基本类型之一,然后 再计算。例如,设 A diag(1, 2,1) , A XA 2 XA 8E ,求 X . 解: (1)先将上述方程变形为 2 E A* XA 8 E ,因为 A 可逆,则 在方程两边左乘 A 得
A 2 E A* XA 8 A ,右乘 A 的逆矩阵得到
% AX=B or
% XA=B
2 A | A | E X 8 E
(2)编程计算: A=diag([1 -2 1]); B=2*A-det(A)*eye(3); if det(B)~=0 X=8*inv(B)*eye(3) else disp 'ÎÞ½â' end
p1 ( x ) q( x ) p2 ( x ) r ( x ) , d (r ( x )) d ( p2 ( x ))
例如,求多项式 f ( x ) x 3 6 x 2 11 x 6 , g( x ) x 5 2 x 2 1 的最大公因式和最小公倍 式。 p=[1 -6 11 -6]; q=[1 0 0 -2 0 1]; [q1,r1]=deconv(q,p) [q2,r2]=deconv(p,r1(4:6)) %注意保证第一个分量不能为零 [q3,r3]=deconv(r1(4:6),r2(3:4))
Ax b 的一个特解;
第三步,利用 Ax b 的解的结构理论构造处通解。 Case3: (3)当 Ax b 有无解时,可以采用下述方法求出最小二乘解 命令:x=(A'*A)\(A'*b); 命令:x=linsolve(A,B,opt) 例如:求下列线性方程组的通解
x 2 y 3z 0 1. 4 x 5 y 6z 0 ; 7 x 8 y 9z 0 2 x y 3z 1 4. 2z 6 ; 2 x 4 x 2 y 5z 7
例如,求多项式 f x 3 x 2 2 x 1, g x 3 x 2 y xy x y 2 2 的嵌套分解以及因式分 解程序如下: syms x; syms y;
f=x^3+x^2+2*x+1; g=x+x*y+y^2+x^2*y+x^3+2; horner(f) horner(g)
poly2sym(r2) poly2sym(r2(3:4)/r2(3)) % 首1的最大公因式 s=deconv(conv(p,q),r2(3:4)/r2(3));%最小公倍式 poly2sym(s)
2. 矩阵元素操作 【1】矩阵创建 通过元素列表输入,例如:A=[1 2 3;4 5 6;7 8 9]; 通过外部数据加载,例如:load A.mat % 要求 A.mat 自己创建 在 m 文件中创建,例如: 通过函数创建,例如: zeros(n,m) ones(n,m) rand(n,m) randn(n,m) magic(n) vander(c) 零阵 壹阵 随机阵 正态随机 幻方阵 由向量 C 生成范德蒙矩阵
编程创建,矩阵元素有特殊规律 已知矩阵 A,产生关联的矩阵,如对角阵、上三角阵、下三角阵、同阶矩 阵等 已知矩阵 A、B、C、D,创建分块矩阵 【2】元素操作 改变某元素
ห้องสมุดไป่ตู้
扩充矩阵 A 选择部分行、部分列 选择子矩阵 删除行、删除列 替换行、替换列 拉升成向量 旋转矩阵、翻转矩阵 【3】基本属性获取: 获取矩阵的行数、列数:[m,n]=size(A) 获取矩阵的秩:r=rank(A) 获取矩阵的行最简形:[R,P]=rref(A) 【4】初等变换 初等行变换:交换行、数乘行、替换行 初等列变换:交换列、数乘列、替换列
factor(f) factor(g)
【4】有理分式的分解与合并 相关 MATLAB 函数 函数名 含义
p( x ) [a,b,r]=residue(p,q) 将 q ( x ) 分解为最简分式之和
[p,q]=residue(a,b,r) 将简单分式之和合并为有理分式 例如,将有理分式 f ( x ) p=[1 2]; q=[1 2 3 2]; [a,b,r]=residue(p,q) 输出:a = -0.2500 - 0.4725i -0.2500 + 0.4725i 0.5000 b= -0.5000 + 1.3229i
【2】参数方程解的判别 【注意】 :含有参数情况的线性方程组的解的情况讨论,不能直接使用 Matlab 中 的函数:rank,rref,因为 Matlab 会默认这些参数及其表达式不等于零。因此,应 该编写独立的过程加以讨论。 试就参数 s 的各种情况,讨论下述线性方程组的解的情况:
sx y z 1 x sy z s 。 2 x y sz s
x 2 y 3z 0 2 x y 3z 1 2. 2 x 4 y 6 z 0 ;3. 4 x 2 y 5z 4 ; 3 x 6 y 9z 0 2 x y 4z 0
x 2 y 6 z 7 w 67 x 9 y 7 z 14w 117 5. x 2 y 5 z 9w 79 3 x 6 y 16 z 25w 225
3. 矩阵代数运算 【1】基本运算(加法、减法、乘法、转置、幂运算、.运算) “.”元素:对元素进行 【2】逆矩阵、行列式 逆矩阵:inv(A) 行列式:det(A) 【3】矩阵方程求解 AX=B:X=inv(A)*B 或者 X=A\B
XA=B:X=B*inv(A) 或者 X=A/B 例如: 已知 A
A(3,:)=A(3,:)+A(2,:) % 接下来讨论下述矩阵: A = [ 1, [ 0, [ 0, 1, s - 1, 0, s, 1 - s, - s^2 - s + 2, s^2] s - s^2] - s^3 - s^2 + s + 1]
rt=solve(A(3,3)*A(2,2)); B1=subs(A,s,rt(1))
poly2sym(p) 由多项式系数转为多项式函数的表达式陪 p(x) polyval(p,a) roots(p) poly(r) 计算 p(a) p(x)=0 的所有复根 由根向量创建多项式的系数
【2】四则运算及带余除法 相关 MATLAB 函数 函数名 p3=conv(p1,p2) 含义 计算多项式的乘积 算 带 余 除 法 :
4. 线性方程组 Ax b 求解 【1】求解方法 【判别原理】 : (1)若 R( A) R( A, b) n ,则方程组 Ax b 有唯一解; (2)若 R( A) R( A, b) n ,则方程组 Ax b 有无穷多解; (3)若 R( A) R( A, b) ,则方程组 Ax b 无解。 Matlab 命令:rank(A),rref([A,b]),linsolve(A,b),null(A),A\b。 【求解方法】原理:高斯消元法。将增广矩阵化成行最简形,然后求解。 【步骤】 :Case1:当 Ax b 有唯一解时,可采用如下两种方法之一 利用命令:x=A\b; 利用命令:x=linsolve(A,b); 利用 LU 、 QR 、 Cholesky 分解命令: x=U\(L\b) ; x=Q\(R\b) ; x=R\(R'\b) Case2: 当 Ax b 有无穷多解时,可以采用下述方法 利用命令:null(A,'r'); 第一步,利用 z=null(A,'r')求出 Ax 0 的基础解系; 第二步,利用 A\b 或者 rref([A,b])或者 linsolve(A,b) 求出
MATLAB 程序如下: sym s; A=[s 1 1 1;1 s 1 s;1 1 s s^2] rref(A) % 只能获得唯一解情况
% 交换第 1 行和第 3 行 B=A A(1,:)=B(3,:) A(3,:)=B(1,:) % 消元 A(2,:)=A(2,:)-A(1,:) A(3,:)=A(3,:)-s*A(1,:)
[q,r]=deconv(p1,p2) 计
p1 ( x ) q( x ) p2 ( x ) r ( x ) , d (r ( x )) d ( p2 ( x ))
加、减法:首先应该将相应的系数向量化为同维数的向量,方法是在较低维数向 量的前面添加 0 元素。
例如,设 p1 ( x ) x 3 x 2 2 , p2 ( x ) 3 x 1 ,计算 p1 ( x ) p2 ( x ) 的 MATLAB 实现方法如 下: clear p1=[1 1 0 -2]; p2=[3 1]; m=length(p1); n=length(p2); t=max(m,n); p1=[zeros(1,t-m) p1]; p2=[zeros(1,t-n) p2]; p3=p1+p2; poly2sym(p3) 【3】分解与合并 相关 MATLAB 函数 函数名 collect(f) expand(f) horner(f) factor(f) 含义 对符号多项式 f 进行合并同类项 对符号多项式 f 进行展开 对符号多项式 f 进行嵌套分解 对符号多项式 f 进行因式分解 % 将多项式按照幂次对齐 % 取向量的长度
B2=subs(A,s,rt(2))
5. 向量空间 【1】线性相关性的判别方法 【判别原理】设 A [1 , 2 , , n ] ,若 rank ( A) n ,则 1 , 2 , , n 线性无关;否 则线性相关。由 1 , 2 , , n 张成的向量空间的维数等于矩阵 A 的秩;其一个极大线 性无关组即为张成空间的一个基。 例如,判断下列向量组的线性相关性,并求张成空间的维数和一个极大线性 无关组。 (1) . 1 1, 2,1, 3 , 2 4, 1,5,6 , 3 1, 3, 4,7 , 4 1, 2,1,1 ;
0.5 x 1
[p1,q1]=residue(a(1:2),b(1:2),r);%合并前两项 poly2sym(p1) poly2sym(q1) 结果为: f ( x )
0.5 x 1 x2 x 2
0.5 x 1
【5】最大公因子式与最小公倍数 利用带余除法命令以及辗转相除法,可以求两个多项式的最大公因式和最小公倍 式。 [q,r]=deconv(p1,p2) 计 算 带 余 除 法 :