数学建模编程培训_第1页
数学建模编程培训_第2页
数学建模编程培训_第3页
数学建模编程培训_第4页
数学建模编程培训_第5页
已阅读5页,还剩221页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

内部资料

数学建模编程培训

数学建模教练组编写

2008年7月

目录

1Matlab软件1

1.1基本介绍1

1.1.1软件简介1

1.1.2工作环境介绍1

1.1.3数据结构3

1.1.4Matlab语言的特点3

1.1.5Matlab中的常量与特殊变量3

1.1.6特殊符号3

1.1.7Matlab常用函数4

1.2矩阵函数7

1.2.1构造矩阵7

1.2.2矩阵变换操作9

1.2.3设置输出格式10

1.3程序设计入门10

1.3.1变量10

1.3.2基本语句11

1.3.3分支判断语句11

1.3.4循环语句13

1.3.5Matlab程序M文件13

1.3.6函数与子函数14

1.3.7建立内部函数17

1.4字符串函数17

1.4.1函数简介17

1.4.2例子18

1.4.3文件处理函数19

1.4.4读取格式化文件例子20

1.5二维作图21

1.5.1基本图形21

1.6Matlab编程练习题23

1.6.1练习123

1.6.2练习224

1.7编程中经常发现的问题24

2Mathematica快速入门26

2.1Mathematica简介26

2.1.1命令输入与运行26

2.1.2数、表达式和变量28

2.1.3常用的内部函数30

2.1.4自定义函数33

2.1.5常用菜单35

2.2基本绘图命令、数组与数据拟合38

2.2.1基本绘图命令38

2.2.2数组运算42

2.2.3数据拟合44

2.3极限、微积分与极值命令45

2.3.1极限45

2.3.2微积分45

2.3.3极值47

2.3.4LinearProgramming47

2.3.5ConstrainedMin48

2.3.6ConstrainedMax48

2.4方程与方程组求解48

2.4.1定义方程48

2.4.2一般方程(组)求解49

2.4.3微分方程(组)求解50

2.4.4不等式(组)求解51

2.5程序设计简介51

2.5.1Mathematica程序设计基本命令51

2.5.2Mathematica动画制作简介53

3递归程序设计55

3.1计算阶乘55

3.2组合数学中的Pascal公式55

3.3汉诺塔问题56

3.3.1"Hanoi塔”问题56

3.3.2问题求解56

3.3.3实现程序56

3.4案例:商人安全过河问题57

3.4.1问题分析57

3.4.2模型建立58

3.4.3模型求解58

3.4.4进一步的思考题58

3.4.5程序运行结果59

3.4.6递归算法求解程序59

4优化模型及其求解66

4.1案例:背包问题66

4.1.1问题分析66

4.1.2变量与符号说明66

4.1.3模型建立66

4.1.4模型求解及结果67

4.1.5贪婪法68

4.1.6贪婪法求解程序68

4.1.7贪婪法求解结果69

4.1.8穷举法求解程序69

4.1.9穷举法程序运行结果71

4.2案例:高速公路问题71

4.2.1问题分析72

4.2.2变量说明72

4.2.3模型假设72

4.2.4模型建立72

4.2.5模型求解73

4.2.6模型结果及分析73

4.2.7求解模型的主程序文件73

4.3随机跳跃法74

4.3.1随机跳跃法简介74

4.3.2求解高速公路问题的随机跳跃法程序75

4.3.3程序运行结果76

4.4网格法76

4.4.1网格法简介76

4.4.2求解高速公路问题的网格法程序77

4.4.3程序运行结果78

4.5实验:开放式基金的投资问题78

5系统模拟80

5.1概述80

5.1.1模拟技术80

5.1.2模拟时间80

5.1.3模拟语言81

5.1.4随机数的模拟81

5.1.5随机数的产生81

5.1.6模拟均匀分布随机变量的函数82

5.1.7模拟指数分布随机变量的函数83

5.1.8模拟正态分布随机变量的函数83

5.2蒙特卡罗模拟法83

5.2.1模拟寻求近似圆周率83

5.2.2用蒙特卡罗法估算定积分84

5.2.3用蒙特卡罗法估计体积86

5.3案例:渡口模型87

5.3.1问题描述87

5.3.2问题分析87

5.3.3模型建立87

5.3.4模拟程序设计88

5.3.5模型求解结果及分析88

5.3.6模拟程序88

5.3.7思考题90

5.4案例:核反应堆屏蔽层设计问题90

5.4.1问题描述与分析90

5.4.2模型假设:91

5.4.3中子运动的数学描述91

5.4.4模拟过程91

5.4.5模拟结果92

5.4.6模拟程序92

5.4.7思考题94

III

5.5案例:理发店系统研究94

5.5.1问题分析94

5.5.2模型假设:94

5.5.3变量说明:95

5.5.4模型建立95

5.5.5系统模拟:95

5.5.6系统模拟算法设计96

5.5.7系统模拟程序96

5.6实验题目100

5.6.1实验:赶上火车的概率100

5.6.2实验:小狗追人的故事101

5.6.3实验:一个修理厂的模拟104

5.6.4实验:超市收费服务系统105

6编程中常见错误105

6.1常见语法错误105

6.1.1引用未定义变量105

6.1.2下标越界105

6.1.3维数不同赋值106

6.2逻辑错误106

6.2.1变量未初始化106

6.2.2变量名误用106

6.2.3程序实现错误107

6.3如何查找程序中的错误107

6.3.1查找错误的一般原则107

6.3.2-一般查错顺序107

7动态规划建模举例107

7.1动态规划方法介绍108

7.2动态规划求解示例108

7.2.1背包问题108

7.3例子:运载问题110

7.3.1前向算法建立动态规划模型110

7.3.2后向算法建立动态规划模型114

7.3.3求解方法结果对比分析116

7.4应用中面临的问题117

8连续系统建模与模型求解选讲118

8.1常用Mathematica命令118

8.2案例:冷却模型121

8.2.1问题分析121

8.2.2基本假设121

8.2.3变量说明121

8.2.4建立模型121

8.2.5求解122

8.2.6进一步思考122

8.3案例:战斗模型122

IV

8.3.1问题分析122

8.3.2基本假设123

8.3.3变量说明123

8.3.4建立模型123

8.3.5求解模型123

8.3.6进一步分析124

8.4案例:人口增长预测125

8.4.1问题分析125

8.4.2基本假设125

8.4.3建立模型125

8.4.4求解模型125

8.4.5进一步分析126

8.5案例:狼追击兔子的问题127

8.5.1问题重述与分析127

8.5.2变量说明127

8.5.3模型假设127

8.5.4模型建立128

8.5.5微分方程数值解129

8.5.6系统模拟法求解问题130

8.6实验习题132

9统计问题建模及求解134

9.1常用Mathematica命令134

9.2案例:合金的抗拉强度控制135

9.3建模习题141

10Matlab优化工具箱142

10.1简介142

10.2一元非线性方程求根144

10.3非线性方程组求解145

10.4无约束非线性最小化146

10.4.1fminbnd求单变量函数最小值点146

10.4.2fminunc148

10.4.3fminsearch求多变量函数最小值点148

10.5有约束非线性最小化fmincon149

10.6线性规划linprog151

10.7最小二乘和曲线拟合152

10.7.1线性最小二乘152

10.8非线性曲线拟合Isqcurvefit153

11数学建模案例155

11.1案例:节水洗衣机155

11.1.1问题重述与分析155

11.1.2基本假设及说明155

11.1.3符号和变量说明156

11.1.4建模准备156

11.1.5模型建立157

v

11.1.6模型求解158

11.1.7思考题163

12Lingo数学软件164

12.1LINGO快速入门164

12.2LINGO中的集165

12.3模型的数据部分和初始部分169

12.4LINGO函数172

12.5LINGOWINDOWS命令183

12.6LINGO的命令行命令199

12.7综合举例203

VI

1Matlab软件

1.1基本介绍

l.i.i软件简介

它已经成为世界上应用最广泛的数学软件之一,尤其在工程计算领域、高校

应用最广。该软件以矩阵运算为基础,将计算、可视化、程序设计融合在简单易

用的交互式环境中。

运用MATLAB可以实现工程计算、数学建模、计算机模拟、算法研究、数

据分析与处理、科学与工程绘图、应用软件开发、数值计算、图形、图像处理,

支持递归函数,还有多种工具箱(不同领域)。

Matlab部分工具箱:

控制系统工具箱(ControlSystemToolbox)

小波工具箱(WaveletToolbox)

模糊逻辑工具箱(FuzzyLogicToolbox)

神经网络工具箱(NeuralNetworkToolbox)

通信工具箱(CommunicationToolbox)

图象处理工具箱(ImageProcessingToolbox)

优化工具箱(OptimizationToolbox)

财政金融工具箱(FinancialToolbox)

样条工具箱(SplineToolbox)

统计工具箱(StatisticsToolbox)

信号处理工具箱(SignalProcessingToolbox)

1.1.2工作环境介绍

1.1.2.1搜索路径管理

(1)命令形式设置:

path查看或设置当前的搜索路径

用法:

path(path,p)

path(p,path)

举例:

path(path,,d:\mywork,)

path('d:\mcmuse',path)

addpath用于添加路径

用法:

addpathdimame将目录dimame放在原有目录的前面

addpathdimame-begin

addpathdimame-end新增加一个搜索目录,放在原有目录最后

addpthdirldir2dir3增加多个搜索目录,放在搜索目录最前面

rmpath用于删除路径

用法:

rmpathdirname删除搜索目录dimame

rmpathdirldir2dir3删除多个搜索目录

pwd查看当前指向目录

举例:

cd

用法:

cddimame将dimame作为当前目录

cd返回当前目录

cd..将当前目录设置其上级目录(有空格)

(2)界面设置

通过菜单File->SetPath会打开一个窗口,用于添加、删除搜索路径,可以方

便的打开、运行MATLAB文件。

1.1.2.2工作环境管理

查看工作空间变量

菜单方式:

通过File选择"ShowWorkspace"菜单条可以显示当前工作环境内的变量。

执行如下命令:

clearall

x=rand(3,l)

x=

2

0.9501

0.2311

0.6068

通过open按钮可以打开变量进行编辑。

命令方式:

who显示当前工作空间的变量名

whos显示当前工作空间的每个变量的信息

whoglobal显示当前工作空间全局变量名

whosglobal显示当前工作空间全局变量的信息

1.1.3数据结构

在MATLAB中基本数据结构是矩阵,而矩阵一般分为:数值矩阵、字符串

矩阵。

例如:

a=l:10

a=ones(3,2)%前2行为数值矩阵

s=,helloworld,%为1行11列字符串矩阵

1.1.4Matlab语言的特点

令语言简介,编程效率高

令变量名区分大小写:如:count与Count,num、Num与NUM在MATLAB

指的是不同的变量。

令丰富的内部函数、外部函数、工具箱

令易扩展性

1.1.5Matlab中的常量与特殊变量

i,j:虚数单位,如3+2i,2+3j,4j+30,这里的i,j必须是小写字母

pi:圆周率3.14159265358979…,必须为小写

realmax:

realmin:

inf:无穷大

NaN:表示不是一个数值,意思是NotaNumber

ver或version:版本信息

ans:变量,用于存储当前语句未保存的计算结果

1.1.6特殊符号

符号说明例子

产生向量,用于循环V=l:3;v=-l:0.5:3;

用于分割命令或元素

»命令结束符号,运算结果不A=[l23;456],

显示;用于创建矩阵分行B=AA2;

3

例子:

fori=l:3,

forj=1:4,

tmp=j,

m(i,j)=i*100+j;

end

end

1.1.7Matlab常用函数

1、ones产生元素均为一的矩阵

常见用法:

ones(n)产生nXn矩阵

ones(m,n)或ones([mn])产生mXn矩阵

ones(size(A))产生与A同样维数的矩阵

举例:

ones(3,5)

ans=

11111

11111

11111

2、zeros产生0矩阵,用法与ones相同

用法:

zeros(n)

zeros(m,n)或zeros([mn])

zeros(size(A))

3、length返回向量的长度,length(x)等价于max(size(x))

举例:

a=ones(l,5)

a=

11111

length(a)

ans=

5

end

用法:

表示for,while,if等语句的中断符号

也可表示最后•个元素的索引,如a(end);还可以用a(end+l)来增加元素

举例:

a=[l325]

a=

1325

a(end)

4

ans=

5

a(end+l)=8

a=

13258

4、rand

用法:

rand产生-•个在(0,1)之间的均匀分布的数

5、randn产生正态分布随机数

用法:

randn产生一个在服从N(0,l)正态分布的随机数

randn(n)

randn(m,n)

举例:

rand

ans=

0.9501

rand(2,3)

ans=

0.23110.48600.7621

0.60680.89130.4565

randn

ans=

0.6565

randn(3,2)

ans=

-1.1678-1.2132

-0.4606-1.3194

-0.26240.9312

6、Hnd

find找出非0元素。也可以查找指定条件的元素,并返回元素所在位置索弓I。

(1)例子

x=f85694710];

find(x>5)

输出结果:

ans=

13467

(2)例子:

x=fix(rand(5)*10),[r,c]=find(x>5);r=r\c=c\length(r)-length(find(x>5))

输出结果:

X=

5

03464

06477

17348

56152

00612

r=

23451223

c=

22234455

ans=

0

(3)例子:

vec=fix(rand(1,10)*100)

id=find(vec>=60&vec<=69)

sprintf(160-69分的人数=%5壮人11”11何))

运行结果:

vec=

4518244617992731740

id=

5

ans=

60-69分的人数=1

7、sort排序

[Y1]=sort(x)返回索引矩阵I,如果x时一个向量,则Y=x⑴。如果x是个m行

n列矩阵,则有forj=l:n,Y(:,j)=x(I(:,j),j);end。

例子:

vec=fix(rand(1,10)*100);

[value,idx]=sort(vec);

they_are_zero=vec(idx)-value

运行结兵

value=

1191927414446607493

idx=

51431079268

they_are_zero=

0000000000

8^sprintf格式化数据输出,与C语言中的printf函数用法相似

常见的数值处理函数

函数名功能

sum求和

mean求平均值

round四舍五入

fix向零取整

floor向负无穷方向取整

6

ceil向正无穷方向取整

函数名功能

mod除法求余(结果与除数同号)MOD(x,y)等于x-y.*floor(x./y)

(y不为0),若y=0,则mod(x,0)返回x

rem除法求余(结果与被除数同号)REM(x,y)isx-y.*fix(x./y)(y

不为0),若y=0则mod(x,0)返回NaN。

sign符号函数当x为正时sign(x)为1,x为0时sign(x)为0,x为负

时sign(x)为-1

例子:

floor(3.8)floor(3.4)floor(-3.8)floor(-3.4)fix(3.8)

ans=ans=ans=ans=ans=

33-4-43

ceil(3.8)ceil(3.4)ceil(-3.8)ceil(-3.4)fix(-3.4)

ans=ans=ans=ans=ans=

44-3-3-3

其它常用函数:

字符串操作函数matlab\strfun

文件操作函数matlab\iofun

如:fopen,fprintf,fscanf,fread,fwrite

1.2矩阵函数

1.2.1构造矩阵

1.2.1.1矩阵赋值

a=l:5%产生I行5列的行向量

a=[l:57%产生5行1列的列向量

a=[123;456;789]

a=[...

123

456

789]

1.2.1.2从文本文件导入

如存在文本文件data.txt文件内容如下:

2002010131253023

2002010135354025

7

2002010145296030

2002010165758040

使用命令load导入,然后保存的变量名则为文件名:

输入:

clearall

loaddata.txt

who

data

输出:

Yourvariablesare:

data

data=

2002010131253023

2002010135354025

2002010145296030

2002010165758040

1.2.1.3从MAT格式文件中导入

这些文件是通过MATLAB的save命令保存的。先了解save命令。

SAVEfname将当前工作环境变量保存为名为fname.mat的二进制MAT文

件,不要参数则保存到文件matlab.mat。

例子说明:

SAVEfnameXsavesonlyX.

SAVEfnameXYZ保存变量X、Y、Z.

SAVEfnameXYZ-ASCII保存为8位数字的文本文件

SAVEfnameXYZ-ASCII-DOUBLE保存为16位数字的文本文件.

SAVEfnameXYZ-ASCII-DOUBLE-TABS用TAB字符分害1擞据

SAVEfnameXYZ-V4以MAT格式保存为可用MATLAB4导入的文件

SAVEfnameXYZ-APPEND添加到文件中去

输入:

clearall

x=rand(3);

y=l:5;

z=[l35;7911;131517];

savemytestxyz

clearall

loadmytest

who

输出:

Yourvariablesare:

xyz

说明:通过配合save和load命令可以保存指定变量,这将很方便程序处理,比

8

如有些数据经常要用,则可以保存到文件中,以便以后编程使用

1.2.1.4特殊函数产生矩阵

rand(m,n)

rand(n)

ones(m,n)

ones(n)

1.2.2矩阵变换操作

函数名称功能函数名称功能

fliplr矩阵左右翻转flipud矩阵上下翻转

flipdim矩阵沿特定维翻转rot90矩阵逆时针旋转90°

diag产生或提取对角矩阵tril提取下三角阵

triu提取上三角阵

例子1:

a=[l:3;4:6;7:9]

b=fliplr(a)

c=flipud(a)

d=flipdim(a,l)

e=flipdim(a,2)

f=rot90(a)

例子2:

v是一个n个元素的向量,k为整数,则

a=diag(v)%将向量v的元素放在a的主对角线

b=diag(v,k)%返回方阵b,b的大小为n+abs(k),向量v的元素位于b的第k条对

角线上;当k>0时,为主对角线以上,当k<0时,为主对角线以下,当k=0时,

结果同命令diag(v)

说明:以上2条命令产生对角矩笆

v=diag(x)%返回x的主对角线元素

v=diag(x,k)%对于矩阵x,返回向量v,v的元素由x的第k条对角线的元素构

说明:以上2条命令提取对角元,产生向量

例子3:

l=tril(a)%返回a的下三角部分,其余部分为0

l=tril(a,k)%返回a的第k条对角线以下的元素,其余部分用0补齐,k=0,结

果同tril(a),k>0位于主对角线以上,k<0位于主对角线以下

l=triu(a)%返回a的上三角部分,其余部分为0

l=triu(a,k)%返回a的第k条对角线以上的元素,其余部分用0补齐,k=0,结

果同triu(a),k>0位于主对角线以上,k<0位于主对角线以下

9

1.2.3设置输出格式

命令:format

format命令控制MATLAB的显示输出格式,但不影响其计算与存储

命令说明例子

formatshort5位定点数

formatlong15位定点数

formatshorte5位浮点数

Formatlonge15位浮点数

formatshortg最佳5位定点数或浮点数

formatlongg最佳15位定点数或浮点数

formathex十六进制数

formatbank精确到分(金融格式)

formatrat用有理分式表示

format+用+表示正数,-表示负数,空格表示

为零元素

formatcompact压缩额外的空行

formatloose显示变量之间插入空行

1.3程序设计入门

1.3.1变量

1.3.1.1命名规则

给变量(包括函数)命名时应该遵循一下规则:

(1)必须以字母开头

(2)可由字母、数字、下划线混合

(3)变量名和函数名字符长度不超过31个字符,如果变量前31个字符

相等而后面字符不同,则作为同一变量处理

1.3.1.2变量定义:局部变量和全局变量

变量并不都需要显示的申明

局部变量在程序中可以定义变量。每个函数体内部也可以定义自己的变

量,这些变量如果不用global声明,则不能从其他函数和MATLAB工作空间中

访问这些变量,这样的变量就是局部变量。

全局变量如果要使得其他函数和MATLAB工作空间使用这些变量,则定

义为全局变量,用“global”声明。

全局变量需要在函数体对变量的赋值语句前说明,整个函数以及所有对函数

10

的递归调用都可以利用全局变量。

变量命名建议:

变量名尽量反映其含义,如汽车数量用numcar,捕鱼收入用incomefish□

局部变量名尽量采用小写,全局变量名尽量大写

1.3.2基本语句

赋值语句是Matlab中的基本语句。其结构为:

(1)变量名列表=表达式

例子:

a=rand(2,5);

a(1,2)=10*rand

(2)另外一个语句可以只有表达式,而没有变量名列表和等号,这样改语

句的结果将自动赋值给MATLAB内部变量“ans”。

例子:

rand(1,5)

size(a)

1.3.3分支判断语句

1.3.3.1if分支判断语句

其通用格式:

IFexpression

statements

ELSEIFexpression

statements

ELSE

statements

END

比较操作符

相等小于大于小于等于大于等于不等于

==<><=>=~二,

逻辑操作符

名称表示符号

与(and)&

或(or)1

非(not)

例子:

grade=yesinput(1情输入你的成绩1,0,[0100]);

ifgrade>=90

11

sprintf(1成绩优异1)

elseifgrade>=80&grade<90

sprintf「成绩优秀,)

elseifgrade>=60&grade<80

sprintf('成绩中等1)

else

sprintf。居然还没有及格D

end

1.3.3.2Switch分支判断语句

Switch语句

通用格式:

SWITCHswitch_expr

CASEcase_expr,

statement,statement

CASE{case_exprl,case_expr2,case_expr3,...}

statement,statement

OTHERWISE,

statement,statement

END

例子:对输入的成绩进行判别

grade=yesinput('请输入成绩',0,[0100]);

grade=fix(grade/10)

switchgrade

case{9,10},

sprintf('成绩优异')

case{8},

sprintf('成绩优秀')

case{6,7},

sprintf('成绩一般')

otherwise,

sprintf('还没有及格')

end

12

1.3.4循环语句

1.3.4.1FOR语句

通用格式:

FORvariable=expr,statement,statementEND

例子:构造一个5行4列的矩阵,并赋值

fori=l:5

forj=l:4

m(i,j)=i*100+j;

end

end

1.3.4.2WHILE语句

通用格式:

WHILEexpression

statements

END

例子:将输入的字符串反序

str=input(,请输入字符串:1,1s1)

tmpstr=str;

i=l;

len=length(str);

whilei<=len

str(len-i+1)=tmpstr(i);

i=i+l;

end

1.3.5Matlab程序M文件

Matlab程序一般保存为扩展名为m的文件,这类文件分为两类:(1)脚本

(2)函数

脚本:

在Matlab中即不接受输入参数,也不返回参数的M文件称为脚本,这类文

件中没有函数申明,它是一些MATLAB函数和命令的组合。

脚本可以直接在MATLAB环境下执行,它可以访问整个MATLAB工作空间

种的变量,而脚本中的变量在脚本执行完后仍然保留在工作空间中,并能被其它

脚本所引用,直到用clear命令清空。

比如建立脚本文件myprol.m,其内容如下:

13

num=inputC输入一个正整数:’)

s=0;

fori=l:num,

s=s+i;

end

s

本脚本功能是输入•个正整数,赋值给num,然后计算1到该正整数的所有

整数的和,并将结果保存到变量s中。

注意:Matlab工作空间中的变量要被函数所引用,必须申明为全局变量

且全局必须在使用前就要申明,语法为:globalvamamelvarname2

例子:

文件:tempi,m

globaltl

tl=[l357]

文件:testfun.m

functionr=testfun(num)

globaltl

r=tl*num

运行:

clearall

tempi

tl=

1357

testfun(2)

r=

261014

ans=

261014

1.3.6函数与子函数

1・3・6,1函数语法结构

函数同其它高级语言一样,是MATLAB语言的重要组成部分,MATLAB除了

内部函数外,还有各种工具箱中的函数,这些函数都以M文件给出,以便调用。

下面以一个例子来说明MATLAB函数的语法。下面是文件名为mean.m的内容。

functiony=mean(x,dim)

%MEANAverageormeanvalue.

%Forvectors,MEAN(X)isthemeanvalueoftheelementsinX.For

%matrices,MEAN(X)isarowvectorcontainingthemeanvalueof

%eachcolumn.ForN-Darrays,MEAN(X)isthemeanvalueofthe

%elementsalongthefirstnon-singletondimensionofX.

%

14

%MEAN(X,DIM)takesthemeanalongthedimensionDIMofX.

%

%Example:IfX=[012

%345]

%thenmean(X,l)is[1.52.53.5]andmean(X,2)is[1

%4]

%SeealsoMEDIAN,STD,MIN,MAX,COV.

%Copyright1984-2001TheMathWorks,Inc.

%$Revision:5.16$$Date:2001/04/1512:01:26$

ifnargin==l,

%DeterminewhichdimensionSUMwilluse

dim=min(find(size(x)-=1));

ifisempty(dim),dim=1;end

y=sum(x)/size(x,dim);

else

y=sum(x,dim)/size(x,dim);

end

mean是MATLAB用于统计的一个函数。第一行为函数的声明,

函数语法为:

function[返回参数列表]=函数名(输入参数列表)

mean的返回参数为y,y可以用中括号括起来。输入参数为x和dim,

nargin^Hnargout为MATLAB的内部变量,分别表示输入参数个数和输出参数个

数,由于有些函数要进行参数个数检查或在一些函数实现时参数个数不确定,因

此要借助这两个变量进行程序算法设计和控制。

百分号%用于注释,%后的字符串表示注释文本

1.3.6.2函数编写示例

求任意两个自然数之间(包含两个自然数)所有自然数的和。

输入参数2各,输出参数1个,即返回和值。

函数名这里取为sum2,函数名要有一定意义,才便于记忆,而且不要于系统内

部函数相同,可以通过“help函数名”看一下改函数名是否为系统函数。

functionr=sum2(nl,n2)

%sum2求任意自然数nl和n2之间(含nl和n2)所有整数的和

ifn2>=nl,

r=(n2-n1+1)*(n1+n2)/2;

else

i^(nl-n2+l)*(nl+n2)/2;

end

输入:

sum2(l,100)

15

ans=

5050

1.3.6.3函数的参数

参数的传递规则

每个函数有自己专用的工作空间,函数内部变量与MATLAB工作空间的联系只

通过输入参数与输出参数来建立。参数的传递属于值传递,即输入参数变量的值

在函数内部改变了,而在调用改函数时没有作为返回参数,那么这个输入参数变

量的并没有改变。

例如:

functionr=testl(a)

%改变输入参数a的值

r=[];

a=999;

r=a;

运行:

a=100;testl(a);a

输出:

a=

100

说明a的值并没有改变,可以这样调用来改变a的值。

»a=100;a=test1(a);a

输出:

999

1.3.6.4子函数

函数文件可以包含一个以上的函数,该文件中的第一个函数时主函数,后面

定义的所有函数都是子函数,子函数只允许同一个文件中的函数及其它函数访

问。函数文件名要与主函数名相同。

functions=mymainfun

num=input,输入一个正整数:)

sprintf('从1到整数%d的和为%d',num,mysum(num))

functions=mysum(num)

%求1到num所有整数相加之和

s=0;

fori=l:num,

s=s+i;

end

16

私有函数

私有函数指位于private目下的函数,它们只能被其上一层目录的函数访问,

对于其它目录的函数是部可见的,这就允许私有函数可以与其它目录下的函数同

名。

MATLAB在执行某个程序或函数时,如果它有私有目录,则先查找私有目录,

在根据MATLAB的PATH查找其它目录下的函数。

如果建立了私有函数目录,则不要添加到MATLAB的查找路径当中。

技巧:

1.3.7建立内部函数

命令:

inline

语法:

inline(expr)根据expr建立内部函数,函数自变量根据表达式自动搜索;

inline(expr,argl,arg2,...)指定参数,argl等参数是字符串参数

inline(expr,N)参数为x,Pl,P2,…,PN为

例子:

g=inline('tA2')

f=inline('xyz','x',"y','z')

g=inline('xAPl+xAP2',2)

例子:运行如下

f=inline('xA2+yA3')

f-

Inlinefunction:

f(x,y)=xA2+jA3

f(3,l)

ans=

10

1.4字符串函数

1.4.1函数简介

在MATLAB程序设计中,在处理数据的输入与输出时,字符串函数是比较

常用的。

表字符串操作函数

函数名调用格式功能

strcatT=STRCAT(S1,S2,S3,..)连接字符串

strvcatS=STRVCAT(T1,T2,T3,..)垂直连接字符串

strcmpSTRCMP(SI,S2)比较字符串,S1与S2相同返回1,不同则返回0,区别

17

大小写

strncmpSTRNCMP(S1,S2,N)比较2字符串的前N个字符,区别大小写

strcmpiSTRCMPI(SI,S2)比较字符串,忽略大小写

strncmpiSTRNCMPI(SI,S2,N)ComparefirstNcharactersofstringsignoringcase.不区

别大小写

findstrK=FINDSTR(S1,S2)寻找较短的字符串在较长字符串中的位置索引

strjustT=STRJUST(S)调整字符串

T=STRJUST(S/right')

T=STRJUST(S,'center)

T=STRJUST(S,'left')

strmatchI=STRMATCH(STR,STRS)在字符串矩阵STRS中寻找以STR开头的字符串

strrepS=STRREP(S1.S2,S3)将S1中包含的字符串S2替换为S3,要区分大小写

strtokSTRTOK(S)返回字符串中除去开始的空白串的第一个标记字符串

[t,r]=STRTOK(S,D)

upperB=UPPER(A)将字符串转换成大写

lowerB=LOWER(A)将字符串转换成小写

字符串与数值转换函数

函数名调用格式功能

t=num2str(x)将数值转换成字符串

num2strt=num2str(x,n)n表示转换精度

int2strs=int2str(x)将整数转换成字符串

将矩阵mat转换成可以计算的字符

mat2strstr=mat2str(mat)

str2doublex=str2double(s)将字符串转换成双精度数

str2numx=str2num(s)将字符串矩阵转换成数值矩阵

format是格式化字符串,a,..是矩阵

sprintf[s,errmsg]=sprintf(format,a,...)

参数,errmsg是可选的

Count,errmsg,nextindex,size是可选

[a,count,errmsg,nextindx]=sscanf(s,format,size)的输入、输出参数

sscanf

Size指定所读的元素个数,若没有则

整个字符串都读取

1.4.2例子

例子1:

num2str(randn(2,2),3)

输出:

ans=

-0.4330.125

-1.670.288

例子2:

mat=magic(3)

str=mat2str(mat)

18

matnew=eval(str)

输出:

mat=

816

357

492

[816;357;492]

matnew=

816

357

492

其它函数:

char(x)-将x中非负数转换成字符

double(x)-将x转换成双精度类型数据

blanks(n)-生成n个空格字符

deblank(s)-删除s末尾的空格

eval(s)-计算Matlab字符串s

字符测试:

ischar(s)-属于字符则返回1,否则返回0

isletter(s)-属于字母则返回1,否则返回0

isspace(s)-属于空白字符则返回1,否则返回0.

文件操作函数

1.4.3文件处理函数

matlab\iofun

格式化的文件I/O函数

fgetl-从文件中读取一行数据,不保留行结束符

fgets-从文件中读取一行数据,保留行结束符

fprintf-将格式化的数据写到文件

fscanf-从文件中读取格式化的数据

input-输入函数

textread-从文件读取格式化的数据

字符串转换函数

sprintf-将数据格式化成字符串

sscanf-按照格式从字符串种读取数据

strread-从文本字符串种读取格式化数据

文件打开、关闭函数

fopen-打开文件

fclose-关闭文件

二进制文件I/O函数

fread-从文件读取二进制数据.

fwrite-将二进制数据写到文件中去

19

文件位置函数

feof-测试是否到文件结尾

ferror-查询文件错误状态

frewind-将文件位置指示到文件开始

fseek-设置文件位置指示器

ftell-获得文件位置指示器

1.4.4读取格式化文件例子

现有一个文本文件data.txt,其数据内容如下,每行有固定格式,均有5个数,

文件内容如下:

2002010131253023

2002010135354025

2002010145296030

2002010165758040

现要将该文件数据读入矩阵中,读取该文件的程序如下(flread.m)

fid=fopen(1data.txt',1rt1);

iffid<0

sprintf(*failureforreadingfileday.txt1)

return

end

row=0;

while-feof(fid)

str=fgets(fid);

row=row+l;

ifrow>l,

m(rowz:)=str2num(str);

else

m=str2num(str);

end

end

fclose(fid);

输出:

说明:

由于是逐行读取,所以要判断是否读完,使用函数feof判断

fgets:读取一行的字符串

如果有些行在最后少了数据,则原来的程序会出错,出错行为下面的语句:

m(row,:)=str2num(str)

该行可改写为两行:

tmp=str2num(str);

m(row,1:length(tmp))=tmp

20

1.5二维作图

1.5.1基本图形

1.5.1.1线性坐标平面图

(1)plot(Y)根据Y的索引建立平面图,其横坐标向量等于l:length(Y),如果Y

为虚数,则等

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论