MATLAB程序设计
Matlab程序设计打印版

实验四 Matlab程序设计[实验目的]1.掌握字符串数组的创建和构造方法及常用字符串函数的使用。
2.熟练掌握MATLAB 控制流的使用方法。
3.熟悉M 脚本文件、函数文件的编写方法和技巧。
[实验原理]与数值数组相比,串数组在MATLAB 中的重要性较小,但不可缺少。
如果没有串数组及相应的操作,那么数据可视化、图形用户界面的制作将会遇到困难。
字符串与数值数组是两种不同的数据类,它们的创建方式也不同。
字符串的创建方式是:将待建的字符放在“单引号对”中。
注意,“单引号对”必须是在英文状态下输入,其作用是MATLAB 识别送来内容“身份”所必需的,如A=’This is an example!’;就创建了一个字符串A。
注意创建带单引号的字符串时,每个单引号符用“连续2 个单引号符”标识。
字符串的标识同数值数组同,而且也可以使用size 指令观察串数组的大小。
串数组的ASCII 码可以通过指令abs 和double 来获取,而用char 指令可以把ASCII 码变为串数组,另外,MATLAB 可以很好的支持中文字符串数组。
对于复杂串数组的创建,一是可以直接创建,但是要保证同一串数组的各行字符数相等,即保证各行等长,不推荐,太繁琐。
二是可以利用串操作函数创建多行数组,比如char, str2mat, strvcat 等,具体操作自己通过帮助体会。
另外还可以通过转化函数产生数码字符长,比如A_str=int2str(A) 就是把整数数组A 转换成串数组,如果是非整数将被四舍五入后再转换,类似的函数还有num2str(把非整数数组转换为串数组,常用于图形中数据点的标识)、mat2str(把数值数组转换成输入形态的串数组,常与eval 指令配用)。
假如想灵活运用MATLAB 去解决实际问题,想充分调动MATLAB——科学技术资源,想理解MATLAB 版本升级所依仗的基础,那么掌握M 脚本文件合函数的编写规则将十分有用。
MATLAB程序设计

MATLAB程序设计MATLAB提供了一个完善的程序设计语言环境,使用户能够方便地编制复杂的程序,完成各种计算。
本节先介绍关系运算、逻辑运算,再介绍M-文件(即程序文件)的结构及MATLAB的程序控制流语句。
一、关系运算和逻辑运算1.关系运算(1)关系运算符:< ;< = ;> ;> = ;= = ;~ =(2)关系表达式:用关系运算符将两个同类型的量(表达式)连接起来的式子。
【注】①关系运算本质上是标量运算,关系表达式的值是逻辑值(0-假1-真);②当作用于两个同样大小矩阵时,则分别对两个矩阵的对应元素运算,结果是一个0-1矩阵。
例1.对向量进行关系运算。
>> A=1:5,B=5:-1:1 % 输入向量A = 1 2 3 4 5B = 5 4 3 2 1>> C=(A>=4) % 对向量进行关系运算C = 0 0 0 1 1>> D=(A==B) % 对向量进行关系运算D = 0 0 1 0 02.逻辑运算(1)逻辑运算符:& (and,与)、| (or,或)、~ (not,非)(2)逻辑表达式:用逻辑将两个逻辑量连接起来的式子。
【注】①逻辑运算本质上是标量运算,它将任何非零元素视为1(真);②当作用于两个同样大小矩阵时,则分别对两个矩阵的对应元素运算,结果是一个0-1矩阵。
(真值表见P27)例2.对向量进行逻辑运算。
>> a=1:9,b=9-aa = 1 2 3 4 5 6 7 8 9b = 8 7 6 5 4 3 2 1 0>> c=~(a>4) % 非运算c = 1 1 1 1 0 0 0 0 0>> d=(a>=3)&(b<6) % 与运算d = 0 0 0 1 1 1 1 1 13.逻辑函数any(x) 向量x 中有非零元返回1,否则返回0。
(向量函数) all(x) 向量x 中所有元素非零返回1,否则返回0。
第二讲MATLAB的程序设计和M文件

第二讲MATLAB的程序设计和M文件在MATLAB中,程序设计主要是通过编写和运行M文件来实现。
M文件是MATLAB的主要代码文件,用于实现不同功能的程序,可以包含变量定义、算法实现、函数调用和图形绘制等。
下面将介绍MATLAB的程序设计和M文件的基本知识。
MATLAB的程序设计主要包括如下几个方面:1.变量和数据类型:在M文件中,可以使用不同的变量类型存储数据,如整型、浮点型、字符型等。
不同的变量类型在MATLAB中有不同的表示方法和功能。
2.运算和表达式:在M文件中,可以使用常见的数学运算符(如加减乘除、指数等)进行计算。
同时,也可以使用逻辑运算符(如与、或、非等)进行逻辑运算。
3. 条件语句:在M文件中,可以使用条件语句实现根据不同的条件执行不同的操作。
MATLAB中的条件语句主要有if语句和switch语句,通过判断条件的真假来决定执行路径。
4. 循环语句:在M文件中,可以使用循环语句实现对一段代码的重复执行。
MATLAB中的循环语句主要有for循环、while循环和do-while循环。
5.函数的定义和调用:在M文件中,可以通过定义函数来实现特定功能的封装。
函数可以包含输入参数和输出参数,通过参数的传递来实现数据的交互和函数的调用。
1.M文件的命名和保存:M文件的命名应该具有描述性,以体现文件中代码的功能。
M文件的保存格式是以.m为文件扩展名。
2.M文件的结构:在M文件中,一般会包含变量定义、函数定义和主程序等部分。
变量定义部分用于声明和初始化变量,函数定义部分用于定义自定义函数,而主程序部分用于调用函数和执行主要功能。
3.代码注释:为了提高代码的可读性和可维护性,需要在M文件中添加注释。
注释可以用于解释代码的目的和思路,以及描述变量、函数和算法等的作用和实现方法。
4.代码风格:为了代码的一致性和可读性,需要遵循一定的代码风格规范。
例如,可以在操作符周围留有空格,使用一致的缩进和命名规则,避免使用不必要的缩写等。
MATLAB程序设计及应用实例

注意:等号左边是方括号,右边输入参数用括号
第14页,共67页。
例1 编写函数文件求半径为r的圆的面积和周长
function [s,p]=fcircle(r)
%FCIRCLE calculate the area and perimeter of a circle of radii r
disp函数
调用格式为
disp(输出项) 其中输出项既可以为字符串,也可以为矩阵。 注意:用disp函数显示矩阵时将不显示矩阵的 名字,而且其格式更紧密,且不留任何没有意 义的空行。
第22页,共67页。
例 求一元二次方程ax2+bx+c=0的根。
程序如下: a=input('a=?'); b=input('b=?'); c=input('c=?'); d=b*b-4*a*c; x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];
c=input('请输入一个字符','s'); if c>='A' & c<='Z'
disp(setstr(abs(c)+1)); elseif c>='a'& c<='z'
disp(setstr(abs(c)-1)); elseif c>='0'& c<='9'
disp(abs(c)-abs('0')); else
end 命令文件main5_2.m:
matlab 程序设计

【例5.8】用try... catch... end结构来进行矩阵相乘运算. 例
% EX0508 try结构 n=4; a=magic(n); m=3; b=eye(3); try c=a*b catch c=a(1:m,1:m)*b end lasterr
5.2.6 流程控制语句
break, continue, return, pause, keyboard, input 1. break命令 命令 break命令可以使包含break的最内层的for或while 语句强制终止,立即跳出该结构,执行end后面的命令, break命令一般和if结构结合使用.
5.2.4 switch…case开关结构
语法: switch 开关表达式 case 表达式 表达式1 语句段1 语句段 case表达式2 case表达式2 表达式 语句段2 语句段 ... otherwise 语句段n 语句段 end
说明: (1) 将开关表达式依次与case后面的表达式进行比较,如 果表达式1不满足,则与下一个表达式2比较,如果都不 满足则执行otherwise后面的语句段n;一旦开关表达式 与某个表达式相等,则执行其后面的语句段. (2) 开关表达式只能是标量或字符串. (3) case后面的表达式可以是标量,字符串或元胞数组, 如果是元胞数组则将开关表达式与元胞数组的所有元素 进行比较,只要某个元素与开关表达式相等,就执行其 后的语句段.
(2) 将函数文件保存为"Ex0502.m". (3) 在MATLAB命令窗口输入以下命令,则会出现f的计算值 注意: 注意:M脚本文件和M函数文件的文件名及函数名的命名规 和绘制的曲线:f=Ex0502(0.3) 则与MATLAB变量的命名规则相同.
MATLAB语言程序设计基础

3.2 matlab语言基本运算及输入输出
3.2.5 输入与输出语句
input A=input(提示字符串)要求输
入矩阵
A=input(提示字符串,‘s’) 要求字符串eg:
n=input('how much')
n=input('ho第w23页m/共4u1页ch','s')
3.2 matlab语言基本运算及输入输出
关系运算和逻辑运
算
表3-6 关系运算和逻辑运算函数
函数 any all find
exist isnan
意义 逻辑条件任何一个
逻辑条件全部 寻找逻辑值的向量元素下 标
检查某变量是否存在 检查非数值量
函数 finite isempty isstr
strcmp
随机数元素矩阵 设三维绘图基底坐
第5页/共41页
单位矩阵
3.1.3构造多维数组
cat( ) a=cat(n,a1,a2,….) n:多维函数的维数 n=1:
cat(a1,a2,a3..)=[a1;a2;a3…] n=2:
cat(a1,a2,a3..)=[a1,a2,a3…] n=3: 图3-1示
重新定义维数
end 表示某一维末尾元素下标
2、复数矩阵: b=[1 2;3 4]+i*[5 6;7 8] b=[1+5i 2+6i;3+7i 4+8i]
第3页/共41页
3、空矩阵[]
0×0阶
与clear不同之处:clear删除变量
[]删除矩阵中的元素
A(:,[2,3])=[] 第2,3列元素删除
函数 abs angle sqrt real imag conj round fix
Matlab程序设计

19
例:计算2个数的和,根据输入的参数个数不同使用不同 的运算表达式。 function [sum]=Ex0514(x,y) if nargin==1 sum=x+0; else if nargin==0 sum=0; else sum=x+y end end [sum]=Ex0514(1,2)
可以在某一目录中建立一个private目录来存放相关函数,具有性质:在 私有目录下的私有函数,只能被其父目录的M函数文件调用,对其他目 录的文件私有函数是不可见的,可以和其他目录下的函数重名;私有函 数父目录的M脚本文件也不可调用私有函数;在函数调用搜索时,私有 函数优先于其他MATALB路径上的函数。
局部变量和全局变量
(1)局部变量是在函数体内部使用的变量,其影响范围只 能在本函数内,仅存在于函数的工作空间内,只在函数执行 期间存在,函数执行完变量消失。
(2)全局变量是可以在不同函数工作空间和MATLAB工作 空间中共享使用的变量。在使用前必须用global定义,而且 每个要共享全局变量的函数和工作空间,都必须逐个用 global对变量加以定义。
m文件模式
m文件编辑器缺省设置是(通过菜单Preferences) c:\windows\notepad.exe 还可设成:c:\windows\write.exe c:\windows\command\ 注意:所创建的m文件必须纳入matlab搜索路 径后,才能在matlab命令窗口运行。
实战matlab并行程序设计

实战matlab并行程序设计MATLAB并行程序设计是一种利用MATLAB的并行计算工具箱来提高计算效率的技术。
在处理大规模数据集或复杂算法时,传统的串行计算方式可能效率低下,而并行程序设计可以显著提升处理速度。
以下是MATLAB并行程序设计的一些关键概念和步骤。
1. 并行计算基础并行计算指的是同时使用多个处理器或核心来执行计算任务。
MATLAB并行程序设计主要依赖于MATLAB的Parallel Computing Toolbox。
2. 环境配置在开始并行程序设计之前,需要确保MATLAB安装了Parallel Computing Toolbox,并且计算机上安装了MATLAB的并行计算服务器。
3. 并行池的创建和管理并行池是执行并行任务的工作单元集合。
MATLAB提供了`parpool`和`delete(gcp('nocreate'))`函数来创建和管理并行池。
```matlab% 创建并行池parpool;% 删除并行池delete(gcp('nocreate'));```4. 并行计算函数MATLAB提供了多种并行计算函数,如`parfor`、`parfeval`、`parfor`等。
`parfor`是最常见的并行循环,用于并行化for循环。
```matlab% 并行for循环parfor i = 1:N% 执行并行任务end```5. 数据分配在并行程序设计中,数据需要在不同的工作单元之间分配。
MATLAB提供了`distribute`函数来帮助实现数据的自动分配。
```matlab% 数据分配data = distribute(largeArray);```6. 并行变量在并行环境中,MATLAB支持两种类型的变量:共享变量和私有变量。
共享变量在所有工作单元中共享,而私有变量则在每个工作单元中独立。
```matlab% 声明共享变量sharedVar = 0;% 声明私有变量parfor i = 1:NlocalVar = rand;end```7. 并行任务的同步在并行程序设计中,有时需要同步不同工作单元的状态。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四第3章 MATLAB 程序设计Matlab 作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算能力和丰富的绘图功能;可以人机交互式的命令行的方式工作;作为一种高级语言,同时也可以与 C 、FORTRAN 等高级语言一样进行程序设计.利用 Matlab 的程序控制功能,将相关 Matlab 命令编成程序存储在一个文件中(M 文件),然后在命令窗口中运行该文件,Matlab 就会自动依次执行文件中的命令,直到全部命令执行完毕.■ 例1 用 mesh 绘制半径为 3 的球命令行方式: 编程方式:新建一个M 文件 qiu.m 如下:保存后,在命令窗口输入 qiu ,即可执行该 M 文件.>> u=[0:pi/60:2*pi]; >> v=[0:pi/60:pi]; >> [U,V]=meshgrid(u,v); >> R=3;>> X=R*sin(V).*cos(U); >> Y=R*sin(V).*sin(U); >> Z=R*cos(V); >> mesh(X,Y,Z); >> axis equal;u=[0:pi/60:2*pi]; v=[0:pi/60:pi]; [U,V]=meshgrid(u,v); R=3;X=R*sin(V).*cos(U); Y=R*sin(V).*sin(U); Z=R*cos(V); mesh(X,Y,Z); axis equal;第一节M 文件一、M文件介绍●用Matlab 语言编写的程序称为M 文件●M 文件以.m 为扩展名●M 文件是由若干Matlab 命令组合在一起构成的,它可以完成某些操作,也可以实现某种算法●文件的命名规则与变量相同!文件名应尽量与程序要表达的意义相符合,以方便今后调用.(如例1)二、M文件的建立、打开与保存M文件是文本文件,可以用任何文本编辑器来建立和编辑,通常使用Matlab自带的M文件编辑器.①新建一个M文件●菜单操作( Fil e→New→M-File )●命令操作( edit M 文件名)●命令按钮( 快捷键)②打开已有的M 文件●菜单操作( File →Open )●命令操作( edit M 文件名)●命令按钮( 快捷键)●双击M文件(在当前目录窗口)③保存M 文件●菜单操作( File →Save )●命令按钮( 快捷键)三、M 文件分类(根据调用方式的不同)●Script:脚本文件/命令文件(可以直接运行的M文件)命令文件就是命令行的简单叠加,matlab会自动按顺序执行文件中的命令.这样就解决了用户在命令窗口中运行许多命令的麻烦,还可以避免用户做许多重复性的工作.(如例1)●Function:函数文件函数文件主要用以解决参数传递和函数调用的问题.(1) 第一行必须指定函数名、输入变量(参数)和输出变量(参数).输入参数是从MATLAB的工作空间复制到函数工作空间的变量.第一行举例如下:function [输出形参表] = name(输入形参表)(2) 一个函数可以有0个、一个或几个输入参数和返回值.当输出形参表的参数个数大于2时,[ ]不可缺省!(3) 建议函数名和文件名一样.调用时所用的变量并不需要与函数文件中定义的变量有相同的名字.■例2 比较下列两个程序,注意命令文件(以dd1命名)与函数文件(以dd2命名)的区别与联系.x=input(‘输入初值x=’);n=input(‘输入迭代次数=’); y(1)=x ;for k=1:nx=1/(x+1); y(k)=x;end function y=dd2(x,n) y(1)=x ;for k=1:nx=1/(x+1); y(k)=x;四、 两类文件的区别● 函数文件的第一行必须包含字 function ,命令文件没有这种要求.因此,没有这样第一行的M 文件是命令文件. ● 命令文件没有输入参数,也不返回输出参数,而函数文件可以带输入参数,也可以返回输出参数;● 命令文件对matlab 工作空间中的变量进行操作,文件中所有命令的执行结果也完全返回到工作空间中,而函数文件中定义的变量为局部变量,当函数文件执行完毕时,这些变量被清除.● 命令文件可以直接运行.在MATLAB 命令窗口输入命令文件的名字,就会顺序执行命令文件中的命令,而函数文件不能直接运行,而要以函数调用的方式运行. ● 函数文件可以建立函数,而命令文件不能。
■例3 建立函数23569(3)24()x xx x f x -+-++=解:程序如下:function y=f (x)56)/((3)(3)2)9/(4)(x x x x x x y *--*-++***+=;以文件名f.m 保存。
五、M文件的调用对已存在的M文件●命令文件在命令窗口直接输入该文件名即可;如例1>>qiu●函数文件调用的一般格式[输出实参数表]=函数名(输入实参数表)①函数调用时各实参数出现的顺序、个数应与函数定义时形式参数的顺序、个数一致,否则出错;②函数调用时,先将实参数传递给形式参数,从而实现参数的传递,然后再执行函数的功能.如例2,例3>>y=dd2(1,10) , >>y=f(1)③当输出实参数表的参数个数大于2时,[ ]不可缺省!练习:将例1、例2和例3的程序在matlab中建立、保存、运行.第二节程序控制结构程序控制结构有三种:顺序结构、选择结构、循环结构.任何复杂的程序都可以由这三种基本结构构成.Matlab提供了实现控制结构的语句,利用这些语句可以编写解决实际问题的程序. 一、顺序结构顺序结构是指按照程序中语句的排列顺序从上到下依次执行,直到程序的最后一个语句如例1的qiu文件和例2的dd1文件.这是最简单的一种程序结构.一般涉及数据的输入、计算或处理、数据的输出等内容.1. 数据的输入通过input命令来接收从终端输入的内容,它也可以显示文本和提示.命令集14 输入命令input(out ,in)在屏幕上显示出字符串out的文本并等待终端的输入.如果变量in是's',则输入的内容以字符串的形式进行保存,通常MATL AB在保存前要尽可能地求出表达式的值.如果使用格式控制符号如'\n',字符串out可以是若干行.■例4 注意in的输入方式>> xm=input('What''s your name?','s')What's your name?syxxm =syx>> xm=input('What''s your name?')What's your name?syx??? Error using ==> inputUndefined function or variable 'syx'.What's your name?'syx'xm =syx2. 数据的输出可以通过简单地输入变量的名字来显示数字矩阵或者字符串向量的内容,结果将显示出变量的名字和内容.另一种显示变量的值就是使用命令disp.使用它只显示出变量的内容,这是有用的,特别是在字符串的应用中.命令集15显示命令disp(A)显示矩阵A的内容,如果A是字符串,则显示出它的文本.■例5 比较不同的输出方法及输出结果的表达方式>> A=magic(3);disp(A); >> disp(ones(3))8 1 6 1 1 13 5 7 1 1 14 9 2 1 1 1>> A >> A='Good afternoon';disp(A)A = Good afternoon8 1 6 >> disp('Hi,Tom')3 5 7 Hi,Tom4 9 2练习题1:编写M文件,对任意的a,b,c求方程20ax++=的根。
bx c二、循环结构循环结构是按照给定的条件,重复执行指定的语句。
Matlab 用于实现循环结构的语句有for — end 语句和while — end 语句。
1.for — end 语句 for 语句的格式为:for 循环变量=表达式1 : 表达式2 : 表达式3 循环体语句 end其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。
步长为1时,表达式2可以省略。
■例6 1. 求1+2+…+100 ; 2. 求1+2+…+n . 1. 解: 2. 解■例7 1. 求初始值为1,任意等差数列的和?2. 求初始值任意,任意等差数列的和?1. 解:2. 解s=0;for i=1:100s=s+i; end sfunction s=mysum(n) s=0; for i=1:n s=s+i; end■ 例8 已知222111123y n =++++,求y 的值。
解:程序如下:运行并比较两程序。
循环语句应用时应注意: ● 循环语句可以嵌套使用;● 不能在 for — end 循环体内改变循环变量的值;● 为了提高代码的运行效率,应尽可能提高代码的向量化程度,避免 for — end 循环的使用,如例8;● 如果预先就知道循环的次数,则可以采用 for — end 循环;否则,如果预先无法确定循环的次数,则可以使用 while — end 循环。
n=input(‘n=’);y=0 ; for i=1:n y=y+1/i/i; end yn=input(‘n=’); i=1:n; y=sum(1./i.^2); y% d 为公差,n 为求和项数 function s=dc(n,d) s=0; for i=1:d:n s=s+i; end % c 为首项,d 为公差, % n 为求和项数function s=mysumdc(c,n,d) s=0; for i=c:d:n s=s+i; end练习题2:阅读下列程序,写出结果;并在计算机上运行验证:(1) bljh.mx=input(‘Input x please:’);y= input(‘Input y please:’);z=x; x=y; y=z;disp(x); disp(y);(其中x=[ 12,3,3,4;43,6,3,-54 ],y=1 : 8 )(2) xlsum1.mn=input('n=');k=1:2:2*n-1;y=sum(1./k)(3) xlsum2.mn=input('n=');y=0;for k=1:2:2*n-1y=y+1/k;endy(4) Vander1.mt=[-1;2;1;3;5];n=length(t);A(: , n)=ones(n,1);for j= n -1: -1:1A(: , j)=t.*A(: , j+1);endA(5) Vander2.mt=[-1;2;1;3;5];n=max(size(t));A(: , n)=ones(n,1);for j= 1: nfor i=1: nA(i , j)=t(i)^(n-j);endA(6) ftx.mfunction s=ftx(a,b,n)h=(b-a)/n;x=a:h:b;f=exp(-0.5*x).*sin(x+pi/6);s=(2*sum(f)-f(1)-f(n+1))*h/2;练习题:3. 利用秦九韶算法编写M 文件,实现任意的多项式0()nk n k k P x a x ==∑的求值。