matlab矩阵及其运算(三)

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

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

有流量的可以直接戳视频

二狗在用matlab学习编程过程中,发现matlab中有大量矩阵运算,矩阵的知识了解不到位,在学习算法的过程中无法找到合适的解决问题的方法或者出现编程错误。好比英语发音规则都不懂,如何说一口流利的英语?地基不牢,地动山摇。这不前两天二狗做BP算法的时候涉及到矩阵求导,这可难到二狗了,非方阵矩阵的逆矩阵怎么求?方阵的导怎么写等,涉及到一系列二狗之前没有考虑过的问题,经过一番挣扎决定还是一步一个脚印和大家学习基础知识吧。

如果想matlab应用的得心应手,矩阵的基础知识是必不可少的,二狗将会连续更新关于矩阵的基本运算的知识,如果大家觉得有用请持续关注“MATLAB爱好者公众号”。

先从最基本的行列式讲起。行列式是一种特定的算式,它是我们今后学习矩阵的一个基本工具。

该表示方式即为二阶行列式

即为三阶行列式

由两个案例可知二项式和三项式是每行和每列不同数的乘积,再冠以正负号得到的一个代数和,该法则对所有的多项式都成立。

虽然多项式的运算法则说的很简单,但比如给你个10x10的行列式你就很难算出行列式的值。怎么办?可以用降阶的办法将10X10化为2X2的不就简单了?实际10X10化2X2也很麻烦,好比给二狗一个很复杂的加减乘除运算,二狗也很容易出错,但降阶确实是解题的思路。在此引入余子式的办法来降阶。

在行列式中划去aij所在的第i行元素和第j列元素,剩下元素按原位置顺序组成的(n-1)阶行列式就叫做aij的余子式记做Mij,称(-1)i+jMij为aij的代数余子式记做Aij。

利用代数余子式即可将n阶行列式写成(n-1)的运算比如三阶行列式即可写成:

对三阶行列式的另外六项做组合还可以写成:

由行列式的定义可知,当行列式的阶数n比较大时,直接用定义计算行列式比较复杂,当然用matlab还是很简单的。但二狗还是要给大家讲行列式的一些性质,用以简化行列式的运算以及以后矩阵的运算也会用到相关知识。

(1)将行列式的各行与各列与同序号的列互换,所得到的行列式称为行列式的转置。

记:

的转置。

由计算很容易可知D与DT相等。涉及到的行列式性质二狗嫌证明太繁琐,大家记住二狗说的是对的就行了,二狗会用matlab进行验证行列式的各种性质的,实践是检验性质的唯一标准。

(2)对换列式的两行或两列,行列式变号。

(3)行列式中i行和j行对应的元素相等,行列式的值为零。

(4)行列式的某一行中的所有元素都乘以同一个数K,等于K乘以这个行列式。

(5)如果行列式中某一行(列)的每一个元素的是两个元素的和,行列式等于把这两个元素拆分后的行列式和。

本期行列式的内容就算讲完了,行列式的应用主要是求解方程组,

Ps:行列式必须是正阶的即ai,j(i=j)比如

就不存在。算不出具体值

编程讨论:函数det()可直接求得行列式的具体值。那么如何根据代数余子式降阶法自己设计程序来计算行列式的值。二狗期待各位对编程感兴趣的读者尝试一下,二狗也会在下期给出自编的求行列式值的程序。

行列式相关MATLAB代码

clear all
syms x1 x2 x3 y1 y2 y3 
format bank
a=round(8*rand(3));%round:随机生成的矩阵为一3*3维的方阵,矩阵的元素为0-8之间的整数
x=[x1;x2;x3];y=a*x;
D=det(a);%求行列式a的值
%aa=round(8*rand(3,4));det(aa)
%% 求行列式的代数余子式
[n,m]=size(a);
for i=1:n
    ni=1:n;
    ni(i)=[];
    for j=1:m
        mj=1:m;
        mj(j)=[];
        A(i,j)=(-1)^(i+j)*det(a(ni,mj));
    end
end
a(1,1)*A(1,1)+a(2,1)*A(2,1)+a(3,1)*A(3,1)-det(a)==0;
a(2,1)*A(2,1)+a(2,2)*A(2,2)+a(2,3)*A(2,3)-det(a)==0;
%行列式和转置行列式值相等
det(a)==det(a')
%对换列式的两行(列),行列式变号。
b=a;c=a;
 c(:,1)=c(:,2);c(:,2)=a(:,1);
det(c)/det(b)==-1;
%行列式的某一行(列)中的所有元素都乘以同一个数K,等于K乘以这个行列式
e=a;e(:,1)=3*a(:,1);
det(e)/det(a);
%如果行列式中某一行(列)的每一个元素的是两个元素的和,行列式等于把这两个元素拆分后的行列式和。
f=[1,x1+y1,2;3,x2+y2,4;5,x2+y2,6];
g=[1,x1,2;3,x2,4;5,x2,6];h=[1,y1,2;3,y2,4;5,y2,6];
det(f)-det(g)-det(h)==0;

本文作者:过冷水