Upload
arne
View
125
Download
0
Embed Size (px)
DESCRIPTION
第三章 MATLAB 程序设计基础. MATLAB 工作界面. 标题栏 菜单栏 工具栏 工作空间、命令窗、编辑窗. 当前路径. 工作空间. 命令窗口. 历史命令. MATLAB 工作界面. 设置断点. 取消断点. 进入函数. 跳出函数. 单步运行. 退出调试. 继续运行. MATLAB 编辑窗口. MATLAB 快捷键. ↑ 回调上一行命令 ↓ 回调下一行命令 ← 左移一个字符 → 右移一个字符 Delet Backspace 删除字符 Ctrl+C 中断 MATLAB 任务. 通用命令. help clear clc - PowerPoint PPT Presentation
Citation preview
第三章 MATLAB 程序设计基础
MATLAB 工作界面
• 标题栏标题栏• 菜单栏菜单栏• 工具栏工具栏• 工作空间、命令窗、编辑窗工作空间、命令窗、编辑窗
MATLAB 工作界面
命令窗口 工作空间
历史命令
当前路径
MATLAB 编辑窗口
设置断点
取消断点
单步运行
进入函数
跳出函数
退出调试继续
运行
MATLAB 快捷键
• ↑ ↑ 回调上一行命令回调上一行命令• ↓ ↓ 回调下一行命令回调下一行命令• ← ← 左移一个字符左移一个字符• → → 右移一个字符右移一个字符• Delet Backspace Delet Backspace 删除字符删除字符• Ctrl+C Ctrl+C 中断中断 MATLABMATLAB 任务任务
通用命令
• helphelp• clear clc clear clc • WhatWhat• who, whoswho, whos• load saveload save
3.1 MATALB 语言的数据结构
•变量命名规则–必须以字母开头;–可以由字母、数字和下划线混合组成;–变量长度应不大于 31个;–字母区分大小写。•变量的定义•特殊变量
特殊变量
变量名称变量名称 功能功能 变量名称变量名称 功能功能
ansans 用于结果的缺用于结果的缺省变量值省变量值 pipi 圆周率圆周率
realmaxrealmax 最大浮点数值最大浮点数值 realminrealmin 最小浮点数值最小浮点数值
ii 虚数单位虚数单位 jj 虚数单位虚数单位
infinf 正无穷大正无穷大 NaNNaN 不定式不定式 (0/0,(0/0,inf/inf)inf/inf)
epseps 机器浮点运算机器浮点运算误差限误差限 narginnargin 函数的输入变函数的输入变
量数目量数目
基本语句
• MATLAB 语言的基本语句结构为:•变量名列表 =表达式
– 等号左边的变量名列表为 MATLAB 语句的返回值,若一次返回多个结果,则变量列表用 [ ]括起来,各变量间用逗号分隔;
–等号右边为表达式,可以是矩阵运算或函数调用,可以由分号 (;) 、逗号 (,) 或回车结束。
数据类型
• 在 MATLAB 里共有六种数据类型,每一种类型可以是一维、二维和多维的。–双精度型( double )–字符型( char )–稀疏型( sparse )–存储型( storage )–细胞型( cell )–结构型( struct )
字符型
• 基本规则:基本规则:–所有字符串都用单引号括起来;所有字符串都用单引号括起来;–字符串中的每一个字符都是该字符串变量中的字符串中的每一个字符都是该字符串变量中的一个元素;一个元素;
–字符串中的字符以字符串中的字符以 ASCⅡASCⅡ 码形式存储,因而区码形式存储,因而区分大小写。分大小写。
字符型
• 常用操作方法:常用操作方法:–建立:常用函数有建立:常用函数有 charchar 、、 int2strint2str 、、 num2strnum2str 等。等。–连接:连接:
•水平连接通过函数水平连接通过函数 strcatstrcat 或在中括号内用逗号或在中括号内用逗号连接;连接;
•垂直连接通过函数垂直连接通过函数 strvcatstrvcat 或在中括号内用分号或在中括号内用分号连接。连接。
–比较:常用函数比较:常用函数 strcmp,strcmp, 相同则返回相同则返回 11 ,否则为,否则为 00 。。–查找:常用函数查找:常用函数 findstrfindstr 。。
结构型
• 结构的建立和访问方法:–直接建立结构和各个域,同时给各域赋值,结构和域之间用点“.”连接。同样,访问结构的各个域时,其格式为:
结构名.域名• 用函数 struct 建立结构,其用法为: s=struct(‘field1’,values1,‘field2’,values2,┅)
例 1
• s = struct('type',{'big', 'little'},'color','red’, s = struct('type',{'big', 'little'},'color','red’, ‘x',{3 1})‘x',{3 1})
• 1×2 struct1×2 struct•Field values1 values2•Type big little•Color red red•X 3 1
• s(1).type; s(2).type • s(1).color; s(2).color • s(1).x; s(2).x
矩阵的 MATLAB 表示
• 直接输入直接输入 >>A=[1 2, 3; 4 5 6;7, 8 9]>>A=[1 2, 3; 4 5 6;7, 8 9]
• 冒号操作符冒号操作符 >>a=0:1:10>>a=0:1:10 >>a=linspace(0,1,10)>>a=linspace(0,1,10) >>a=logspace(1,2,10)>>a=logspace(1,2,10)
MATLAB 下矩阵的运算
矩阵的代数运算矩阵的代数运算• 转置 转置 B=A’B=A’• 加减乘 加减乘 A+B A-B A*BA+B A-B A*B• 左除 左除 A\B A\B 即即 AX=BAX=B 的解的解 X=AX=A-1-1BB• 右除 右除 A/B A/B 即即 XB=AXB=A 的解的解 X=ABX=AB-1-1• 翻转 翻转 fliplr flipud rot90fliplr flipud rot90• 乘方 乘方 A^BA^B• 点运算 点运算 A.*B A./B A.\B A.^B A.’A.*B A./B A.\B A.^B A.’• 函数函数
矩阵的逻辑运算
• 运算符– & (与 ) |( 或 ) ~(非 )
• 结果是一个 0-1 矩阵。当逻辑表达式的值为真时,赋值 1,否则为 0
• 逻辑函数– all :当某列的元素都为真时,返回值为 1,否则返回0。最终运算结果为一个 0-1 行向量
– any :当向量中至少有一个元素为真时,返回值为 1,否则返回 0。最终运算结果为一个 0-1 行向量
– find :用于查找向量中的真元素的下标,返回由所有真元素下标构成的列向量。
矩阵的比较关系
• 在在 MATLABMATLAB 里共有六个关系运算符里共有六个关系运算符< < 小于 小于 > > 大于 大于 <= <= 小于等于小于等于 >=>= 大于等于大于等于 == == 等于等于 ~=~= 不等于不等于
• 关系运算符将生成一个 0-1 矩阵,当运算数相应元素为真时,对应位置上生成 1,否则为 0。
矩阵元素的数据变换
• floor(A) floor(A) 向-∞取整 向-∞取整 • ceil(A) ceil(A) 向+∞取整 向+∞取整 • round(A) round(A) 四舍五入取整四舍五入取整• fix(A) fix(A) 按离按离 00近的方向取整近的方向取整
下标操作
• 矩阵下标(按列优先排列)矩阵下标(按列优先排列)• 用两个下标来表示。第用两个下标来表示。第 ii 行行 jj列的元素用列的元素用 A(i,j)A(i,j)
来表示来表示• 用一个下标来表示。对于矩阵按列操作,可用单用一个下标来表示。对于矩阵按列操作,可用单
下标引用下标引用 A(i) A(i) 。。• 在下标的表达式中使用冒号表示矩阵的一部分。 在下标的表达式中使用冒号表示矩阵的一部分。 • 下标引用从序号下标引用从序号 11 开始。 开始。
下标操作
A= 1 2 3 A= 1 2 3
4 5 64 5 6
7 8 97 8 9
>>A(4)+A(8)>>A(4)+A(8)
行列删除
• >>B=[1 2 3;4 5 6; 7 8 9];>>B=[1 2 3;4 5 6; 7 8 9]; >>B(2,: )=[]>>B(2,: )=[] >>B=>>B= 1 2 31 2 3 7 8 97 8 9
矩阵的尺寸
为了判断矩阵的尺寸,为了判断矩阵的尺寸, MatlabMatlab 提供了以下函数:提供了以下函数:• [m,n]=size(A)[m,n]=size(A) %%返回矩阵的行数返回矩阵的行数 mm 和列和列
数数 nn• M=size(A)M=size(A) %%在矩阵在矩阵 MM 中返回矩阵的行数、中返回矩阵的行数、 列数列数• len=length(A)len=length(A) %%返回矩阵返回矩阵 AA 行数和列数行数和列数
中的中的 最大值最大值
特殊矩阵
• 单位矩阵– eye(n) % 生成 n维单位阵– eye(m,n) % 生成 m×n 的单位阵
– eye([m,n]) % 生成 m×n 的单位阵
– eye(size(A)) % 生成与 A 矩阵同样大
小的单位矩阵
特殊矩阵
• 全 1 矩阵– ones(n) ones(m,n) ones([m,n]) ones(size(A))
• 全零矩阵– zeros(n) zeros(m,n) zeros([m,n]) zeros(size
(A))• 随机矩阵
– rand(n) rand(m,n) rand([m,n]) rand(size(A))– 生成的随机矩阵的各个元素值在 0和 1之间。
• 对角阵– diag(n) 对角阵
• 魔术矩阵– magic(n)– 魔术矩阵的所有行元素和、列元素和、对角线元素和均相等
程序控制语句
• 循环语句MATLAB 中的循环语句包括 for 循环和 while 循环两种类型。 for 循环for 循环的基本格式为:
for 循环变量 = 起始值:步长:终止值循环体
end 步长的缺省值是 1 。步长可以在正实数或负实数范围内
任意指定,对于正数,循环变量的值大于终止值时,循环结束;对于负数,循环变量的值小于终止值时,循环结束。
程序控制语句
whilewhile 循环循环
whilewhile 循环的基本格式为:循环的基本格式为:while while 表达式表达式
循环体循环体endend
若表达式为真,则执行循环体的内容,执行后再判断若表达式为真,则执行循环体的内容,执行后再判断表达式是否为真,若为假则跳出循环体,向下继续执行,表达式是否为真,若为假则跳出循环体,向下继续执行,否则继续执行循环体。 否则继续执行循环体。
• break :从循环体中跳出,并使循环结束
程序控制语句
• if - else - elseif 语句 if 格式:
if 逻辑表达式执行语句
end 当逻辑表达式的值为真,则执行该结构中的执行语句内容,执行
完后向下继续执行,若逻辑表达式的值为假,跳过结构中的执行语句继续向下执行。
程序控制语句
if-else 格式if 逻辑表达式
执行语句 1else
执行语句 2end
如果逻辑表达式的值为真,则执行语句 1 ,然后跳过语句 2 向下执行;若逻辑表达式的值为假,则跳过执行语句 1 而执行语句 2,然后向下执行。
程序控制语句
if-elseif 格式if 逻辑表达式 1执行语句 1elseif 逻辑表达式 2
执行语句 2……
elseif 逻辑表达式 n执行语句 n
else执行语句 el
end 如果逻辑表达式的值为真,则执行语句 1 ,若逻
辑表达式的值为假,则判断逻辑表达式 2的值,若为真,则执行语句 2,否则向下执行 ,若所有表达式均为假,执行语句 el 。
程序控制语句
• switch 语句 switch 语句的格式为: switch 表达式(标量或字符串)
case 值 1语句 1
case 值 2语句 2┅
case 值 n语句 n
otherwise语句 ow
end 表达式的值和哪种情况( case )的值相同,就执行哪种情况中的语句,如果
都不同,则执行 otherwise 中的语句。
3.5 MATLAB 程序编写及调试
MATLBAMATLBA 程序设计基本原则:程序设计基本原则:• %后面的内容是程序的注解,要善于运用注解使%后面的内容是程序的注解,要善于运用注解使程序更具可读性。程序更具可读性。
• 养成在主程序开头用养成在主程序开头用 clearclear 指令清除变量的习惯,指令清除变量的习惯,以消除工作空间中其他变量对程序运行的影响。以消除工作空间中其他变量对程序运行的影响。但注意在子程序中不要用但注意在子程序中不要用 clearclear 。。
• 参数值要集中放在程序的开始部分,以便维护。参数值要集中放在程序的开始部分,以便维护。要充分利用要充分利用 MATLABMATLAB 工具箱提供的指令来执行所要工具箱提供的指令来执行所要进行的运算,在语句行之后输入分号使其及中间进行的运算,在语句行之后输入分号使其及中间结果不在屏幕上显示,以提高执行速度。结果不在屏幕上显示,以提高执行速度。
MATLBA 程序设计基本原则
• 程序尽量模块化,也就是采用主程序调用子程序程序尽量模块化,也就是采用主程序调用子程序的方法,将所有子程序合并在一起来执行全部的的方法,将所有子程序合并在一起来执行全部的操作。操作。
• 充分利用充分利用 DebuggerDebugger 来进行程序的调试(设置断点、来进行程序的调试(设置断点、单步执行、连续执行)单步执行、连续执行)
• 设置好设置好 MATLABMATLAB 的工作路径,以便程序运行。的工作路径,以便程序运行。
MATLAB 程序的基本组成结构
• %说明%说明• 清除命令:清除清除命令:清除 workspaceworkspace 中的变量和图形(中的变量和图形( clear,closclear,clos
ee ))• 定义变量:包括全局变量的声明及参数值的设定定义变量:包括全局变量的声明及参数值的设定• 逐行执行命令:指逐行执行命令:指 MATLABMATLAB提供的运算指令或工具箱提供的运算指令或工具箱• … … … … … … 提供的专用命令提供的专用命令• 控制循环 :包含控制循环 :包含 for,if then,switch,whfor,if then,switch,wh
ileile 等语句 等语句 • 逐行执行命令逐行执行命令• … … …… … …• endend• 绘图命令:将运算结果绘制出来绘图命令:将运算结果绘制出来
M 文件的编辑及 MATLAB 工作路径的设置
• 进入进入 MATLABMATLAB 的的 Editor/DebuggerEditor/Debugger 窗口来编辑程序窗口来编辑程序
• 在运行程序之前,必须设置好在运行程序之前,必须设置好 MATLABMATLAB 的工作路径,的工作路径,使得所要运行的程序及运行程序所需要的其他文使得所要运行的程序及运行程序所需要的其他文件处在当前目录之下,只有这样,才可以使程序件处在当前目录之下,只有这样,才可以使程序得以正常运行。否则可能导致无法读取某些系统得以正常运行。否则可能导致无法读取某些系统文件或数据,从而程序无法执行。文件或数据,从而程序无法执行。
MATLAB 程序类型
• 脚本文件脚本文件• 函数文件函数文件
function y=mean(x)% MEAN Average or mean Value% For vectors,Mean(x) is the mean value of X% For matrices, Mean(x) is a row vector containing% the mean value of each column[m,n]=size(x)if m==1 m=n;endy=sum(x)/m;
函数定义行
H1行
函数帮助文件
函数体
3.6 图形绘制
• 图形绘制图形绘制• 图形标注图形标注• 图形控制图形控制
plot ( x,y )
plot ( y )
plot ( x1,y1,option1,x2,y2,option2,… )
plot 控制
• 功能:在调用函数功能:在调用函数 plotplot 时,可以指定线型,颜色,时,可以指定线型,颜色,和数据点的图标。和数据点的图标。
• 格式:格式: plotplot (( xx ,, yy,‘,‘ color_linestyle_markcolor_linestyle_marker’er’))
• 说明:参数说明:参数 color_linestyle_marker color_linestyle_marker 为一个字为一个字符串,由颜色、线型、数据点的图标组成。 符串,由颜色、线型、数据点的图标组成。
线性和颜色字符定义表
字符定义 线型 字符定义 线型
- 实线(默认) -- 虚线
: 点划线 -. 点连线
none 无线
字符定义 颜色 字符定义 颜色
y yellow (黄) m magenta ( 洋 红)
c cyan (青) r red (红)
g green (绿) b blue (兰)默认
w white (白) k black (黑)
3.6 图形绘制
• 图形绘制图形绘制• 图形标注图形标注• 图形控制图形控制
text(x,y,’字符串’ ) gtext(‘字符串’ ) title(‘字符串’ ) xlabel(‘字符串’ ), ylabel(‘字符串’)
3.6 图形绘制
• 图形绘制图形绘制• 图形标注图形标注• 图形控制图形控制
figure ( 1 ); figure ( 2 );…; figure(n)grid on ; grid off
hold on ; hold off
axis ( [xmin xmax ymin ymax] )subplot ( mnk )semilogx ; semilogy
绘图一般步骤
• 准备绘图需要的数据;准备绘图需要的数据;• 指定绘图的窗口或者区域;指定绘图的窗口或者区域;• 调用基本绘图命令;调用基本绘图命令;• 选择线型、颜色、数据点形状;选择线型、颜色、数据点形状;• 坐标轴控制,包括显示范围、刻度线、比例、网坐标轴控制,包括显示范围、刻度线、比例、网
格线;格线;• 标注控制,包括坐标轴名称、标题、相应文本等。标注控制,包括坐标轴名称、标题、相应文本等。
3.7 数据处理
矩阵分解矩阵分解• 三角分解三角分解
• 特征值分解特征值分解
[L,U]=lu(A) % 求矩阵 A 的 LU 分解X = inv(A) % 求矩阵 A 的逆矩阵d=det(A) % 求矩阵 A 的行列式
d = eig ( A );[V , D] = eig ( A );[V , D] = eig ( A , 'nobalance')
3.7 数据处理
• 多项式多项式• 多项式创建多项式创建
• 多项式常用函数多项式常用函数
直接输入法 例如: P=[1,2,3,4] poly(A) %创建方阵 A 的特征多项式 poly(a) %如果 a 为向量 [bn bn-1…b1 b0] ,则创建 (x-b0 )( x-b1) … (x-bn-1 )(x- bn )生成的多项式的系数向量
roots ( ) %求多项式的根 p=poly(A) %求矩阵的特征多项式 polyval( p,x) %求当多项式 p 的参数为某个特定值 x 时的多项式
的值polyvalm(p,A) % 和 polyval 作用相同,输入参数值也可为方阵 A
3.7 数据处理
• 卷积和解卷积卷积和解卷积
• 导数导数
c=conv(A,B) %卷积函数 ,多项式乘法函数[Q,R]=deconv (A,B) %解卷积函数,多项式除法函数
Pd= polyder(P) %求多项式 P 的导数 Pm= polyder(P1,P2) %求多项式 P1 和多项式 P2乘积的导数 [Q,D]=polyder(P1,P2) %求多项式 P1 除以多项式 P2商的导数
3.7 数据处理
• 多项式拟合多项式拟合
从最小二乘的意义上, polyfit 函数将拟合出所给数据的多项式系数,其调用格式为:
p=polyfit(x,y,n)其中, x 和 y 为已知数据的横坐标和纵坐标向量, n为多项式的次数。
常微分方程数值解
• [t, x]=ode23(‘xfun’, [t0, tf] x0, tol, trace)[t, x]=ode23(‘xfun’, [t0, tf] x0, tol, trace)• [t, x]=ode23(‘xfun’, [t0, tf] x0, tol, trace)[t, x]=ode23(‘xfun’, [t0, tf] x0, tol, trace)
范得蒙方程求解
22
2(1 ) 0
d x dxx xdtdt
求解 M- 文件
• function yp=vdp(t,x)function yp=vdp(t,x) yp(1)=x(2);yp(1)=x(2); yp(2)=2*(1-x(1)^2)*x(2)-x(1)yp(2)=2*(1-x(1)^2)*x(2)-x(1) ;; %%令令 u=2 u=2
• 在命令行求解这个方程:在命令行求解这个方程: [t,x]=ode45(‘vdp’,0,20,[1 ;1]);[t,x]=ode45(‘vdp’,0,20,[1 ;1]); plot(t,x(:,1),t,x(:,2)); plot(t,x(:,1),t,x(:,2)); %% 画出画出 xx 和和 dx/dtdx/dt 的时域波形 的时域波形
Simulink 的操作
数值仿真
2
10
0.1s s( )D s( )x t( )u t
x
y
1c-
1c- . .
系统分析
• 已知某控制系统的动态结构图如下图所示,试利已知某控制系统的动态结构图如下图所示,试利用用 MATLAB/SimulinkMATLAB/Simulink 工具分析工具分析 CC 值与输入幅值对值与输入幅值对系统输出性能的影响。系统输出性能的影响。 0.8 1
( )s
D ss
模型
系统分析
M- 文件
plot (time, output) % 绘制曲线
grid on % 显示格栅线
xlabel (‘time/s’) % 标记横坐标轴
ylabel (‘output’) % 标记纵坐标轴
title(‘Simulation result’) % 加图名
plot (time, output) % 绘制曲线
grid on % 显示格栅线
xlabel (‘time/s’) % 标记横坐标轴
ylabel (‘output’) % 标记纵坐标轴
title(‘Simulation result’) % 加图名
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 50
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
time/s
outp
ut
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 50
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
time/s
outp
ut
c1=2c2=1c3=0.5
(b) 不同的 C1(b) 不同的 C1a) C1=1 时a) C1=1 时
磁滞回环系统的阶跃响应磁滞回环系统的阶跃响应
分析结果
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 50
0.5
1
1.5
2
2.5
3
3.5
4
4.5
time/s
outp
ut1幅 值 为3幅 值 为
图 3-16 输入幅值改变后仿真结果图 3-16 输入幅值改变后仿真结果
本章小结
• MATLAB 是居于矩阵的工具包,注意应用 MATLAB 时思路的转换。
• 使用 MATLAB 编写算法时注意最好不超过 50 行,且尽量少用 for 、 while 的语句。
• MATLAB 里有充分的资源用来分析数据,在应用的同时注意数据分析的基本原理。
• MATLA 有丰富的工具箱可以对许多的系统进行建模、仿真、 分析。在使用 smulink 时注意合理选择步长。
• MATLAB 有许多的“帮助”资源,对学习和掌握MATLAB很重要,应该在自学中广为利用。