收藏 分销(赏)

实验2-行列式与方程组的求解.doc

上传人:a199****6536 文档编号:2554348 上传时间:2024-05-31 格式:DOC 页数:10 大小:169.04KB
下载 相关 举报
实验2-行列式与方程组的求解.doc_第1页
第1页 / 共10页
实验2-行列式与方程组的求解.doc_第2页
第2页 / 共10页
点击查看更多>>
资源描述
实验2-行列式与方程组的求解 ———————————————————————————————— 作者: ———————————————————————————————— 日期: 10 个人收集整理 勿做商业用途 2 行列式与方程组的求解 1. 求行列式的命令; 2. 求矩阵秩的命令; 3. 求矩阵的最简行矩阵的命令; 4. 满秩线性方程组的各种方法; 5. 符号变量的应用; 6. 验证与行列式相关的公式和定理。 例2。1 已知非齐次线性方程组: , 要求用下列方法求解该方程组。 (1)求逆矩阵法; (2)矩阵左除法; (3)初等行变换; (4)克莱姆法则. 解:(1)把非齐次线性方程组写为矩阵形式: ,则,直接在MATLAB的命令窗口输入: A=[6,2,3,4,5;2,-3,7,10,13;3,5,11,—16,21;2,-7,7,7,2;7,3,—5,3,10]; b=[80;59;90;22;85]; x=inv(A)*b %或:x=A^—1*b 计算结果为: x = 9。0000 3.0000 2.0000 1。0000 2.0000 (2)矩阵的乘法不遵守乘法交换律, Matlab软件定义了矩阵左除和矩阵右除运算, 针对方程组的矩阵形式,可用左除法 等式两端同时左除A,得到:“”,即 针对矩阵方程,,可用右除法,等式两端同时右除A,, 即 在MATLAB命令窗口中输入: A=[6,2,3,4,5;2,—3,7,10,13;3,5,11,-16,21;2,—7,7,7,2;7,3,-5,3,10]; b=[80;59;90;22;85]; x=A\b % 符号“\”即为左除运算,注意它的方向. 结果为: x = 9.0000 3。0000 2。0000 1.0000 2。0000 (3)用初等行变换, 把方程组的增广矩阵变换为最简行阶梯形式, 从而得到方程组的解.在MATLAB命令窗口中输入: A=[6,2,3,4,5;2,-3,7,10,13;3,5,11,—16,21;2,-7,7,7,2;7,3,-5,3,10]; b=[80;59;90;22;85]; U=rref([A,b]) 运算结果为: U = 1 0 0 0 0 9 0 1 0 0 0 3 0 0 1 0 0 2 0 0 0 1 0 1 0 0 0 0 1 2 (4)根据克莱姆法则,有:, 其中是方程组的系数行列式, 是用常数列向量b代替系数行列式的 第i列所得到的行列式。 用Matlab的M文件编辑器,编写la01。m文件如下: % 用克莱姆法则求解方程组 clear % 清除变量 n=input('方程个数n=’) % 请用户输入方程个数 A=input(’系数矩阵A=’) % 请用户输入方程组的系数矩阵 b=input(’常数列向量b=’) % 请用户输入常数列向量 if (size(A)~=[n,n]) | (size(b)~=[n,1]) % 判断矩阵A和向量b输入格式是否正确 disp('输入不正确,要求A是n阶方阵,b是n维列向量') % disp:显示字符串 elseif det(A)==0 % 判断系数行列式是否为零 disp(’系数行列式为零,不能用克莱姆法则解此方程.') else for i=1:n % 计算x1,x2,..。xn B=A; % 构造与A相等的矩阵B B(:,i)=b; % 用列向量b替代矩阵B中的第i列 x(i)=det(B)/det(A); % 根据克莱姆法则计算x1,x2,。.。xn end x=x' % 以列向量形式显示方程组的解 end 在MATLAB命令窗口中输入: la01 得到以下人机对话结果: 方程个数n=5 n = 5 系数矩阵A= [6,2,3,4,5;2,—3,7,10,13;3,5,11,—16,21;2,-7,7,7,2;7,3,-5,3,10] A = 6 2 3 4 5 2 —3 7 10 13 3 5 11 -16 21 2 —7 7 7 2 7 3 —5 3 10 常数列向量b=[80;59;90;22;85] b = 80 59 90 22 85 x = 9 3 2 1 2 例2。2求矩阵 的逆,要求用以下方法: (1)矩阵左除和右除运算; (2)初等行变换; (3)利用伴随矩阵求逆的公式。 解:在MATLAB的M文件编辑器中,编写程序la02.m: % 逆矩阵各种求法: clear A=[—7,—2,-6,4,6;1,3,-6,3,11;3,-11,9,5,—2;—3,0,-2,9,-3;7,30,-18,11,4]; % 1。命令法: An1=inv(A) % 2.幂运算法: An2=A^-1 % 3。右除法: An3=eye(5)/A % eye(5)为5阶单位矩阵 % 4。左除法: An4=A\eye(5) % 5.初等行变换法: B=rref([A,eye(5)]); % 对矩阵[A , I] 进行初等行变换 % B为矩阵A的最简行阶梯矩阵 if(rank(B(:,1:5))==5) % 判断最简行阶梯矩阵B的前5列是否为单位阵 An5=B(:,6:10) % 取出矩阵的后5列,并显示 else disp('A不可逆'); end % 6.伴随矩阵求逆法: for i=1:5 % 构造伴随矩阵的5×5个元素 for j=1:5 T=A; % 把矩阵A赋给矩阵T T(i,:)=[]; % 删去矩阵T的第i行 T(:,j)=[]; % 删去矩阵T的第j列 % 此时,|T| 为矩阵A元素aij的余子式 AA(j,i)=(-1)^(i+j)*det(T); % 算出aij的代数余子式 % 并放入矩阵AA的第j行、第i列 % 当循环结束,矩阵AA即为A的伴随矩阵 end end if det(A)~=0 An6=AA/det(A) else disp(’A不可逆’); end 运算程序la02,前四个方法计算结果相同: 1.0e+004 * -1.5895 1。3448 —1。0646 1。6206 —0。6308 1.6298 —1.3789 1。0916 -1。6617 0。6468 2。5392 -2.1483 1。7007 -2。5889 1.0077 0。3631 —0.3072 0。2432 -0.3702 0.1441 0。9860 -0.8342 0.6604 —1。0053 0。3913 后两个方法计算结果相同: -15895 13448 -10646 16206 —6308 16298 -13789 10916 —16617 6468 25392 —21483 17007 -25889 10077 3631 —3072 2432 -3702 1441 9860 -8342 6604 -10053 3913 从计算结果可以发现, 前四个方法得到的是实数矩阵, 而后两个方法得到的是整数矩阵。 如果在Matlab环境下,键入: format long 然后再重新运行该程序, 会发现前四个方法的运算结果存在误差, 这是计算机做数值运算时,存在舍入误差的原因。 为了进一步观察计算机做数值运算所产生的误差, 现在用上述六种方法来计算矩阵的逆, A=[1,2,3;10,10,10;11,12,13] 前四种方法得到以下类似结果: Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 2.135044e-018。 ans = 1.0e+015 * —4。5036 —4。5036 4。5036 9.0072 9.0072 —9。0072 -4.5036 —4.5036 4.5036 显然此结果是不正确的,因为A不可逆。 例2.3 解方程:。 解:Matlab软件定义了“符号变量”的概念. 在MATLAB的M文件编辑器中, 应用“符号变量”编写程序la03.m: % 求解符号行列式方程 clear all % 清除各种变量 syms x % 定义x为符号变量 A=[3,2,1,1;3,2,2—x^2,1;5,1,3,2;7—x^2,1,3,2] % 给矩阵A赋值 D=det(A) % 计算含符号变量矩阵A的行列式D f=factor(D) % 对行列式D进行因式分解 % 从因式分解的结果,可以看出方程的解 X=solve(D) % 求方程“D=0”的解 在MATLAB的命令窗口输入: la03 运行结果为: A = [ 3, 2, 1, 1] [ 3, 2, 2-x^2, 1] [ 5, 1, 3, 2] [ 7—x^2, 1, 3, 2] D = -6+9*x^2—3*x^4 f = -3*(x—1)*(x+1)*(x^2—2) X = [ 1] [ —1] [ 2^(1/2) ] [ -2^(1/2)] 例2。4 请用Matlab软件验证行列式按行(列)展开公式: 解:在MATLAB的M文件编辑器中,编写程序la04.m: % 验证行列式按行(列)展开公式 clear A=round(10*randn(5)); % 构造5阶随机数方阵 D=det(A); % 计算矩阵A的行列式 % 矩阵A按第一行元素展开:s=a11*A11+a12*A12+…+a15*A15 s=0; for i=1:5 T=A; T(1,:)=[]; % 删去阵矩第1行 T(:,i)=[]; % 删去矩阵第i列 % 此时,|T| 为矩阵A元素a1i的余子式 s=s+A(1,i)*(-1)^(1+i)*det(T); end e=D—s % 验算D与s是否相等 在MATLAB的命令窗口中输入: la04 计算结果为: e = 0 在MATLAB的M文件编辑器中,编写程序la05。m: % 计算5阶方阵A的第一行元素与第三行元素对应的代数余子式乘积之和: % s=a11*A31+a12*A32+…+a15*A35 clear A=round(10*randn(5)); % 构造5阶随机数方阵 s=0; for i=1:5 T=A; T(3,:)=[]; % 删去矩阵第3行 T(:,i)=[]; % 删去矩阵第i列 % 此时,|T| 为矩阵A元素a3i的余子式 s=s+A(1,i)*(-1)^(3+i)*det(T); end s % 验算s是否为0 在MATLAB命令窗口中输入: la05 计算结果为: s = 0 例2。5 计算行列式的值。 解 在MATLAB编辑器中建立M文件: syms a b c d A=[1 1 1 1;a b c d;a^2 b^2 c^2 d^2;a^4 b^4 c^4 d^4]; d1=det(A) d2=simple(d1) %用 simple函数化简表达式d1 pretty(d2) %用pretty函数使表达式d2符合人们的书写习惯。 则结果显示为: d1 = b*c^2*d^4-b*d^2*c^4-b^2*c*d^4+b^2*d*c^4+b^4*c*d^2—b^4*d*c^2-a*c^2*d^4+a*d^2*c^4+a*b^2*d^4-a*b^2*c^4—a*b^4*d^2+a*b^4*c^2+a^2*c*d^4-a^2*d*c^4-a^2*b*d^4+a^2*b*c^4+a^2*b^4*d—a^2*b^4*c—a^4*c*d^2+a^4*d*c^2+a^4*b*d^2—a^4*b*c^2—a^4*b^2*d+a^4*b^2*c d2 = (—d+c)*(b-d)*(b-c)*(—d+a)*(a-c)*(a-b)*(a+c+d+b) (-d + c) (b - d) (b - c) (—d + a) (a - c) (a — b) (a + c + d + b)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服