MATLAB--控制语句--数组操作--符号运算--绘图--文件和数据的处理(一)

简介: MATLAB--控制语句--数组操作--符号运算--绘图--文件和数据的处理

控制语句

MATLAB 常用的控制语句有for, while, if, switch 等。

一、循环语句

通过循环控制语句,可以重复执行代码块。循环有两类:for 循环和while 循环。

for 循环是一组语句重复固定的,指定的次数,while 循环是满足条件执行。

1.for 循环

循环特定次数,并通过递增的索引变量跟踪每次迭代。

for 循环的典型结构如下:
for x=lower_bound:step:upper_bound
group of statements
end
• 1
• 2
• 3
• 4

循环变量为x,表达式lower_bound:step:upper_bound 给循环变量赋值,循环变量从初始值lower_bound 开始,步长为step 进行递增。如果step 为1 可以省略。循环索引

lower_bound:step:upper_bound 相当于一个数组。在每一次循环执行期间,循环变量执行一次,直到循环变量超过终止值upper_bound 为止。end 语句标志着循环执行语句的结束。

简单示例:

2.while 循环

只要条件仍然为true 就进行循环,事先并不知道循环的执行次数。

while 循环的典型结构如下:
while expression
group of statements
end
• 1
• 2
• 3
• 4

逻辑表达式expression 为真,则执行语句,直到逻辑表达式为假时终止。当表达式始终为真,循环则会无限的执行下去。在while 循环之前,循环变量有一个初始值,在执行过程中,循环变量的值被改变。

简单示例:

break 和continue 语句

使用break 语句可以在循环变量达到终止值之前跳出循环,break 命令可以终止循环。

使用continue 语句跳到循环的下一次迭代。

二、条件语句

条件语句可用于在运行时选择要执行的代码块。条件语句中包含一个或者多个if,else,elseif 语句。可以根据真/假(布尔)表达式有条件地控制1 个或多个命令的执行。

1. if 语句

if 语句的基本结构是:

if expression
group of statements
end
• 1
• 2
• 3

每一个if 语句以end 语句作为结束。

如果有两种选择,使用if 和else 语句,基本结构如下:

if expression
statements1
else
statements2
end
• 1
• 2
• 3
• 4
• 5

如果有多个选择,使用if 和elseif 语句,基本结构如下:

if expression1
statements1
elseif expression2
statements2
else
statements3
end
• 1
• 2
• 3
• 4
• 5
• 6
• 7

2.switch 语句

除了if, elseif, else 语句之外还可以使用switch 语句。switch 语句也可以用if 结构编写。

switch 语句执行多组语句中的一组。

switch 语句基本结构如下:

switch switch_expression
case case_expression
statements1
case case_expression
statements2
...
otherwise
statementsn
end
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9

输入表达式switch_expression 与每一个case 进行比较,如果bool 值时1,则执行case语句之后的语句statements。如果没有相应的case,则执行otherwise 语句之后的语句,如果没有otherwise 语句,则执行end 之后的语句。

数组操作

数组可分为:空数组,向量(一维数组),二维数组,多维数组。标量是只有一个元素的数组,向量是只有一行或者一列的数组,也称为一维数组。矩阵是二维的数组,可以看作

是几行或者几列合并在一起的向量。

矩阵的数学含义是一个空间的线性变换,拉伸、旋转、缩放、反射的结合。

矩阵的运算,矩阵和矩阵相乘的本质是坐标系的线性变换,矩阵和向量相乘的本质是向量的线性变换。

一、矩阵基本操作

1.创建

矩阵是二维数组,具有多行多列。矩阵是按行进行书写,每一行以分号进行分隔,每一

列以逗号或者空格进行分隔。三种书写方式等价。(…)符号可以在使用空格处使用。例如,A= [1 2 3; 4 5 6];

创建了一个二维数组。

矩阵可以通过内置函数创建,函数zeros(m,n)可以创建m* n 的全零矩阵。

函数ones(m,n)可以创建m *n 的全1 矩阵。

2.获取元素

A(i,j)是第i 行第j 列的元素。

指定行和列的范围,A(m:n,k:l)是m 到n 行,k 到l 列的范围的元素。

以冒号:作为索引为指定矩阵的所有行或所有列。

A(m:n,:)是m 到n 行,所有列的范围的元素。

A(:,k:l))是所有行,k 到l 列的范围的元素。

3.矩阵赋值

获取矩阵的尺寸,size(A,1)是矩阵A 的第一位,size(A,2)是矩阵的第二个维度。

当第一次指定矩阵时,如果矩阵未存在,未指定的元素被赋值为零。

B(2,3)=5;

4.空矩阵

零行零列的矩阵为空矩阵,x=[]。

5.删除元素

利用空矩阵删除矩阵的元素,将矩阵的元素设置为[],即可删除元素。

A(:,1)=[]; % 删除矩阵的第一列所有元素

A(2,:)=[]; % 删除矩阵的第二行所有元素

6.矩阵重排

函数reshape()可以实现数组的重排。函数reshape()可以改变数组的形状,reshape(A,m,n)

可以将矩阵重排为m* n 的矩阵,重构前后的元素个数相同。

例如,将数组A 重构为5*2 的数组。

矩阵可以被重排成向量,按列重排

7.矩阵转置、旋转、翻转

矩阵A 的转置为A’。

矩阵的旋转可以利用函数rot90(A,k)将矩阵A 旋转90 度,k 为旋转90 度的倍数。

矩阵的翻转可以利用函数fliplr()将矩阵左右翻转或者函数flipud()将矩阵进行上下翻转。

8.矩阵扩充

列向量u,行向量v 可以通过以下方式对A 的列进行扩充和行进行扩充。

A=[A u]

A=[A; v]

9.特殊矩阵

魔方矩阵,使用magic()函数进行创建,每行、每列以及两条对角线上的元素和相等。

希尔伯特矩阵,使用hilb()函数创建。

稀疏矩阵,使用sparse()函数创建,使用稀疏存储的方式进行创建。

二、矩阵运算

1.矩阵的加减法

如果矩阵A 和B 有相同的维度,矩阵A+B, A-B 是相应位置上的元素进行加减。

矩阵与标量进行加减,是将矩阵的每一个元素与标量进行加减。

矩阵与标量相乘,是将矩阵的每一个元素与标量进行相乘。

2.矩阵的乘法

矩阵的乘法A *B,需要满足矩阵A 的列数与B 的行数相等,C=A *B,矩阵C 的行数等于A 的行数,列数等于B 的列数。

矩阵的乘法可以使用循环的方式得到相乘后的每一个元素。

3.矩阵的除法

  1. MATLAB 中的左除号与右除号的区别,左除号(\),右除号(/)。
  2. /:右除:A/B 表示矩阵A 乘以矩阵B 的逆。
  3. \:左除:A\B 表示矩阵A 的逆乘以B。解方程AX=B,X=A\B,相当于inv(A)*B。
  4. ./:右除:A./B 表示矩阵A 中的每个元素除以矩阵B 的对应的元素。
  5. .\:左除:A.\B 表示矩阵B 中的每个元素除以矩阵A 的对应的元素。

三、矩阵分析

1.矩阵的逆

函数inv()可以计算矩阵的逆,例如,B=inv(A); 矩阵B 为矩阵A 的逆。

函数pinv()可以计算矩阵的伪逆,矩阵A 不是方阵或者是一个非满秩的方阵,B=pinv(A);

矩阵B 为矩阵A 的伪逆,也称为广义逆矩阵。

2.矩阵的行列式

函数det()可以计算方阵的行列式。

3.矩阵的秩和迹

函数rank()可以计算矩阵的秩,矩阵的秩是矩阵线性无关的行数和列数。

函数trace()可以计算矩阵的迹,矩阵的迹是特征值之和,矩阵的对角线元素之和。

4.矩阵的范数

函数norm()可以计算矩阵的范数,默认为2-范数。

norm(A,1)为矩阵的1-范数,norm(A,2)为矩阵的2-范数,norm(A,inf)为矩阵的∞范数。

5.矩阵的条件数

函数cond(A,1)计算矩阵A 在1-范数下的条件数,函数cond(A,2)计算矩阵A 在2-范数下的条件数,函数cond(A,inf)计算矩阵A 在∞范数下的条件数。

6.矩阵特征值和特征向量

函数eig(A)用来计算矩阵特征值,[V,D]=eig(A)为矩阵A 的全部特征值构成对角矩阵D,

特征向量构成矩阵V 的列向量。

四、向量运算

向量的逐元素乘积:u.* v=[u1* v1 u2*v2 u3 v3…]
向量的逐元素除法:u./v=[u1/v1 u2/v2 u3/v3…]
向量的逐元素指数运算:u.v=[u1v1 u2v2 u3v3…]
向量的内外积:列向量x,内积为x ’ * x,外积为x
x’

五、标量与向量

标量c 只是一个(实数或复数)数值,维度为1*1 的矩阵。

向量v 是一个既有大小又有方向的对象,向量也称为线性数组或线性矩阵,是一个维度长度为1,另一维度长度大于1 的矩阵。

向量分行向量和列向量,行向量的每个数值用逗号或空格隔开,列向量的每个数值用分号隔开。

向量的分量数决定了向量所在空间的维数。

向量的长度由2-范数给出,用函数norm()计算。

符号运算

符号运算是集成到符号数据箱中允许在MATLAB 环境中以富豪的方式执行运算。

符号运算可以计算微分、积分、极限、求和、矩阵求逆、行列式、特征值、化简代数表达式、方程求解等。

符号对象是符号工具箱中定义的一种数据类型,符号对象是符号的字符串表示,符号对象用于表示符号变量、表达式和方程。

一、符号变量与符号表达式

符号变量的生成

使用函数sym 和syms 生成一个或者多个符号对象。

(1)函数sym

生成单个字符符号变量。

x = sym(‘x’) 创建一个符号变量x,变量的内容是x,表达式是x。

(2)函数syms

一次性生成多个符号变量,但是不能用于生成表达式。

syms 函数的输入参数必须以字母为开头,只包含字母和数字。

syms arg1 arg2…定义多个符号变量。

相当于arg1=sym(‘arg1’);arg2=sym(‘arg2’);…

函数subs

将符号表达式中的符号变量用数值代替。

符号方程的生成

二、符号表达式化简

多项式有多种表达式,函数simplify 可以实现符号表达式的化简。

三、符号运算

1.符号微分

函数diff 用来求符号表达式的微分.

diff(S)求表达式S 的导数;

diff(S,n)求表达式S 的n 阶导数;

diff(S,’v’)求表达式S 对变量v 的导数。

2.符号积分

函数int 用于实现符号微分运算。

int(S)求表达式的不定积分;

int(S,v)求表达式S 对自变量v 的不定积分;

Int(S,a,b)求表达式S 在区间[a,b]内的定积分;

Int(S,v,a,b)求表达式S 自变量v 在区间[a,b]内的定积分。


目录
相关文章
|
8天前
|
Python Windows
SciPy 教程 之 SciPy Matlab 数组 1
本教程介绍了如何使用 SciPy 的 `scipy.io` 模块处理 Matlab 数组。通过 `savemat()` 方法可以将数据导出为 Matlab 格式的文件,而 `loadmat()` 方法则用于从 Matlab 文件中导入数据。示例展示了如何导出和导入一维数组,并解决了导入时数组维度增加的问题。
7 1
|
1月前
|
算法
MATLAB符号计算
【10月更文挑战第9天】MATLAB不仅擅长数值计算,还具备强大的符号计算功能,支持代数运算、方程求解、微积分等。本文介绍如何使用MATLAB的符号工具箱进行符号变量定义、方程求解、微分积分及矩阵运算,并通过多个实际应用案例展示了其在机械系统、电路分析、经济优化和物理运动学等领域的应用。此外,文章还提供了符号计算的最佳实践和未来展望。
42 2
|
1月前
|
Serverless
MATLAB中的矩阵与向量运算
【10月更文挑战第2天】本文全面介绍了MATLAB中的矩阵与向量运算,包括基本操作、加减乘除、转置、逆矩阵、行列式及各种矩阵分解方法。通过丰富的代码示例,展示了如何利用矩阵运算解决线性方程组、最小二乘法拟合、动态系统模拟和电路分析等问题。掌握这些运算不仅提升编程效率,还能在工程计算和科学研究中发挥重要作用。
51 1
|
3月前
matlab绘图之plot使用
matlab绘图之plot使用
26 0
|
4月前
|
机器学习/深度学习 算法 数据挖掘
基于改进K-means的网络数据聚类算法matlab仿真
**摘要:** K-means聚类算法分析,利用MATLAB2022a进行实现。算法基于最小化误差平方和,优点在于简单快速,适合大数据集,但易受初始值影响。文中探讨了该依赖性并通过实验展示了随机初始值对结果的敏感性。针对传统算法的局限,提出改进版解决孤点影响和K值选择问题。代码中遍历不同K值,计算距离代价,寻找最优聚类数。最终应用改进后的K-means进行聚类分析。
|
5月前
|
机器学习/深度学习 算法 数据可视化
m基于PSO-LSTM粒子群优化长短记忆网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,应用PSO优化的LSTM模型提升了电力负荷预测效果。优化前预测波动大,优化后预测更稳定。PSO借鉴群体智能,寻找LSTM超参数(如学习率、隐藏层大小)的最优组合,以最小化误差。LSTM通过门控机制处理序列数据。代码显示了模型训练、预测及误差可视化过程。经过优化,模型性能得到改善。
108 6
|
5月前
|
数据处理
MATLAB 论文绘图规范标注
MATLAB 论文绘图规范标注
|
5月前
|
机器学习/深度学习 算法
基于蛙跳优化的神经网络数据预测matlab仿真
使用MATLAB2022a,应用蛙跳优化算法(SFLA)调整神经网络权重,提升预测精度,输出预测曲线。神经网络结合输入、隐藏和输出层进行预测,蛙跳算法模仿蛙群觅食行为优化权重和阈值。算法流程包括蛙群初始化、子群划分、局部搜索及适应度更新,直至满足停止条件。优化后的神经网络能提升预测性能。
|
5月前
|
机器学习/深度学习 算法
m基于PSO-GRU粒子群优化长门控循环单元网络的电力负荷数据预测算法matlab仿真
摘要: 在MATLAB 2022a中,对比了电力负荷预测算法优化前后的效果。优化前为"Ttttttt111222",优化后为"Tttttttt333444",明显改进体现为"Tttttttttt5555"。该算法结合了粒子群优化(PSO)和长门控循环单元(GRU)网络,利用PSO优化GRU的超参数,提升预测准确性和稳定性。PSO模仿鸟群行为寻找最优解,而GRU通过更新门和重置门处理长期依赖问题。核心MATLAB程序展示了训练和预测过程,包括使用'adam'优化器和超参数调整,最终评估并保存预测结果。
56 0
|
3月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
199 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码