《Matlab与线性代数ppt课件》由会员分享,可在线阅读,更多相关《Matlab与线性代数ppt课件(27页珍藏版)》请在金锄头文库上搜索。
1、Matlab与线性代数,内容概要,基本要求Matlab与线性代数结合示例线性代数在实际中的应用,基本要求,会给矩阵赋值 会进行矩阵的基本运算,包括:加、减、数乘,乘法,转置,幂等运算 会用命令inv计算矩阵的逆 会用命令det计算行列式; 会用命令rank计算矩阵的秩; 会用命令rref把矩阵变为行最简型;(上三角矩阵) 会用命令rref计算矩阵的逆 会用命令rref解方程组的解 会用命令rref找出向量组的最大无关组 会用命令null计算齐次线性方程组的基础解系 会用左除运算计算非齐次方程组的特解 会用命令orth把向量组正交规范化 会用命令eig计算矩阵的特征值和特征向量 会用命令eig把
2、二次型标准化 会用命令eig判断二次型的正定性,MATLAB 软件的矩阵赋值方法,命令 说明 help inv 在命令窗口中显示函数inv的帮助信息 创建矩阵 , 矩阵行元素分割符号 ; 矩阵列元素分割符号 % 注释行 eye(n) 创建n阶单位矩阵 zeros(m,n) 创建mn阶零矩阵 zeros(n) 创建n阶零方阵 ones(m,n) 创建mn阶元素全为1的矩阵 rand(m,n) 创建mn阶元素为从0到1的均匀分布的随机数矩阵 round(A) 对矩阵A中所有元素进行四舍五入运算 inv(A) 求矩阵A的逆 A-1 用幂运算求矩阵A的逆,例1 用MATLAB软件生成以下矩阵:,在MA
3、TLAB命令窗口输入: A=9,3,2;6,5,6;6,6,0 % 矩阵同行元素以逗号或空格分割 或:A=9 3 2;6 5 6;6 6 0 % 行与行之间必须用分号或回车分隔 或:A=9 3 26 5 66 6 0 结果都为: A =9 3 26 5 66 6 0 A=round(rand(3)*10) % rand(3):生成3阶元素为01的随机实数方阵% round():对矩阵元素进行四舍五入运算,MATLAB的基本运算符号,inv(A): 求矩阵A的逆. rank(A):求矩阵A的秩。 A=6,9,5;0,5,2;2,9,1; B=inv(A) 若矩阵不是满秩的,则逆是不存在的。A=-
4、16,-4,-6;15,-3,9;18,0,9 B=inv(A) 运行后会得到警示语:“此矩阵接近奇异,数据尺度很差,结果可能不 准确。逆条件数= ”。,左除,右除:方程D*X=B,设X为未知矩阵,若X存在,则定义X=DB,称 之为“左除”。 从D*X=B的阶数检验可知,B与D的行数相等,因 此,左除时的阶数检验条件是:两矩阵行数必须相等。如果原方程的未知矩阵在左,而系数矩阵在右,即X*D=B,按 同样方法定义X=B/D,称之为“右除”。 同理,右除时的阶数检验 条件是:两矩阵列数必须相等。,例2:已知矩阵 , 且满足计算矩阵 和 解:方法一:利用求逆矩阵的方法,输入: A=6,9,5;0,5
5、,2;2,9,1 B=6,6,2;1,0,4;2,8,1 P=B*inv(A) Q=inv(A)*B 方法二:利用MATLAB软件特有的矩阵“左除”和“右除”运算,输入: A=6,9,5;0,5,2;2,9,1 B=6,6,2;1,0,4;2,8,1 P=B/A % 矩阵右除 Q=AB % 矩阵左除,例3 利用克拉姆法则求解方程组det(A) : 求方阵A的行列式.,% 用克莱姆法则求解方程组 clear % 清除工作空间中的各个变量 n=input(方程个数n) % n=input()为数据输入函数,单引号内的字符串起说明作用。请用户输入方程个数 A=input(系数矩阵A=) % 请用户输
6、入方程组的系数矩阵 b=input(常数列向量b=) % 请用户输入常数列向量 if (size(A)=n,n) | (size(b)=n,1)% 条件语句,和C语言功能类似。判断矩阵A和向量b输入格式是否正确 fprintf(输入不正确,要求A是%d阶方阵,b是%d维列向量, n, n) elseif det(A)=0 % 判断系数行列式是否为零disp(系数行列式为零,不能用克莱姆法则解此方程。)% disp:显示字符串 elsefor i=1:n % 循环语句,计算x1,x2,.xnB=A; % 构造与A相等的矩阵BB(:,i)=b; % 用列向量b替代矩阵B中的第i列x(i)=det(
7、B)/det(A); % 根据克莱姆法则计算x1,x2,.xnendx=x % 以列向量形式显示方程组的解 end,例4-求解方程组通解,rref 函数: U=rref(A) 对矩阵A进行初等行变换,矩阵U为矩阵A的最 简行阶梯矩阵。 A=2,4,-1,4,16;-3,-6,2,-6,-23;3,6,-4,6,19;1,2,5,2,19; b=-2;7;-23;43; U=rref(A,b)u,ip=rref(A) 对矩阵A进行初等行变换, 第一个输出u为矩阵A 的最简行阶梯矩阵,第二个输出ip为首非零元所在的列号构成的行向量。u,ip=rref(A,b),null函数:null(A,r) 用
8、于计算齐次线性方程组Ax0的基础解系,r表示求其 有理数表示式,否则它给出的是规范化正交基。 A=2,4,-1,4,16;-3,-6,2,-6,-23;3,6,-4,6,19;1,2,5,2,19; x=null(A,r),clear % 清除工作空间中的各个变量 clc %清空工作空间 A=2,4,-1,4,16;-3,-6,2,-6,-23;3,6,-4,6,19;1,2,5,2,19;% 输入系数矩阵A b=-2;7;-23;43; % 输入常数列向量b R,s=rref(A,b); % 把增广矩阵的最简行阶梯矩阵赋给R% 而R的所有首非零元所在的列号构成了行向量s m,n=size(A
9、); % 矩阵A的行数、列数赋给了变量m、n x0=zeros(n,1); % 将特解x0初始化为N维零列向量 r=length(s); % 矩阵A的秩赋给变量r x0(s,:)=R(1:r,end); % 将矩阵R的最后一列按基准元素的位置给特解x0赋值 disp(非齐次线性方程组的特解为:) x0 % 显示特解x0 disp(对应齐次线性方程组的基础解系为:) x=null(A,r) % 得到齐次线性方程组Ax0的基础解系x,则方程组的通解为:,齐次线性方程组的特解还可以用Matlab的矩阵左除运算来求得,直接在MATLAB命令窗口输入以下命令: A=2,4,-1,4,16;-3,-6,2
10、,-6,-23;3,6,-4,6,19;1,2,5,2,19; b=-2;7;-23;43; x0=Ab % 用矩阵左除运算求得方程组特解x0 x=null(A,r) % 得到齐次线性方程组Ax0的基础解系x 注意:左除可以用来解方程数少于未知数个数的情况。 其中特解x0 =0 0 7.3333 0 0.3333与前一方法的特解不同,这是因为 这个方程有无穷多解,而左除法得到的特解是令x0中某个或某些元素为 0的一个特殊解。 方程组的通解为:,例5-求解向量组的极大无关组,已知向量组求出它的最大无关组,并用该最大无关组来线性表示其它向 量,解:用笔计算的过程为:,对矩阵 进行初等行变换,最后变
11、为最简行阶梯矩阵:该矩阵基准元素所在的列号为1,2,4,则原 向量组的一个最大无关组为: 。根据该矩阵的第3列,可以得到:同理,可以得到:,% 找向量组的最大无关组,并用它线性表示其它向量 clear clc a1=1;1;0;2;2; % 输入5个列向量 a2=3;4;0;8;3; a3=2;3;0;6;1; a4=9;3;2;1;2; a5=6;-2;2;-9;2; A=a1,a2,a3,a4,a5; % 由5个列向量构造矩阵A R,s=rref(A); % 把矩阵A的最简行阶梯矩阵赋给了R% 而R的所有首非零元所在的列号构成了行向量s% 向量s中的元素即为最大无关组向量的下标 r=len
12、gth(s); % 最大无关组所含向量个数赋给r fprintf(最大线性无关组为:) % 输出字符串 for i=1:rfprintf(a%d ,s(i) % 分别输出最大无关组的向量a1, end for i=1:r % 从矩阵A中取出最大无关组赋给A0A0(:,i)=A(:,s(i); end A0 % 显示最大无关组矩阵A0,s0=1,2,3,4,5; % 构造行向量s0 for i=1:rs0(s(i)=0; % s(i)是最大无关组的列号 end % 若s0的某元素不为0,表示该元素为矩阵A中 % 除最大无关组以外其它列向量的列号 s0=find(s0); %find函数用于计算向
13、量s0中非零元素的下标, 删除s0中的零元素% 此时s0中元素为其它向量的列号 for i=1:5-r % 用最大无关组来线性表示其它向量 fprintf(a%d=,s0(i) for j=1:rfprintf(%3d*a%d+ ,R(j,s0(i),s(j);endfprintf(bb n); % 去掉最后一个”+” end,例6-向量组规范正交化,设向量组:求由这三个向量生成的子空间V的一个标准正交基。,解:在MATLAB命令窗口输入: a1=1;2;3;a2=-1;1;2;a3=5;1;0; A=a1,a2,a3 P=orth(A) % 求出矩阵A的列向量组构成空间的一个正交规范基 % P的列构成了空间V的一个标准正交基 % P的列数反应了空间V的维数,