MATLAB基础运算

矩阵和数字相乘

就是矩阵里面每个元素跟这个数字乘一遍,无论是点乘还是叉乘,对于这个都一样。

cpp 复制代码
>> A=ones(3)
A =
     1     1     1
     1     1     1
     1     1     1
>> 10*A
ans =
    10    10    10
    10    10    10
    10    10    10

矩阵和矩阵叉乘

能不能相乘,需要前面矩阵的列数等于后面矩阵的行数,出来的矩阵大小是前面矩阵的行数*后面矩阵的列数。

所以大家会发现,矩阵相乘如果前后调转了,结果会完全不一样,阴差阳错地乘出个逆矩阵出来。

有个很形象的图

有些教材会把这个称为左乘和右乘,但是本质上其实就是矩阵相乘的先后顺序。

cpp 复制代码
>> A=[1 2 3; 4 5 6;7 8 9]
A =
     1     2     3
     4     5     6
     7     8     9
>> B=[10 20 30;40 50 60;70 80 90]
B =
    10    20    30
    40    50    60
    70    80    90
>> A*B
ans =
         300         360         420
         660         810         960
        1020        1260        1500

矩阵和矩阵点乘

点乘运算指将两矩阵中相同位置的元素进行相乘运算,所以需要矩阵维数和行列数都一样

cpp 复制代码
>> A=[1 2 3; 4 5 6;7 8 9]
A =
     1     2     3
     4     5     6
     7     8     9
>> B=[10 20 30;40 50 60;70 80 90]
B =
    10    20    30
    40    50    60
    70    80    90
>> A.*B
ans =
    10    40    90
   160   250   360
   490   640   810

矩阵和数字相除

只有矩阵除以数字,没有数字除以矩阵。跟相乘一样,每个元素除以数字即可。

cpp 复制代码
C =
    10    40    90
   160   250   360
   490   640   810
>> C/10
ans =
     1     4     9
    16    25    36
    49    64    81
>> C./10
ans =
     1     4     9
    16    25    36
    49    64    81

矩阵和矩阵除法

一般老师不让学生学除法具体怎么算,太反人类了,大家只需要记得A/B=A*inv(B)就行。当然啦,既然换成了乘法,也要注意取逆之后的两个矩阵的行列数能不能乘起来。

所谓左除右除,就是被除数和除数位置调转而已。

cpp 复制代码
>> A=[1,3,5;3,4,5;2,4,8]
A =
     1     3     5
     3     4     5
     2     4     8
>> B=[2,5,8;3,7,2;5,3,2]
B =
     2     5     8
     3     7     2
     5     3     2
>> A/B
ans =
    0.6395   -0.0058   -0.0523
    0.5233    0.0407    0.3663
    1.0233   -0.2093    0.1163
>> A*inv(B)
ans =
    0.6395   -0.0058   -0.0523
    0.5233    0.0407    0.3663
    1.0233   -0.2093    0.1163

矩阵和矩阵点除

也就是元素一一对应相除

cpp 复制代码
>> A=[1,3,5;3,4,5;2,4,8]
A =
     1     3     5
     3     4     5
     2     4     8
>> B=[2,5,8;3,7,2;5,3,2]
B =
     2     5     8
     3     7     2
     5     3     2
>> A./B
ans =
    0.5000    0.6000    0.6250
    1.0000    0.5714    2.5000
    0.4000    1.3333    4.0000

dot点乘/内积/点积/数量积

dot(A,B,X)入参X 为1表示按列,为2表示按行,默认按列。算法如下

cpp 复制代码
A=[a1 a2 a3;a4 a5 a6]
B=[b1 b2 b3;b4 b5 b6]
C=[c1 c2 c3]
D=[d1 d2 d3]

dot(A,B)=dot(A,B,1)%按列(每列合在一起变成一行)
=[a1*b1+a4*b4,a2*b2+a5*b5,a3*b3+a6*b6]

dot(A,B,2)%按行(每行合在一起变成一列)
=[a1*b1+a2*b2+a3*b3;a4*b4+a5*b5+a6*b6]

dot(C,D)=dot(D,C)=dot(inv(C),D)%如果是向量,无论方向,合起来变成一个标量
=c1*d1 + c2*d2 + c3*d3 

例子如下

cpp 复制代码
%矩阵
>> A=[1 2 3; 4 5 6;7 8 9]
A =
     1     2     3
     4     5     6
     7     8     9
>> B=[10 20 30;40 50 60;70 80 90]
B =
    10    20    30
    40    50    60
    70    80    90
>> dot(A,B,1)
ans =
         660         930        1260
>> dot(A,B,2)
ans =
         140
         770
        1940

%向量
>> A=[2 4 6 8]
A =
     2     4     6     8
>> B=[3 4 5 6]
B =
     3     4     5     6
>> dot(A,B)
ans =
   100

cross叉积/向量积/矢量积

这个就比较复杂了,要求也多:

1、相乘的两个对象行列相同

2、至少有一个维度的长度是3,也就是要么3行要么3列

算法如下

cpp 复制代码
A=[a1 a2 a3;
   a4 a5 a6]

B=[b1 b2 b3;
   b4 b5 b6]

cross(A,B)=
[(a2*b3 - a3*b3),(a3*b1 - a1*b3),(a1*b2 - a2*b1);
 (a5*b6 - a6*b5),(a6*b4 - a4*b6),(a4*b5 - a5*b4)]

举个例子

cpp 复制代码
>> A=[1 2 3]
A =
     1     2     3
>> B=[4 5 6]
B =
     4     5     6
>> cross(A,B)
ans =
    -3     6    -3
>> C=[1 2 3;4 5 6]
C =
     1     2     3
     4     5     6
>> D=[30 20 10;60 50 40]
D =
    30    20    10
    60    50    40
>> cross(C,D)
ans =
   -40    80   -40
  -100   200  -100
相关推荐
NAGNIP21 分钟前
一文搞懂树模型与集成模型
算法·面试
NAGNIP27 分钟前
万字长文!一文搞懂监督学习中的分类模型!
算法·面试
技术狂人16830 分钟前
工业大模型工程化部署实战!4 卡 L40S 高可用集群(动态资源调度 + 监控告警 + 国产化适配)
人工智能·算法·面试·职场和发展·vllm
软件算法开发30 分钟前
基于改进麻雀优化的LSTM深度学习网络模型(ASFSSA-LSTM)的一维时间序列预测算法matlab仿真
深度学习·matlab·lstm·一维时间序列预测·改进麻雀优化·asfssa-lstm
D_FW42 分钟前
数据结构第六章:图
数据结构·算法
好奇龙猫1 小时前
【人工智能学习-AI入试相关题目练习-第三次】
人工智能
柳杉1 小时前
建议收藏 | 2026年AI工具封神榜:从Sora到混元3D,生产力彻底爆发
前端·人工智能·后端
狮子座明仔1 小时前
Engram:DeepSeek提出条件记忆模块,“查算分离“架构开启LLM稀疏性新维度
人工智能·深度学习·语言模型·自然语言处理·架构·记忆
a程序小傲1 小时前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
阿湯哥1 小时前
AgentScope Java 集成 Spring AI Alibaba Workflow 完整指南
java·人工智能·spring