版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内部资料
数学建模编程培训
数学建模教练组编写
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024三个小孩抚养权协议及共同财产分割合同6篇
- 2025年服装机械项目申请报告模板
- 2024-2025学年新疆维吾尔阿勒泰地区数学三上期末统考模拟试题含解析
- 2024-2025学年武功县数学三年级第一学期期末联考试题含解析
- 去工厂实习报告模板十篇
- 2024年消防喷淋安装施工总承包合同文件
- 超市的实习报告四篇
- 2025年伺服系统项目申请报告模稿
- 2025年咖啡机项目规划申请报告
- 2024年度水电供应专用合同合同一
- 英国自然风景式园林
- 医院转诊转院记录单
- 大件运输专业知识课件
- 国开电大财务管理学习活动第4章 腾讯公司融资案例分析参考答案
- UPS现场巡检维护保养记录表
- 空白教案模板(表格形式-已排版)
- 中药学第十九章活血化瘀药课件
- 99S203消防水泵接合器安装图集
- 实操考评表(模版)
- 桥梁的施工组织设计
- 消火栓试射试验记录
评论
0/150
提交评论