matlab使用1-基础
文章目录
- matlab使用1-基础
- 1. 界面介绍
- 2. matlab变量
- 3. matlab数据类型
- 4. matlab矩阵操作
- 5. matlab程序结构
- 5.1 顺序结构
- 5.2 循环结构
- 5.3 分支结构
1. 界面介绍
-
命令行窗口输入:clc
-
可清除命令行窗口command window的内容
-
clc
-
-
命令行窗口输入:clear all
-
可清除命令行窗口command window + 工作区work widow的内容
-
clear up
-
-
编辑器注释(不会执行的语句):
%% 注释 % 注释
2. matlab变量
- matlab变量命名规则
- 变量名区分大小写
- 变量名长度不超过63位
- 变量名以字母开头,可以由字母、数字和下划线组成,但不能使用标点符号
- 变量名应简介明了,通过变量名可以直观看出变量所表示的物理意义
3. matlab数据类型
-
数字
-
字符与字符串
double('a')
- 获取字符或字符串中每个字符的数值(即 ASCII 或 Unicode 编码)
double('abc')
- 获取字符或字符串中每个字符的数值(即 ASCII 或 Unicode 编码)
char(97)
- 用于创建一个包含单个字符的字符数组(字符串),该字符为对应的ASCII码
num2str(100)
- 用于将数值(如整数、浮点数等)转换为字符串表示形式
length('abcdefg')
- 用于获取数组的长度(即数组中元素的数量)
-
矩阵
-
矩阵的定义
a = [1 2 3; 4 5 6; 7 8 9]
-
转置矩阵(行列互换,行变列,列变行)
% b是a的转置矩阵 b = a'
-
转换成列向量
% b是将a转换之后的列向量(按列转换:第一列的元素 + 第二列的元素 + ......) b = a(:)
-
逆矩阵(与原矩阵相乘为单位矩阵;仅限于方阵)
% b为a的逆矩阵 b = inv(a)
-
三维零矩阵
-
补充:随机数
- rand生成均匀分布的伪随机数,分布在0-1之间
rand(m, n)
生成m行n列的均匀分布的伪随机数rand(m, n, 'double')
生成指定精度的均匀分布的伪随机数,参数还可以是’single’rand(RandStream, m, n)
利用指定的RandStream(类似于随机种子)生成伪随机数
- randa生成标准正态分布的伪随机数(均值为0,方差为1)
- 语法同上rand
- randi生成均匀分布的伪随机整数
randi(iMax)
在开区间(0, iMax)生成均匀分布的伪随机整数randi(iMax, m, n)
在开区间(0, iMax)生成mXn型随机矩阵r = randi([iMin, iMax], m, n)
在开区间(iMin, iMax)生成mXn型随机矩阵
- rand生成均匀分布的伪随机数,分布在0-1之间
-
示例:
E = zeros(2, 3, 3); E(:,:,1) = rand(2, 3); E(:,:,2) = randi(2, 2, 3); % 注意这里也要是2x3,因为E的维度是2x3x3 E(:,:,3) = randn(2, 3);
-
-
-
元胞数组
-
定义:
- 在matlab中,元胞数组(Cell Array)是一种特殊的数据类型,用于存储不同大小和类型的数据
- 与常规的矩阵不同,元胞数组中的每个元素(称为元胞)都可以包含任意类型的数据,包括数值数组、字符数组、其他元胞数组等
-
创建元胞数组:
% 创建一个2行3列的元胞数组 a = cell(2, 3)% 创建一个2行3列的元胞数组,其中每个元素都是字符串 a = {'123', '123', '123'; '456', '456', '456'}
-
访问元胞数组中的元素
% 访问元胞数组中的元素 % 注意使用花括号 {} 而不是圆括号 () e1 = a{2, 2}% 也可以修改元胞数组中的元素 a{2, 2} = '2,2';
- 补充:
eye(n)
- 用于生成一个
n x n
的单位矩阵:单位矩阵是一个方阵,其主对角线上的元素都是1,而其他位置上的元素都是0
- 用于生成一个
- magic(n)
- 用于生成一个
n x n
的魔方矩阵(Magic Square):一种特殊的整数矩阵,它的每一行、每一列以及主对角线和副对角线上的元素之和都相等 - 注:对于 n 为奇数的情况,MATLAB能够直接生成魔方矩阵;对于 n 为偶数的情况,magic函数可能不会直接返回一个标准的魔方矩阵,因为它可能有多个解或者可能没有简单的解析解;但是,MATLAB仍然会尝试返回一个具有相等行和列和的矩阵
- 用于生成一个
- 补充:
-
-
结构体
-
定义:结构体(struct)是一种用户定义的数据类型,它允许你将不同类型的变量组合成一个单一的实体;结构体中的变量被称为字段(field),每个字段可以包含任何MATLAB数据类型,包括其他结构体
-
创建结构体:
% 创建一个空结构体 a = struct()% 创建一个包含内容的结构体 a = struct('name', 'ausgelebt', 'age', 20)
-
访问结构体中的元素
a.name a.age
-
4. matlab矩阵操作
-
矩阵的定义和构造
-
定义:
% 定义一个三行三列的矩阵 a = [1 2 3; 4 5 6; 7 8 9]
-
m:n:k
-
创建一个从m开始,以步长n递增,直到(但不包括k的向量a。这里m是起始值,n是步长(增量),而k是停止值(但不包括在内)
-
示例:
% 创建一个从1开始,步长为2,直到(但不包括)9的向量 a = 1:2:9
-
注:
- n可以为负数,例如:
9:-2:1
会输出[9 7 5 3]
- n可以省略,此时步长为1,例如:
1:3
会输出[1 2]
- n可以为负数,例如:
-
-
repmat(A, m, n)
-
用于复制数组A以创建一个新的大数组。这个函数接收两个额外的参数m和n,它们分别指定了A在行方向和列方向上的复制次数
-
具体来说,
repmat(A,m,n)
将数组A在行方向上复制m次,在列方向上复制n次;因此,如果A是一个p行q列的数组,那么repmat(A,m,n)
的结果将是一个mp行nq列的数组 -
示例:
a = [1 2 3; 4 5 6] b = repmat(a, 2, 3)
-
-
ones(m, n)
-
用于创建一个所有元素都是 1 的矩阵,该矩阵有m行和n列;常用于初始化数组或作为计算中的占位符
-
示例:
a = ones(n) a = ones(m, n)
-
-
-
矩阵的四则运算
-
加
-
只要两个矩阵的维度相同(即它们有相同的行数和列数),就可以进行加法操作
-
矩阵中对应位置的元素相加
-
示例:
% 定义两个3x3的矩阵 A = [1 2 3; 4 5 6; 7 8 9]; B = [9 8 7; 6 5 4; 3 2 1]; % 对这两个矩阵进行加法操作 C = A + B;
-
-
减
-
只要两个矩阵的维度相同(即它们有相同的行数和列数),就可以进行减法操作
-
每个对应位置的元素相减,得到的结果矩阵就是这两个矩阵的差
-
示例:
% 定义两个3x3的矩阵 A = [1 2 3; 4 5 6; 7 8 9]; B = [9 8 7; 6 5 4; 3 2 1]; % 对这两个矩阵进行减法操作 C = A - B;
-
-
乘
-
矩阵乘法需要满足一定的规则:第一个矩阵的列数必须等于第二个矩阵的行数
-
结果矩阵的行数等于第一个矩阵的行数,列数等于第二个矩阵的列数
-
如果对两个维度不满足乘法规则的矩阵进行乘法操作,MATLAB会抛出错误
-
示例:
% 定义两个矩阵A和B % A是一个2x3的矩阵 A = [1 2 3; 4 5 6]; % B是一个3x2的矩阵 B = [1 4; 2 5; 3 6]; % 对这两个矩阵进行乘法操作 C = A * B;
-
-
除:矩阵除法并不是一个直接的操作符,因为矩阵除法的定义可能因上下文而异;通常,当我们提到“矩阵除法”时,指的是以下几种情况之一:
- 左除 (
\
操作符):求解线性方程组 Ax = b 的解 x,其中 A 是系数矩阵,b 是常数向量;可以通过x = A\b
来实现 - 右除 (
/
操作符):求解线性方程组 xA = b 的解 x,不常用;通过x = b/A
来实现 - 矩阵求逆与乘法:如果想要通过矩阵的逆来进行“除法”,首先需要计算矩阵的逆(如果它存在且是可逆的),然后与另一个矩阵相乘;不推荐直接计算逆矩阵,因为其在数值上不稳定,且效率低,最好使用左除或右除操作符
- 左除 (
-
点号(
.
)开头的运算符-
按元素进行的操作,而不是矩阵运算
-
示例:
A = [1 2 3; 4 5 6; 7 8 9]; B = [9 8 7; 6 5 4; 3 2 1];C = A .* B
-
-
-
矩阵的下标
-
用于访问或修改矩阵中的特定元素
-
MATLAB使用基于1的索引,即矩阵的第一个元素的索引是(1,1),而不是(0,0)
-
访问矩阵的第m行第n列的元素
-
A(m, n)
-
示例:
a = magic(5) element = a(2, 3)
-
-
访问多个元素
-
冒号(
:
)运算符 -
示例:
% 访问矩阵a的第一行所有元素 row1 = a(1, :); row1_again = a(1, 1:end);
% 访问矩阵的所有元素(创建一个列向量) all_elements = a(:);
% 访问矩阵的第一列所有元素 elements = a(:, 1)
% 访问矩阵的最后一行所有元素 elements = a(end, :)
-
-
5. matlab程序结构
5.1 顺序结构
顺序结构是最简单的程序结构,其按照程序中代码的书写顺序从上到下依次执行
在MATLAB脚本或函数中,如果没有条件语句(如if
、else
、switch
)或循环语句(如for
、while
),那么代码将按照顺序结构执行
5.2 循环结构
允许重复执行一段代码,直到满足特定的条件为止
-
for
循环-
for
循环用于重复执行一段代码块,每次迭代时都会更改循环变量(通常是一个向量或数组的元素)的值 -
基本语法:
for 循环变量 = 初始值:增量:结束值 % 循环体 - 要重复执行的代码 end
-
示例:
% 使用for循环打印1到5之间的整数 for i = 1:5 fprintf('%d\n', i); end
-
-
while
循环-
while
循环会不断执行循环体中的代码,直到指定的条件不再满足为止 -
基本语法:
while 条件 % 循环体 - 要重复执行的代码 end
-
示例:
% 使用while循环计算1到100之间所有整数的和 sum = 0; i = 1; while i <= 100 sum = sum + i; i = i + 1; end fprintf('The sum of integers from 1 to 100 is: %d\n', sum);
-
-
嵌套循环:在一个循环内部嵌套另一个循环,以实现更复杂的操作
-
注意事项
- 确保有一个明确的退出条件,否则会无限循环
- 在
for
循环中,循环变量会自动在每次迭代后更新;在while
循环中,需要手动更新循环变量(或其他用于控制循环的条件) - 使用
break
语句可以在满足某个条件时立即退出循环;使用continue
语句可以跳过当前迭代并进入下一次迭代
5.3 分支结构
分支结构允许程序根据条件的不同执行不同的代码块
-
if
、elseif
、else
语句-
如果条件为真(非零),则执行
if
语句后的代码块;如果希望根据多个条件执行不同的代码块,可以使用elseif
语句;如果所有条件都不满足,可以使用else
语句来指定默认操作 -
基本语句:
if 条件1 % 如果条件1为真,执行这里的代码 elseif 条件2 % 如果条件1为假且条件2为真,执行这里的代码 else % 如果所有条件都为假,执行这里的代码 end
-
示例:
% 使用if-elseif-else语句判断一个数的正负或零 x = -5; if x > 0 fprintf('x is positive\n'); elseif x < 0 fprintf('x is negative\n'); else fprintf('x is zero\n'); end
-
-
switch
语句-
switch
语句用于根据表达式的值选择执行不同的代码块;每个case
语句都包含一个值或表达式,当switch
表达式的值与之匹配时,将执行相应的case
语句后的代码块;如果所有case
的值都不匹配,并且存在otherwise
语句,则执行otherwise
后的代码块 -
基本语句:
switch 表达式 case 值1 % 如果表达式的值等于值1,执行这里的代码 case 值2 % 如果表达式的值等于值2,执行这里的代码 ... otherwise % 如果表达式的值不匹配任何case,执行这里的代码 end
-
示例:
% 使用switch语句判断一周的哪一天 dayNumber = 3; % 假设dayNumber代表星期三(在MATLAB中,星期日是1,星期一是2,依此类推) switch dayNumber case 1 fprintf('Sunday\n'); case 2 fprintf('Monday\n'); case 3 fprintf('Tuesday\n'); case 4 fprintf('Wednesday\n'); case 5 fprintf('Thursday\n'); case 6 fprintf('Friday\n'); case 7 fprintf('Saturday\n'); otherwise fprintf('Invalid day number\n'); end
-
-
注意事项
- 确保条件表达式和
case
语句中的值或表达式类型兼容,以便进行正确的比较 - 如果
if
、elseif
或switch
语句后没有跟随任何代码块,或者代码块为空,则这些语句将没有任何效果 - 在
if
、elseif
、else
或switch
语句中,可以使用任何有效的MATLAB表达式或语句 - 嵌套使用这些语句可以实现更复杂的条件逻辑,但需要确保正确缩进和格式化代码以提高可读性
- 确保条件表达式和