MATLAB语言基础

MATLAB简介

Matrix Laboratory 矩阵实验室

  • 科学计算
    • 数值计算=求数值解(线性代数,数值分析,计算方法,数值数学物理方法):对应numpy, pandas, scipy
    • 符号计算=求解析解(高等数学/数学分析,线性代数,复分析/+数学物理方法,微分方程):对应sympy
  • 可视化绘图
  • 机器学习+深度学习

Python matplotlib 可视化绘图
Python sympy 符号运算

环境配置

  • 如果遇到命令行中文乱码,将字体改为Consolas-with-Yahei
  • 在“附加功能管理器”中加载dark mode、新工作区

语法与指令

  • 符号
    • 英文状态输入()[]{}''"";:,.!?*&^$#
    • 续行...
    • 合并两行;
    • %注释
  • 变量声明:隐式声明
  • 索引值从1开始
  • 指令
    • clc清除命令行窗口
    • cd工作目录
    • dir显示文件

基础数据类型

  • 内置常量
    • pi圆周率
    • eps浮点运算的相对精度
    • Inf无穷大
    • NaN不定值
    • ans默认变量,最新输入的数值
  • 数字
    • 整型
      • char字符型
      • unsigned char无符号字符型
      • short短整型,2B
      • unsigned short无符号短整型
      • [unsigned] int整型,4B
      • [unsigned] long长整型,4B
    • 浮点型
      • float单精度浮点型 4B 3.4e+/-38
      • double双精度浮点型 8B 1.7e+/-308
      • 小数形式
      • 指数形式 指数表示:科学计数法2.2204e-16=
    • 复数类型 ,实数+虚数
  • format显示格式

000三位二进制数(3 bit)


000 001 010 011 100 101 110 111
0 1 2 3 4 5 6 7

000 001 010 011
0 1 2 3
100 101 110 111
-0 -1 -2 -3

矩阵表示

start:step:stop

  • 闭区间
  • 从1开始索引
  • 缺省值(默认值,default)
    • 行列缺省:按列求和 以行排列
    • 步长缺省:步长为1
    • 全部元素A(:):按列拼接

一些例子

工作区面板
%% MATLAB快速入门

% 只需要掌握基本的语法即可,在实际比赛和科研中,即查即用,养成查工具资料和帮助文档的习惯。
% 查询网站:https://ww2.mathworks.cn/help/stateflow/matlab-functions.html

%% Matlab常用操作
% (1)赋值语句
a = 1;
a = 2

% % (2)多行注释,选中语句,快捷键Ctrl+R
% a = 1;
% a = 2

% (3)取消注释:选中语句,快捷键Ctrl+T

% 清除工作区的所有变量
clear

% 清屏
clc

% 这两条一起使用,起到“初始化”的作用
clear;clc % 分号也用于区分行。


%% 输出和输入函数(disp 和 input)
% disp函数
disp("Hello World!")
a = [1,2,3]; %矩阵的同一行中间用逗号或空格分隔
a = [1 2 3]; %空格分隔
disp(a)

%% 判断语句
a = input('请输入考试分数:')
if a >= 85
disp('成绩优秀')
elseif a >= 60
disp('成绩合格')
else
disp('成绩挂科')
end

%% 字符串
% 合并几个字符串
% (1)方法一:strcat(str1,str2……,strn)
strcat('字符串1','字符串2')
% (2)方法二:[str 1,str 2,……, str n]或[str1 str2 …… strn]
['字符串1' '字符串2']
['字符串1','字符串2']
% 转换字符串
c = 100
num2str(c)
disp(['c的取值为' num2str(c)])
disp(strcat('c的取值为', num2str(c)))

%% sum求和函数
% (1)如果是向量(无论是行向量还是列向量),都是直接求和
E = [1,2,3]
sum(E)
E = [1;2;3]
sum(E)
% (2)如果是矩阵,则需要指明是按行还是按列求和
clc
E = [1,2;3,4;5,6]
a = sum(E)
a = sum(E,1)%按列求和(得到一个行向量)
a = sum(E,2) %#ok<*NOPTS> %按行求和(得到一个列向量)
%对整个矩阵求和
% a = sum(sum(E)) %#ok<*NASGU>
a = sum(E(:))

%% 矩阵的查询
% (1)取指定行和列的一个元素(输出的是一个值)
A=[1 2 5; 1/2 1 2; 1/5 1/2 1];
A
A(2,1)
A(3,2)
% (2)取指定的某一行的全部元素(返回的是一个行向量)
A(1,:)
A(2,:)
% (3)取指定的某一列的全部元素(返回的是一个列向量)
A(:,1)
A(:,3)
% (4)取指定的某些行的全部元素(返回的是一个矩阵)
A([1,3],:) % 只取第一行和第三行
A(1:3,:) % 取第一行到第三行
A(1:2:3,:) % 取第一行和第三行 (从一开始,每次递增2个行,到3结束)
% 递增语法
1:3:10
10:-1:1
A(1:end,:) % 取第一行到最后一行
A(1:end-1,:) % 取第一行到倒数第二行

% (5)取全部元素(按列拼接的,最终输出的是一个列向量)
A(:)

%% size函数
clc;
A = [1,2,3;4,5,6]
B = [1,2,3,4,5,6]
size(A)
size(B)
% size(A)函数是用来求矩阵A的大小的,它返回一个行向量,第一个元素是矩阵的行数,第二个元素是矩阵的列数
[r,c] = size(A) %#ok<*ASGLU>
% 指定返回行数或列数
r = size(A,1) %返回行数
c = size(A,2) %返回列数

%% repmat函数
% B = repmat(A,m,n):将矩阵A复制m×n块,即把A作为B的元素,B由m×n个A平铺而成。
% 就是先创建一个m×n的矩阵,然后把A作为元素填充进去
A = [1,2,3;4,5,6]
B = repmat(A,2,1)
B = repmat(A,3,2)

%% 矩阵的运算
% MATLAB在矩阵的运算中,“*”号和“/”号代表矩阵之间的乘法与除法(A/B = A*inv(B))
A = [1,2;3,4]
B = [1,0;1,1]
A * B
inv(B) % 求B的逆矩阵
B * inv(B)
A * inv(B)
A / B

% 两个形状相同的矩阵对应元素之间的乘除法需要使用“.*”和“./”
A = [1,2;3,4]
B = [1,0;1,1]
A .* B
A ./ B

% 每个元素同时乘或除相同的倍数
A = [1,2;3,4]
A * 2
A .* 2
A / 2
A ./ 2

% 每个元素同时乘方时只能用 .^
A = [1,2;3,4]
A .^ 2 %将各个元素平方
A ^ 2
A * A

%% 求特征值和特征向量
A = [1 2 3 ;2 2 1;2 0 3]
% 求矩阵A的全部特征值,返回一个由特征值构成的向量
E=eig(A)
% 求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。(V的每一列都是D中与之相同列的特征值的特征向量)
[V,D]=eig(A)