资源描述
MATLAB 程序设计语言,Email: nzhang532,课程安排,Chapter1 Matlab 系统概述 Chapter2 Matlab 基本操作 Chapter3 Matlab 图形系统 Chapter4 Matlab 程序设计 Chapter5 Matlab 基本应用领域 Chapter6 数据阵列类型与结构 Chapter7 字符串处理,上机安排,上机日期 时段 机房 2011-3-19 8:00 12:00 E楼205 2011-4-02 8:00 12:00 E楼203 2011-4-09 8:00 12:00 E楼205 2011-4-16 14:00 18:00 E楼208 2011-5-14 14:00 18:00 E楼203,MATLAB发展,Matlab的首创者是在数值线性代数领域颇有影响的Cleve Moler博士 Moler博士等一批数学家和软件家组成了Mathworks软件公司,专门从事Matlab的扩展与改进 1982年推出了第一个版本 现在每半年出一新版本201xa,201xb ,MATLAB简介,MATLAB名字是由MATrix和LABoratory两个词的前三个字母组合而成的。 集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便的、界面友好的用户环境。被誉为“巨人肩上的工具”。 使用Matlab编程运算与人进行科学计算的思路和表达方式完全一致,用Matlab编写程序犹如在演算纸上排列出公式与求解问题,所以又被称为演算纸式科学算法语言。在这个环境下,对所要求解的问题,用户只需简单地列出数学表达式,其结果便以数值或图形方式显示出来。,MATLAB自问世以来,就是以数值计算称雄。 MATLAB进行数值计算的基本单位是复数数组(或称阵列),这使得MATLAB高度“向量化”。 它不需定义数组的维数,并给出矩阵函数、特殊矩阵专门的库函数,使之在求解诸如信号处理、建模、系统识别、控制、优化等领域的问题时,显得大为简捷、高效、方便,这是其它高级语言所不能比拟的。,MATLAB简介,MATLAB特点,在Matlab中,以复数矩阵作为基本编程单元,使矩阵操作变得轻而易举 Matlab语句书写简单 Matlab语句功能强大 Matlab系统具有丰富的图形功能 Matlab提供许多面向应用问题求解的工具箱函数 Matlab易于扩展,移植,Chapter1 Matlab系统概述,Matlab系统组成 Matlab的重要部件 Matlab搜索路径 Matlab集成环境 Matlab通用命令,Matlab系统组成,MATLAB系统由8个主要的部分构成: MATLAB的开发环境 MATLAB的数学函数库 编程与数据类型 文件I/O 图形处理 三维可视化 创建图形用户界面 外部接口,Simulink,Simulink是一种强有力的仿真工具,它能让使用者在图形方式下以最小的代价来模拟真实动态系统的运行。Simulink准备有数百种预定义系统环节模型,最先进有效的积分算法和直观的图示化工具。依托Simulink强健的仿真能力,用户可在原型机制造之前就可建立系统的模型,评估设计并修补瑕疵。 Simulink 作为一种图形化的仿真工具,可用于对动态系统建模和控制规律的研究制定。由于支持线性、非线性、连续、离散、多变量和混合式系统结构,Simulink几乎可分析任何一种类型的真实动态系统。,工具箱(Toolboxes),工具箱是为了解答特别种类的问题扩展MATLAB环境的MATLAB函数的集合。在工具箱中,Matlab提供了许多实用的函数,它给各个领域应用人员带来了方便。 Control system Communications Financial Image Processing Neural Network Signal Processing Wavelet,Matlab集成环境,运行MATLAB的可执行文件,自动创建MATLAB指令窗口(Command Window)。这种指令窗如图所示:命令窗口的是输入命令和输出结果的窗口,在这里输入的命令会立即得到执行,并输出。 Matlab功能选单共有File, Edit, Debug, Desktop, Window, Help六个主要功能,每个之下各又有下一层的功能。 初学者,可以在指令窗键入demo,这可是学习的好帮手。 一旦发现指令不知如何使用时,help, doc命令将告诉你使用。,Matlab的集成环境就是Matlab的编程环境,在这一环境中提供了许多编写、调试和执行Matlab程序的便利工具。,Matlab集成环境,在MATLAB下进行基本数学运算,只需将运算式直接打入提示号()之后,并按入Enter键即可。 MATLAB可以将计算结果以不同精确度的数字格式显示,我们可以在指令视窗上的功能选单上的Flie下选Preferences,更改 Numeric Format的属性,或者直接在指令窗口中通过format命令加以控制。 MATLAB利用了二个游标键可以将所使用的指令调回来重复使用。按下则前一次指令重新出现,之后再 按Enter键,即再执行前一次的指令。而键的功用则是往后执行指令。 Ctrl-C(即同时按Ctrl及C二个键)可以用来中止执行中的MATLAB的工作。,Matlab集成环境,编辑M文件 将Matlab语句按一定的顺序结合在一起,就得到了Matlab程序,其文件名的后缀为m,故称为M文件。 Matlab提供了M文件的专门编辑/调试器。 启动编辑器方式(2种),Matlab集成环境,Matlab的.m文件保存的命名规则: 1.文件名为字母、数字和下划线组成的,第一个字符必须是字母 2.文件名不要取为matlab的一个固有函数名,m文件名的命名尽量不要是简单的英文单词。原因是简单的单词命名容易与matlab内部函数名同名,结果出现一些莫名其妙的错误。 3.文件存储路径一定要为英文。 4.中间不能有空格和标点符号,工作目录的建立和设置,为方便管理,每个用户在使用Matlab前,尽量为自己建立一个专门的工作目录,即“用户目录”,用来存放自己创建的应用文件。 例如,首先打开资源管理器,在E驱动器下可以根据自己的喜好建立一个新文件夹,但应注意:该文件夹必须以英文开头,文件夹名字中可以包括字母、数字和下划线,不要使用其他的字符,更不要单纯使用数字或者中文命名,有时在运行matlab中一些莫名其妙的错误可能就是不规范的命名引起的,这与matlab中变量和文件名的命名原则是一致的。 尽管MATLABwork允许用户存放用户文件,但最好把它仅作为临时工作目录来使用 为了运行方便,在开始工作前把用户定义的目录设置为当前目录,方法是可直接在MATLAB命令窗口上方通过目录设置来实现,Matlab搜索路径,当用户输入一个标识符(例如value)时,Matlab按下列步骤进行处理: (1)检查value是否为变量 (2)检查value是否为内部函数 (3)在当前工作目录下是否存在value.m 文件 (4)在Matlab搜索路径上是否存在value.m文件 如果在搜索路径上存在多个value.m文件,则只执行所找到的第一个value.m文件,如果找不到,则给出出错信息,Matlab通用命令,管理命令和函数 管理变量和工作空间 控制命令窗口 使用文件和工作环境 启动和推出Matlab,管理命令和函数,help Matlab函数和M文件在线帮助 version 版本号 ver 显示Mathworks产品的版本信息 path 控制Matlab的目录搜索路径 addpath 将目录添加到Matlab的搜索路径上 rmpath 从Matlab的搜索路径上删除目录 whatsnew 显示出Matlab工具箱的Readme文件 what 直接列出当前目录下的M文件、MAT文件和MEX 文件 which 函数和文件定位 type 列出文件 doc 在help浏览器窗口中打开帮助信息 lookfor 从所有帮助目录中查找关键字 lasterr 显示上一个出错信息 error 显示出错信息 profile 测量并显示出M文件执行的效率,管理变量和工作空间,who, whos 列出内存中的变量 disp 显示文本或阵列 clear 清除工作空间中的变量 mlock 防止M文件被删除 munlock 允许删除M文件 size 求阵列中维大小 length 求阵列或向量长度,等效于max(size(X), save 将工作空间变量保存到磁盘 load 从磁盘中恢复变量 pack 释放工作空间内存,控制命令窗口,echo 执行过程中显示M文件 format 控制输出显示格式 more 控制命令窗口的分页显示,使用文件和工作环境,diary 在磁盘文件中保存任务 dir 列出目录下的文件 cd 改变工作目录 mkdir 建立目录 copyfile 复制文件 delete 删除文件和图形对象 edit 编辑M文件 inmem 获得内存中的函数 matlabroot 获得Matlab安装目录 fullfile 从部分中构造文件全名 fileparts 获得文件的组成部分 tempdir 返回系统临时工作目录名 tempname 产生临时文件的唯一文件名,启动和退出Matlab命令,matlabrc 启动Matlab的M文件 startup 启动Matlab的M文件 quit 终止(结束)Matlab,Chapter2 Matlab 基本操作,表达式 矩阵基础 操作符和特殊字符 基本数学函数 逻辑函数,表达式,变量 数值 函数 操作符,变量,变量名可以包含下划线、字母、数字,但中间不能有空格、标点 变量名最好是描述性的,有意义的 例如,day, month, year, change_rate Matlab区分大小写,例如 NAME, name 变量的第一个字符必须为英文字母,而且不能超过31个字符。 变量不需要预先定义,固定变量和常数,ans 预设的计算结果的变量名 eps MATLAB定义的正的极小值=2.2204e-16 pi 内建的值 Inf 正无穷大 NaN 表示不定值 i 或 j 虚数单位 nargin 函数输入参数个数 nargout 函数输出参数个数 realmax 最大的正浮点数 realmin 最小的正浮点数,数值,十进制:3,8,-39 科学计数法:1.6e-21,-3.24e20 复数:-4+3.6j,7803.2e2i 浮点数:范围在10-308 10308 二进制数、十六进制数均当作字符串输入,通过字符串函数bin2dec,hex2dec将其转换为十进制数,函数,函数分类:内部函数、Toolboxes中实用函数、用户自定义函数。 函数用法:1)嵌套:x=sqrt(log(z) 2)多输入: theta=atah2(y,x) 3)多输出:y,i=max(x),操作符,算术运算:+, -, /, (见P29,P46) 关系运算 逻辑运算,表达式,将变量、数值、函数用操作符连接起来,就构成了表达式。 MATLAB书写表达式的规则与“手写算式”差不多相同。 如果一个指令过长可以在结尾加上.(代表此行指令与下一行连续),例如 3*. 6 ans = 18,表达式示例,a=(1+sqrt(10)/2; b=abs(3+5i); c=sqrt(bessell(4/3), a-i); d=sin(exp(-2.3); e=pi*d,矩阵基础,矩阵的输入 矩阵的存储 矩阵的操作,矩阵输入,输入元素列表 从外部数据文件中读取矩阵 利用Matlab内部函数与工具箱函数产生矩阵 用户自己编写m文件产生矩阵,直接输入矩阵,输入元素列表 a=1 2 3;4 5 6;7 8 9; b=1:3,4:6,7:9; 矩阵整个元素列表用方括号扩起来 矩阵行与行之间用分号或回车间隔 矩阵行中的每个元素之间以空格或逗号间隔,外部数据文件输入矩阵,load 读取ASCII码的DAT文档 wavread 读取Microsoft的WAV格式的音频文件 imread 从图像文件中读取图像数据 fopen,fread,fclose构成的任意文件的读取,利用Matlab内部函数与工具箱函数产生矩阵(P32),eye 建立单位矩阵 eye(m), eye(m,n) ones 建立全1矩阵 ones(m), ones(m,n), ones(m,n,p) zeros 建立全0矩阵 zeros(m), zeros(m,n),zeros(m,n,p),利用Matlab内部函数与工具箱函数产生矩阵,rand 产生0,1均匀分布的随机数和阵列 rand, rand(m),rand(m,n) 产生一个2*3的-5,5之间均匀分布的随机矩阵 x = 5-10*rand(2,3); 产生一个a,b之间均匀分 布的随机矩阵 x = b + (a-b)*rand(m,n),利用Matlab内部函数与工具箱函数产生矩阵,randn 产生均值为0,方差为1的正态分布的随机数和阵列 randn,randn(m),randn(m,n) 产生一个2*3的均值为3,方差为4的正态分布的随机矩阵 x = 3+sqrt(4)*randn(2,3); 产生一个均值为 mean,方差为variance的m*n的随机矩阵 x = mean + sqrt(variance)*randn(m,n);,利用Matlab内部函数与工具箱函数产生矩阵,linspace 产生线性空间向量 y=linspace(a,b) y=linspace(a,b,n) y=linspace(1,5,5) y = 1 2 3 4 5,利用Matlab内部函数与工具箱函数产生矩阵,diag 产生对角阵 a = diag(d,k); d为向量 表示向量d位于矩阵a的第k条对角线上,其他元素为0 当k=0或缺省时,表示d位于主对角上, 当k0时,表示d位于主对角线之上的第k条对角线上 当k0时,表示d位于主对角线之下的第k条对角线上 d=2 -10 8; a= diag(d); a = 2 0 0 0 -10 0 0 0 8,矩阵元素的存储和读取,矩阵存储: 矩阵元素是按列存储的 矩阵读取: 1)只用一个下标来寻址:a(i)表示存储器中的第i个元素 2)用两个下标来寻址:a(i,j)表示矩阵中的第i行第j列的元素 例如: a=1 2 3;10 20 30 a = 1 2 3 10 20 30 a(2) ans = 10 a(2,1) ans = 10,矩阵操作,矩阵的对角化 X=diag(V,k) 当V为向量,则X为矩阵,V构成X的第k条对角线,其他元素为0 当V为矩阵,则X为矩阵V中的第k条对角线上的数据 矩阵重新排列 (1)利用冒号: 给定矩阵A,B=A(:),表示将A中所有元素排列成一维列向量 (2) reshape B=reshape(A,m,n) 矩阵旋转 rot90 B=rot90(A,k) 矩阵左右翻转 fliplr 矩阵上下翻转 flipud 矩阵的下三角阵 tril tril(X,k) 矩阵的上三角阵 triu triu(X,k),矩阵操作,阵列的连接 cat C= cat(dim,A,B); 将矩阵A和B沿着第dim维连接起来,1维表示沿列方向,2表示沿行的方向 矩阵的复制并平铺阵列 repmat B=repmat(A,m,n);,矩阵求和,sum 对矩阵元素按列求和 a = 1 2 3 10 20 30 4 5 6 sum(a) ans =15 27 39,矩阵删除,利用空矩阵删除指定的行或者列 a(2,:)= % 表示删除a的第2行 a = 1 2 3 4 5 6 利用单下标删除单个元素或多个元素,剩余部分变成行向量 % 删除单个元素只有这种方式 a(3)= a = 1 4 5 3 6,操作符和特殊字符(一),算术操作符:+ - * / A+B,A-B: 相同尺寸简单加、减运算; A*B: 线性代数积 A.*B:对应元素相乘 A/B,AB: 矩阵右(左)除 右除A/B相当于A*inv(B) 左除AB 相当于inv(A)*B A./B,A.B:矩阵对应元素右 (左)除 AB:矩阵幂,指数为标量或底数为标量,不可同时为标量 A: 矩阵转置,若A为复数矩阵,则求出共轭转置。 A.:矩阵转置,若A为复数矩阵,也不求共轭。,操作符和特殊字符(二),Kron: Kronecker 张量积: K=kron(X,Y) 冒号: 建立向量、阵列的下标或用于迭代。(P48) j:i:k 初始值为j,步长为i,终值为k A(:,j) 取A的第j列 A(i,:) 取A的第i行 A(:,:) 等效于二维阵列,对矩阵而言,它等同于A A(j:k) 取出A的第j,j+1,j+2,k个元素 A(:,j:k) 取出A的第j列到第k列的数据 A(:,:,k) 取出三维阵列A的第k列 A(:) 将A中的所有元素排列成列向量,操作符和特殊字符(三),逻辑操作符:&,|, 有相应的m文件and,or,not A&B 等效为and(A,B) A|B 等效为or(A,B) A 等效为not(A) XOR:异或操作 C=XOR(A,B)完成阵列A和B对应元素的异或操作 关系操作符:,=,1 语句1 elseif a=1 语句2 else 语句3 end,阵列与矩阵,MATLAB的运算事实上是以阵列 (array) 及矩阵 (matrix) 方式在做运算,而这二者在MATLAB的基本运算性质不同。 矩阵是二维的,它采用线性代数的运算方式,在MATLAB的内部资料结构中,每一个矩阵都是一个以列为主(Column-oriented)的阵列(Array) 矩阵的基本算术操作 + - * / 基本格式 A+B A-B A*B A/B AB A A(A必须是方阵),阵列与矩阵,阵列的运算强调元素对元素的运算 阵列的基本算术操作 + - .* ./ . . . 基本格式 A+B A-B A.*B A./B A.B A. A.,阵列运算的特色,如果a,b各代表二个不同的阵列,a与b 之间的运算是元素对元素的方式,例如 a=a1, a2 an b=b1, b2bn a.*b=a1*b1, a2*b2an*bn a./b=a1/b1, a2/b2an/bn,阵列运算的特色, x = 1:0.1:2; % x 是阵列 x = Columns 1 through 9 1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000 1.8000 Columns 10 through 11 1.9000 2.0000 y = exp(x.2); % exp(x.2) 是阵列运算 y = Columns 1 through 9 2.7183 3.3535 4.2207 5.4195 7.0993 9.4877 12.9358 17.9933 25.5337 Columns 10 through 11 36.9661 54.5982,阵列运算的特色,标量与阵列运算的差别 x=2.0 % x 是一标量 nume = x3 - 2*x2 + x - 6.3; deno = x2 + 0.05*x - 3.14; f = nume/deno =-4.4792 x=1:5; % 注意 x 是一阵列 nume = x.3 - 2*x.2 + x - 6.3; deno = x.2 + 0.05*x - 3.14; f = nume./deno=3.0144 -4.4792 0.9484 2.2741 3.3333,时间和日期(P58),tic,toc:测定程序运行时间(tictest.m) Date,now,clock 可以得到当前的日期信息 Etime,cputime 计算使用时间,CPU时间 Datestr,dateevc Datenum Weekday,eomday calendar,基本数学函数,三角函数 指数和对数函数 复数函数 取整和求余函数(rem、mod) fix 朝零方向取整 floor 朝负无穷大方向取整 ceil 朝正无穷大方向取整 round 朝最近的整数取整(四舍五入) mod 模数(即有符号的除后余数) M=mod(X,Y)=X- Y.*floor(X./Y) rem 除后余数 R=rem(X,Y)=X-Y.*fix(X./Y) sign 符号函数,矩阵中的逻辑函数,all: 测试矩阵或者向量所有元素是否都为非0 all(A) 将A的列当做向量,得到由0,1构成的行向量 all(A,dim) any:测试任意非0 any(A)将A当做列向量,得到由0,1构成的行向量 any(A,dim) find:查找非0元素的值和下标 k=find(x),i,j=find(x),i,j,v=find(x) exist:查找给定变量或文件是否存在 is*: 检测某种状态,*通配符(见81页) isa: 检测给定类的对象 logical: 将数值转换成逻辑值,如何撰写MATLAB程序,我们前面各节所介绍在MATLAB所做的运算,是适合于所要计算的算式不太长或是想以交谈式方式做运算,如 果要计算的算式很长有数十行或是须要一再执行的算式,则那样的方式就行不通了。MATLAB提供了所谓的 M文件的方式,可让使用者自行将指令及算式写成程式然后储存成一个文件,其后缀是m,譬如 test.m,其中的test就是文件名称。要执行 M-file 可以在指令视窗下直接键入该档名如test。,以下的tutest.m档是一个简易绘图程式做为示范使用M-file % M-file, tutest.m % Simple plot for illustration of using M-file. % 简易绘图以做为示范使用M-file x=linspace(0,2*pi,20); y=sin(x); plot(x,y,r+) xlabel(x-value) ylabel(y-value) title(2D plot) 写好上述程式后,以tutest.m保存该文件 可在指令视窗下键入tutest,即可执行已建立的tutest.m 程式,或者直接点击m文件编辑器上的运行按钮,图形结果,图形结果,
展开阅读全文