590 likes | 783 Views
第三章 MATLAB 程序设计基础. MATLAB 工作界面. 标题栏 菜单栏 工具栏 工作空间、命令窗、编辑窗. 当前路径. 工作空间. 命令窗口. 历史命令. MATLAB 工作界面. 设置断点. 取消断点. 进入函数. 跳出函数. 单步运行. 退出调试. 继续运行. MATLAB 编辑窗口. MATLAB 快捷键. ↑ 回调上一行命令 ↓ 回调下一行命令 ← 左移一个字符 → 右移一个字符 Delet Backspace 删除字符 Ctrl+C 中断 MATLAB 任务. 通用命令. help clear clc
E N D
MATLAB工作界面 • 标题栏 • 菜单栏 • 工具栏 • 工作空间、命令窗、编辑窗
当前路径 工作空间 命令窗口 历史命令 MATLAB工作界面
设置断点 取消断点 进入函数 跳出函数 单步运行 退出调试 继续运行 MATLAB编辑窗口
MATLAB快捷键 • ↑ 回调上一行命令 • ↓ 回调下一行命令 • ← 左移一个字符 • → 右移一个字符 • Delet Backspace 删除字符 • Ctrl+C 中断MATLAB任务
通用命令 • help • clear clc • What • who, whos • load save
3.1 MATALB语言的数据结构 • 变量命名规则 • 必须以字母开头; • 可以由字母、数字和下划线混合组成; • 变量长度应不大于31个; • 字母区分大小写。 • 变量的定义 • 特殊变量
基本语句 • MATLAB语言的基本语句结构为: • 变量名列表=表达式 • 等号左边的变量名列表为MATLAB语句的返回值,若一次返回多个结果,则变量列表用[ ]括起来,各变量间用逗号分隔; • 等号右边为表达式,可以是矩阵运算或函数调用,可以由分号(;)、逗号(,)或回车结束。
数据类型 • 在MATLAB里共有六种数据类型,每一种类型可以是一维、二维和多维的。 • 双精度型(double) • 字符型(char) • 稀疏型(sparse) • 存储型(storage) • 细胞型(cell) • 结构型(struct)
字符型 • 基本规则: • 所有字符串都用单引号括起来; • 字符串中的每一个字符都是该字符串变量中的一个元素; • 字符串中的字符以ASCⅡ码形式存储,因而区分大小写。
字符型 • 常用操作方法: • 建立:常用函数有char、int2str、num2str等。 • 连接: • 水平连接通过函数strcat或在中括号内用逗号连接; • 垂直连接通过函数strvcat或在中括号内用分号连接。 • 比较:常用函数strcmp,相同则返回1,否则为0。 • 查找:常用函数findstr。
结构型 • 结构的建立和访问方法: • 直接建立结构和各个域,同时给各域赋值,结构和域之间用点“.”连接。同样,访问结构的各个域时,其格式为: 结构名.域名 • 用函数struct建立结构,其用法为: s=struct(‘field1’,values1,‘field2’,values2,┅)
例1 • s = struct('type',{'big', 'little'},'color','red’, ‘x',{3 1}) • 1×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=0:1:10 >>a=linspace(0,1,10) >>a=logspace(1,2,10)
MATLAB下矩阵的运算 矩阵的代数运算 • 转置 B=A’ • 加减乘 A+B A-B A*B • 左除 A\B 即AX=B的解X=A-1B • 右除 A/B 即XB=A的解X=AB-1 • 翻转 fliplr flipud rot90 • 乘方 A^B • 点运算 A.*B A./B A.\B A.^B A.’ • 函数
矩阵的逻辑运算 • 运算符 • & (与) |(或) ~(非) • 结果是一个0-1矩阵。当逻辑表达式的值为真时,赋值1,否则为0 • 逻辑函数 • all :当某列的元素都为真时,返回值为1,否则返回0。最终运算结果为一个0-1行向量 • any :当向量中至少有一个元素为真时,返回值为1,否则返回0。最终运算结果为一个0-1行向量 • find:用于查找向量中的真元素的下标,返回由所有真元素下标构成的列向量。
矩阵的比较关系 • 在MATLAB里共有六个关系运算符 < 小于 > 大于 <= 小于等于 >=大于等于 == 等于 ~=不等于 • 关系运算符将生成一个0-1矩阵,当运算数相应元素为真时,对应位置上生成1,否则为0。
矩阵元素的数据变换 • floor(A) 向-∞取整 • ceil(A) 向+∞取整 • round(A) 四舍五入取整 • fix(A) 按离0近的方向取整
下标操作 • 矩阵下标(按列优先排列) • 用两个下标来表示。第i行j列的元素用A(i,j)来表示 • 用一个下标来表示。对于矩阵按列操作,可用单下标引用A(i) 。 • 在下标的表达式中使用冒号表示矩阵的一部分。 • 下标引用从序号1开始。
下标操作 A= 1 2 3 4 5 6 7 8 9 >>A(4)+A(8)
行列删除 • >>B=[1 2 3;4 5 6; 7 8 9]; >>B(2,: )=[] >>B= 1 2 3 7 8 9
矩阵的尺寸 为了判断矩阵的尺寸,Matlab提供了以下函数: • [m,n]=size(A) %返回矩阵的行数m和列数n • M=size(A) %在矩阵M中返回矩阵的行数、 列数 • len=length(A) %返回矩阵A行数和列数中的 最大值
特殊矩阵 • 单位矩阵 • 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。步长可以在正实数或负实数范围内任意指定,对于正数,循环变量的值大于终止值时,循环结束;对于负数,循环变量的值小于终止值时,循环结束。
程序控制语句 • while循环 while循环的基本格式为: while 表达式 循环体 end 若表达式为真,则执行循环体的内容,执行后再判断表达式是否为真,若为假则跳出循环体,向下继续执行,否则继续执行循环体。 • break:从循环体中跳出,并使循环结束
程序控制语句 • if-else-elseif语句 • if格式: if 逻辑表达式 执行语句 end 当逻辑表达式的值为真,则执行该结构中的执行语句内容,执行完后向下继续执行,若逻辑表达式的值为假,跳过结构中的执行语句继续向下执行。
程序控制语句 • if-else格式 if 逻辑表达式 执行语句1 else 执行语句2 end 如果逻辑表达式的值为真,则执行语句1,然后跳过语句2向下执行;若逻辑表达式的值为假,则跳过执行语句1而执行语句2,然后向下执行。
程序控制语句 • if-elseif格式 if 逻辑表达式1 执行语句1 elseif 逻辑表达式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程序编写及调试 MATLBA程序设计基本原则: • %后面的内容是程序的注解,要善于运用注解使程序更具可读性。 • 养成在主程序开头用clear指令清除变量的习惯,以消除工作空间中其他变量对程序运行的影响。但注意在子程序中不要用clear。 • 参数值要集中放在程序的开始部分,以便维护。要充分利用MATLAB工具箱提供的指令来执行所要进行的运算,在语句行之后输入分号使其及中间结果不在屏幕上显示,以提高执行速度。
MATLBA程序设计基本原则 • 程序尽量模块化,也就是采用主程序调用子程序的方法,将所有子程序合并在一起来执行全部的操作。 • 充分利用Debugger来进行程序的调试(设置断点、单步执行、连续执行) • 设置好MATLAB的工作路径,以便程序运行。
MATLAB程序的基本组成结构 • %说明 • 清除命令:清除workspace中的变量和图形(clear,close) • 定义变量:包括全局变量的声明及参数值的设定 • 逐行执行命令:指MATLAB提供的运算指令或工具箱 • ………提供的专用命令 • 控制循环 :包含for,if then,switch,while等语句 • 逐行执行命令 • ……… • end • 绘图命令:将运算结果绘制出来
M文件的编辑及MATLAB工作路径的设置 • 进入MATLAB的Editor/Debugger窗口来编辑程序 • 在运行程序之前,必须设置好MATLAB的工作路径,使得所要运行的程序及运行程序所需要的其他文件处在当前目录之下,只有这样,才可以使程序得以正常运行。否则可能导致无法读取某些系统文件或数据,从而程序无法执行。
函数定义行 H1行 函数帮助文件 函数体 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; end y=sum(x)/m;
3.6 图形绘制 • 图形绘制 • 图形标注 • 图形控制 plot(y) plot(x,y) plot(x1,y1,option1,x2,y2,option2,…)
plot控制 • 功能:在调用函数plot时,可以指定线型,颜色,和数据点的图标。 • 格式:plot(x,y,‘color_linestyle_marker’) • 说明:参数color_linestyle_marker 为一个字符串,由颜色、线型、数据点的图标组成。
字符定义 字符定义 颜色 线型 字符定义 字符定义 颜色 线型 y - yellow(黄) 实线(默认) m -- magenta(洋红) 虚线 : c cyan(青) 点划线 -. r 点连线 red(红) g none 无线 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)
求解M-文件 • function yp=vdp(t,x) yp(1)=x(2); yp(2)=2*(1-x(1)^2)*x(2)-x(1);%令u=2 • 在命令行求解这个方程: [t,x]=ode45(‘vdp’,0,20,[1 ;1]); plot(t,x(:,1),t,x(:,2)); %画出x和dx/dt的时域波形