matlab矩阵及其运算(四)

时间:2022-06-25
本文章向大家介绍matlab矩阵及其运算(四),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

大家好,感谢大家对matlab爱好者公众号的厚爱!如果公众号文章对您有帮助,别忘了分享和点赞哦!若您对公众号有什么意见或建议,请在公众号中回复或在任意文章底部留言,我们会第一时间改善改进!

有流量戳视频看程序讲解

二狗这期给大家讲矩阵的基本运算。MATLAB是高级的矩阵编程语言,它的运算都是基于矩阵的运算,了解矩阵运算是熟练运用MATLAB的基础。

在求解线性方程组的过程中把线性方程组的系数按之前行列式的规则排列的数表称为矩阵。

称为3x3的矩阵。

PS:矩阵和行列式是两个完全不同的概念,矩阵只是一个数表而行列式是数表按一定运算法则确定的数,行列式的行数与列数必须相等,矩阵的行数与列数可以不等。

单位矩阵:主对角线上的元素全为1的对角矩阵称为单位矩阵,记做E

一、矩阵的运算

(1)矩阵的加法:设有两个矩阵Ai,j和Bm,n两个矩阵,若i=m,j=n则两个矩阵可以进行加减运算,若i≠m,j≠n则不可以加减运算,加减运算的具体规则是:

(2)数与矩阵的乘法:数λ乘矩阵A就是矩阵A中每一个元素都乘以数λ

注意:这与行列式的乘法运算是不一样的。

(3)矩阵与矩阵的乘法

定义:设矩阵Aij是一个ij列的矩阵,Bij是一个jm列的矩阵.AB的乘积是一个i,m的矩阵Ci.m

设矩阵

由案例可知矩阵乘法与数的乘法有根本的差别。

(1)两个矩阵乘法不能随便交换顺序,即,AB称为A左乘B,BA称为右乘B。

(2)矩阵乘法一般不能随便消去一个非零矩阵,A≠0 且AB=AC,不能得到B=C。

(3)两个非零矩阵的乘积可以使零矩阵,即但是不能得到A=0或B=0。

二、矩阵的变化

矩阵的转置:把m,n矩阵的行换成同序号的列,得到n,m矩阵,称为A的转置矩阵记为AT。

伴随矩阵:设A是n阶方阵,Aij是行列式A中元素aij的代数余子式,以Aij为元素组成如下n阶方阵:

称其为方阵A的伴随矩阵,记做A*.注意:非方阵没有伴随矩阵,因为非方阵没有行列式。

伴随矩阵定理:设A是n阶方阵,A*是A的伴随矩阵,则有AA*=A*A=AE。

已知代数余子式重要性质:

可得

逆矩阵:设A是n阶方阵,如果存在n阶方阵B,使得

则称方阵A是可逆矩阵,称方阵B是A的逆矩阵,记做A-1,即B=A-1

结合逆矩阵和伴随矩阵可得。

可逆运算的规律:

如果A可逆,A-1也可逆

如果A可逆,则λA可逆

如果A可逆,则AT也可逆且

如果A,B都可逆,则AB也可逆(AB)-1=B-1A-1。(这个在矩阵运算中很重要,会经常用到)

在实际问题中更多遇到的是:

已知Anm不存在逆矩阵:那么那么是否存在Cnm,如果存在应该怎么求

这就需要引入广义逆矩阵的概念。广义逆矩阵理论与应用的研究是矩阵论的一个重要分支,随着电子计算机的问世,广逆矩阵引起普遍关注,得到迅速发展,广义逆矩阵在数理统计、系统理论、优化计算和控制论等多领域中有重要应用.面对如此重要的知识点二狗会单独做一期广义逆矩阵的讲解,这是二狗做矩阵运算连载的重头戏,记得持续关注。

clear all
syms lamdaa 
a=round(8*rand(3,4));b=round(8*rand(3,4));c=round(8*rand(4,3));
d=[1 2 3; 4 5 6;7 8 9]*eye(3,3); 
%矩阵的加法
e=a+b;f=a+c;
%矩阵的乘法
lamdaa=3*a;e=a;e(:,1)=3*a(:,1);
g=a*c;h=c*a;i=a*b;
%%矩阵的伴随矩阵:分别用定义式和可逆矩阵式求。
%根据伴随矩阵的定义求,注意求A的伴随矩阵和代数余子式的排列顺序不同。
a=[1 2 3; 4 5 6; 7 8 9];
[n,m]=size(a);
for i=1:n
    ni=1:n;
    ni(i)=[];
    for j=1:m
        mj=1:m;
        mj(j)=[];
        A(j,i)=(-1)^(i+j)*det(a(ni,mj));
    end
end
B=inv(a)*det(a)%根据逆矩阵和行列式定义求。
%根据提示可知利用逆矩阵和行列式定义求会存在问题,这就说明对定义理解的重要性,比如说行列式值是零,A=inv(a)*det(a)就求不出来值。
% 证明行列式的性质
clear all
a=[1 3 3; 4 5 6; 7 8 8];
[n,m]=size(a);
for i=1:n
    ni=1:n;
    ni(i)=[];
    for j=1:m
        mj=1:m;
        mj(j)=[];
        A(j,i)=(-1)^(i+j)*det(a(ni,mj));
    end
end
j=a*A;
%逆矩阵
clear all
a=[1 3 3; 4 5 6; 7 8 8];
AA=inv(a);%inv:逆矩阵的求解函数
%如果A可逆,A-1也可逆
B=inv(a);inv(B);
%如果A可逆,则λA可逆
lamdaa=inv(3*a);
lamdaa-B/3;
%如果A可逆,则AT也可逆
inv(a)-inv(a')==0;%计算不相等?我们用定义式求一下
clear all
a=[1 3 3; 4 5 6; 7 8 8];
[n,m]=size(a);
for i=1:n
    ni=1:n;
    ni(i)=[];
    for j=1:m
        mj=1:m;
        mj(j)=[];
        A(j,i)=(-1)^(i+j)*det(a(ni,mj));
    end
end
AA=A/det(a)
b=[1 3 3; 4 5 6; 7 8 8]';
[n,m]=size(b);
for i=1:n
    ni=1:n;
    ni(i)=[];
    for j=1:m
        mj=1:m;
        mj(j)=[];
        B(j,i)=(-1)^(i+j)*det(a(ni,mj));
    end
end
BB=B/det(b)
AA-BB==0;%再次证明定义式有多重要,MATLAB的内部函数也并不可靠。
%如果A,B都可逆,则AB也可逆
format bank
a=[1 3 3; 4 5 6; 7 8 8];b=[2 4 4; 7 2 1; 5 7 8];
inv(a*b)-inv(b)*inv(a)%为什么这么写?

本文作者:过冷水