版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
內(nèi)部資料
數(shù)學(xué)建模編程培訓(xùn)
數(shù)學(xué)建模教練組編寫
2008年7月
目錄
1Matlab軟件1
1.1基本介紹1
1.1.1軟件簡介1
1.1.2工作環(huán)境介紹1
1.1.3數(shù)據(jù)結(jié)構(gòu)3
1.1.4Matlab語言的特點3
1.1.5Matlab中的常量與特殊變量3
1.1.6特殊符號3
1.1.7Matlab常用函數(shù)4
1.2矩陣函數(shù)7
1.2.1構(gòu)造矩陣7
1.2.2矩陣變換操作9
1.2.3設(shè)置輸出格式10
1.3程序設(shè)計入門10
1.3.1變量10
1.3.2基本語句11
1.3.3分支判斷語句11
1.3.4循環(huán)語句13
1.3.5Matlab程序M文件13
1.3.6函數(shù)與子函數(shù)14
1.3.7建立內(nèi)部函數(shù)17
1.4字符串函數(shù)17
1.4.1函數(shù)簡介17
1.4.2例子18
1.4.3文件處理函數(shù)19
1.4.4讀取格式化文件例子20
1.5二維作圖21
1.5.1基本圖形21
1.6Matlab編程練習(xí)題23
1.6.1練習(xí)123
1.6.2練習(xí)224
1.7編程中經(jīng)常發(fā)現(xiàn)的問題24
2Mathematica快速入門26
2.1Mathematica簡介26
2.1.1命令輸入與運行26
2.1.2數(shù)、表達式和變量28
2.1.3常用的內(nèi)部函數(shù)30
2.1.4自定義函數(shù)33
2.1.5常用菜單35
2.2基本繪圖命令、數(shù)組與數(shù)據(jù)擬合38
2.2.1基本繪圖命令38
2.2.2數(shù)組運算42
2.2.3數(shù)據(jù)擬合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程序設(shè)計簡介51
2.5.1Mathematica程序設(shè)計基本命令51
2.5.2Mathematica動畫制作簡介53
3遞歸程序設(shè)計55
3.1計算階乘55
3.2組合數(shù)學(xué)中的Pascal公式55
3.3漢諾塔問題56
3.3.1"Hanoi塔”問題56
3.3.2問題求解56
3.3.3實現(xiàn)程序56
3.4案例:商人安全過河問題57
3.4.1問題分析57
3.4.2模型建立58
3.4.3模型求解58
3.4.4進一步的思考題58
3.4.5程序運行結(jié)果59
3.4.6遞歸算法求解程序59
4優(yōu)化模型及其求解66
4.1案例:背包問題66
4.1.1問題分析66
4.1.2變量與符號說明66
4.1.3模型建立66
4.1.4模型求解及結(jié)果67
4.1.5貪婪法68
4.1.6貪婪法求解程序68
4.1.7貪婪法求解結(jié)果69
4.1.8窮舉法求解程序69
4.1.9窮舉法程序運行結(jié)果71
4.2案例:高速公路問題71
4.2.1問題分析72
4.2.2變量說明72
4.2.3模型假設(shè)72
4.2.4模型建立72
4.2.5模型求解73
4.2.6模型結(jié)果及分析73
4.2.7求解模型的主程序文件73
4.3隨機跳躍法74
4.3.1隨機跳躍法簡介74
4.3.2求解高速公路問題的隨機跳躍法程序75
4.3.3程序運行結(jié)果76
4.4網(wǎng)格法76
4.4.1網(wǎng)格法簡介76
4.4.2求解高速公路問題的網(wǎng)格法程序77
4.4.3程序運行結(jié)果78
4.5實驗:開放式基金的投資問題78
5系統(tǒng)模擬80
5.1概述80
5.1.1模擬技術(shù)80
5.1.2模擬時間80
5.1.3模擬語言81
5.1.4隨機數(shù)的模擬81
5.1.5隨機數(shù)的產(chǎn)生81
5.1.6模擬均勻分布隨機變量的函數(shù)82
5.1.7模擬指數(shù)分布隨機變量的函數(shù)83
5.1.8模擬正態(tài)分布隨機變量的函數(shù)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模擬程序設(shè)計88
5.3.5模型求解結(jié)果及分析88
5.3.6模擬程序88
5.3.7思考題90
5.4案例:核反應(yīng)堆屏蔽層設(shè)計問題90
5.4.1問題描述與分析90
5.4.2模型假設(shè):91
5.4.3中子運動的數(shù)學(xué)描述91
5.4.4模擬過程91
5.4.5模擬結(jié)果92
5.4.6模擬程序92
5.4.7思考題94
III
5.5案例:理發(fā)店系統(tǒng)研究94
5.5.1問題分析94
5.5.2模型假設(shè):94
5.5.3變量說明:95
5.5.4模型建立95
5.5.5系統(tǒng)模擬:95
5.5.6系統(tǒng)模擬算法設(shè)計96
5.5.7系統(tǒng)模擬程序96
5.6實驗題目100
5.6.1實驗:趕上火車的概率100
5.6.2實驗:小狗追人的故事101
5.6.3實驗:一個修理廠的模擬104
5.6.4實驗:超市收費服務(wù)系統(tǒng)105
6編程中常見錯誤105
6.1常見語法錯誤105
6.1.1引用未定義變量105
6.1.2下標越界105
6.1.3維數(shù)不同賦值106
6.2邏輯錯誤106
6.2.1變量未初始化106
6.2.2變量名誤用106
6.2.3程序?qū)崿F(xiàn)錯誤107
6.3如何查找程序中的錯誤107
6.3.1查找錯誤的一般原則107
6.3.2-一般查錯順序107
7動態(tài)規(guī)劃建模舉例107
7.1動態(tài)規(guī)劃方法介紹108
7.2動態(tài)規(guī)劃求解示例108
7.2.1背包問題108
7.3例子:運載問題110
7.3.1前向算法建立動態(tài)規(guī)劃模型110
7.3.2后向算法建立動態(tài)規(guī)劃模型114
7.3.3求解方法結(jié)果對比分析116
7.4應(yīng)用中面臨的問題117
8連續(xù)系統(tǒng)建模與模型求解選講118
8.1常用Mathematica命令118
8.2案例:冷卻模型121
8.2.1問題分析121
8.2.2基本假設(shè)121
8.2.3變量說明121
8.2.4建立模型121
8.2.5求解122
8.2.6進一步思考122
8.3案例:戰(zhàn)斗模型122
IV
8.3.1問題分析122
8.3.2基本假設(shè)123
8.3.3變量說明123
8.3.4建立模型123
8.3.5求解模型123
8.3.6進一步分析124
8.4案例:人口增長預(yù)測125
8.4.1問題分析125
8.4.2基本假設(shè)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模型假設(shè)127
8.5.4模型建立128
8.5.5微分方程數(shù)值解129
8.5.6系統(tǒng)模擬法求解問題130
8.6實驗習(xí)題132
9統(tǒng)計問題建模及求解134
9.1常用Mathematica命令134
9.2案例:合金的抗拉強度控制135
9.3建模習(xí)題141
10Matlab優(yōu)化工具箱142
10.1簡介142
10.2一元非線性方程求根144
10.3非線性方程組求解145
10.4無約束非線性最小化146
10.4.1fminbnd求單變量函數(shù)最小值點146
10.4.2fminunc148
10.4.3fminsearch求多變量函數(shù)最小值點148
10.5有約束非線性最小化fmincon149
10.6線性規(guī)劃linprog151
10.7最小二乘和曲線擬合152
10.7.1線性最小二乘152
10.8非線性曲線擬合Isqcurvefit153
11數(shù)學(xué)建模案例155
11.1案例:節(jié)水洗衣機155
11.1.1問題重述與分析155
11.1.2基本假設(shè)及說明155
11.1.3符號和變量說明156
11.1.4建模準備156
11.1.5模型建立157
v
11.1.6模型求解158
11.1.7思考題163
12Lingo數(shù)學(xué)軟件164
12.1LINGO快速入門164
12.2LINGO中的集165
12.3模型的數(shù)據(jù)部分和初始部分169
12.4LINGO函數(shù)172
12.5LINGOWINDOWS命令183
12.6LINGO的命令行命令199
12.7綜合舉例203
VI
1Matlab軟件
1.1基本介紹
l.i.i軟件簡介
它已經(jīng)成為世界上應(yīng)用最廣泛的數(shù)學(xué)軟件之一,尤其在工程計算領(lǐng)域、高校
應(yīng)用最廣。該軟件以矩陣運算為基礎(chǔ),將計算、可視化、程序設(shè)計融合在簡單易
用的交互式環(huán)境中。
運用MATLAB可以實現(xiàn)工程計算、數(shù)學(xué)建模、計算機模擬、算法研究、數(shù)
據(jù)分析與處理、科學(xué)與工程繪圖、應(yīng)用軟件開發(fā)、數(shù)值計算、圖形、圖像處理,
支持遞歸函數(shù),還有多種工具箱(不同領(lǐng)域)。
Matlab部分工具箱:
控制系統(tǒng)工具箱(ControlSystemToolbox)
小波工具箱(WaveletToolbox)
模糊邏輯工具箱(FuzzyLogicToolbox)
神經(jīng)網(wǎng)絡(luò)工具箱(NeuralNetworkToolbox)
通信工具箱(CommunicationToolbox)
圖象處理工具箱(ImageProcessingToolbox)
優(yōu)化工具箱(OptimizationToolbox)
財政金融工具箱(FinancialToolbox)
樣條工具箱(SplineToolbox)
統(tǒng)計工具箱(StatisticsToolbox)
信號處理工具箱(SignalProcessingToolbox)
1.1.2工作環(huán)境介紹
1.1.2.1搜索路徑管理
(1)命令形式設(shè)置:
path查看或設(shè)置當前的搜索路徑
用法:
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..將當前目錄設(shè)置其上級目錄(有空格)
(2)界面設(shè)置
通過菜單File->SetPath會打開一個窗口,用于添加、刪除搜索路徑,可以方
便的打開、運行MATLAB文件。
1.1.2.2工作環(huán)境管理
查看工作空間變量
菜單方式:
通過File選擇"ShowWorkspace"菜單條可以顯示當前工作環(huán)境內(nèi)的變量。
執(zhí)行如下命令:
clearall
x=rand(3,l)
x=
2
0.9501
0.2311
0.6068
通過open按鈕可以打開變量進行編輯。
命令方式:
who顯示當前工作空間的變量名
whos顯示當前工作空間的每個變量的信息
whoglobal顯示當前工作空間全局變量名
whosglobal顯示當前工作空間全局變量的信息
1.1.3數(shù)據(jù)結(jié)構(gòu)
在MATLAB中基本數(shù)據(jù)結(jié)構(gòu)是矩陣,而矩陣一般分為:數(shù)值矩陣、字符串
矩陣。
例如:
a=l:10
a=ones(3,2)%前2行為數(shù)值矩陣
s=,helloworld,%為1行11列字符串矩陣
1.1.4Matlab語言的特點
令語言簡介,編程效率高
令變量名區(qū)分大小寫:如:count與Count,num、Num與NUM在MATLAB
指的是不同的變量。
令豐富的內(nèi)部函數(shù)、外部函數(shù)、工具箱
令易擴展性
1.1.5Matlab中的常量與特殊變量
i,j:虛數(shù)單位,如3+2i,2+3j,4j+30,這里的i,j必須是小寫字母
pi:圓周率3.14159265358979…,必須為小寫
realmax:
realmin:
inf:無窮大
NaN:表示不是一個數(shù)值,意思是NotaNumber
ver或version:版本信息
ans:變量,用于存儲當前語句未保存的計算結(jié)果
1.1.6特殊符號
符號說明例子
產(chǎn)生向量,用于循環(huán)V=l:3;v=-l:0.5:3;
用于分割命令或元素
?命令結(jié)束符號,運算結(jié)果不A=[l23;456],
顯示;用于創(chuàng)建矩陣分行B=AA2;
3
例子:
fori=l:3,
forj=1:4,
tmp=j,
m(i,j)=i*100+j;
end
end
1.1.7Matlab常用函數(shù)
1、ones產(chǎn)生元素均為一的矩陣
常見用法:
ones(n)產(chǎn)生nXn矩陣
ones(m,n)或ones([mn])產(chǎn)生mXn矩陣
ones(size(A))產(chǎn)生與A同樣維數(shù)的矩陣
舉例:
ones(3,5)
ans=
11111
11111
11111
2、zeros產(chǎn)生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產(chǎn)生-?個在(0,1)之間的均勻分布的數(shù)
5、randn產(chǎn)生正態(tài)分布隨機數(shù)
用法:
randn產(chǎn)生一個在服從N(0,l)正態(tài)分布的隨機數(shù)
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)
輸出結(jié)果:
ans=
13467
(2)例子:
x=fix(rand(5)*10),[r,c]=find(x>5);r=r\c=c\length(r)-length(find(x>5))
輸出結(jié)果:
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分的人數(shù)=%5壯人11”11何))
運行結(jié)果:
vec=
4518244617992731740
id=
5
ans=
60-69分的人數(shù)=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
運行結(jié)兵
value=
1191927414446607493
idx=
51431079268
they_are_zero=
0000000000
8^sprintf格式化數(shù)據(jù)輸出,與C語言中的printf函數(shù)用法相似
常見的數(shù)值處理函數(shù)
函數(shù)名功能
sum求和
mean求平均值
round四舍五入
fix向零取整
floor向負無窮方向取整
6
ceil向正無窮方向取整
函數(shù)名功能
mod除法求余(結(jié)果與除數(shù)同號)MOD(x,y)等于x-y.*floor(x./y)
(y不為0),若y=0,則mod(x,0)返回x
rem除法求余(結(jié)果與被除數(shù)同號)REM(x,y)isx-y.*fix(x./y)(y
不為0),若y=0則mod(x,0)返回NaN。
sign符號函數(shù)當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
其它常用函數(shù):
字符串操作函數(shù)matlab\strfun
文件操作函數(shù)matlab\iofun
如:fopen,fprintf,fscanf,fread,fwrite
1.2矩陣函數(shù)
1.2.1構(gòu)造矩陣
1.2.1.1矩陣賦值
a=l:5%產(chǎn)生I行5列的行向量
a=[l:57%產(chǎn)生5行1列的列向量
a=[123;456;789]
a=[...
123
456
789]
1.2.1.2從文本文件導(dǎo)入
如存在文本文件data.txt文件內(nèi)容如下:
2002010131253023
2002010135354025
7
2002010145296030
2002010165758040
使用命令load導(dǎo)入,然后保存的變量名則為文件名:
輸入:
clearall
loaddata.txt
who
data
輸出:
Yourvariablesare:
data
data=
2002010131253023
2002010135354025
2002010145296030
2002010165758040
1.2.1.3從MAT格式文件中導(dǎo)入
這些文件是通過MATLAB的save命令保存的。先了解save命令。
SAVEfname將當前工作環(huán)境變量保存為名為fname.mat的二進制MAT文
件,不要參數(shù)則保存到文件matlab.mat。
例子說明:
SAVEfnameXsavesonlyX.
SAVEfnameXYZ保存變量X、Y、Z.
SAVEfnameXYZ-ASCII保存為8位數(shù)字的文本文件
SAVEfnameXYZ-ASCII-DOUBLE保存為16位數(shù)字的文本文件.
SAVEfnameXYZ-ASCII-DOUBLE-TABS用TAB字符分害1擻據(jù)
SAVEfnameXYZ-V4以MAT格式保存為可用MATLAB4導(dǎo)入的文件
SAVEfnameXYZ-APPEND添加到文件中去
輸入:
clearall
x=rand(3);
y=l:5;
z=[l35;7911;131517];
savemytestxyz
clearall
loadmytest
who
輸出:
Yourvariablesare:
xyz
說明:通過配合save和load命令可以保存指定變量,這將很方便程序處理,比
8
如有些數(shù)據(jù)經(jīng)常要用,則可以保存到文件中,以便以后編程使用
1.2.1.4特殊函數(shù)產(chǎn)生矩陣
rand(m,n)
rand(n)
ones(m,n)
ones(n)
1.2.2矩陣變換操作
函數(shù)名稱功能函數(shù)名稱功能
fliplr矩陣左右翻轉(zhuǎn)flipud矩陣上下翻轉(zhuǎn)
flipdim矩陣沿特定維翻轉(zhuǎn)rot90矩陣逆時針旋轉(zhuǎn)90°
diag產(chǎn)生或提取對角矩陣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為整數(shù),則
a=diag(v)%將向量v的元素放在a的主對角線
b=diag(v,k)%返回方陣b,b的大小為n+abs(k),向量v的元素位于b的第k條對
角線上;當k>0時,為主對角線以上,當k<0時,為主對角線以下,當k=0時,
結(jié)果同命令diag(v)
說明:以上2條命令產(chǎn)生對角矩笆
v=diag(x)%返回x的主對角線元素
v=diag(x,k)%對于矩陣x,返回向量v,v的元素由x的第k條對角線的元素構(gòu)
成
說明:以上2條命令提取對角元,產(chǎn)生向量
例子3:
l=tril(a)%返回a的下三角部分,其余部分為0
l=tril(a,k)%返回a的第k條對角線以下的元素,其余部分用0補齊,k=0,結(jié)
果同tril(a),k>0位于主對角線以上,k<0位于主對角線以下
l=triu(a)%返回a的上三角部分,其余部分為0
l=triu(a,k)%返回a的第k條對角線以上的元素,其余部分用0補齊,k=0,結(jié)
果同triu(a),k>0位于主對角線以上,k<0位于主對角線以下
9
1.2.3設(shè)置輸出格式
命令:format
format命令控制MATLAB的顯示輸出格式,但不影響其計算與存儲
命令說明例子
formatshort5位定點數(shù)
formatlong15位定點數(shù)
formatshorte5位浮點數(shù)
Formatlonge15位浮點數(shù)
formatshortg最佳5位定點數(shù)或浮點數(shù)
formatlongg最佳15位定點數(shù)或浮點數(shù)
formathex十六進制數(shù)
formatbank精確到分(金融格式)
formatrat用有理分式表示
format+用+表示正數(shù),-表示負數(shù),空格表示
為零元素
formatcompact壓縮額外的空行
formatloose顯示變量之間插入空行
1.3程序設(shè)計入門
1.3.1變量
1.3.1.1命名規(guī)則
給變量(包括函數(shù))命名時應(yīng)該遵循一下規(guī)則:
(1)必須以字母開頭
(2)可由字母、數(shù)字、下劃線混合
(3)變量名和函數(shù)名字符長度不超過31個字符,如果變量前31個字符
相等而后面字符不同,則作為同一變量處理
1.3.1.2變量定義:局部變量和全局變量
變量并不都需要顯示的申明
局部變量在程序中可以定義變量。每個函數(shù)體內(nèi)部也可以定義自己的變
量,這些變量如果不用global聲明,則不能從其他函數(shù)和MATLAB工作空間中
訪問這些變量,這樣的變量就是局部變量。
全局變量如果要使得其他函數(shù)和MATLAB工作空間使用這些變量,則定
義為全局變量,用“global”聲明。
全局變量需要在函數(shù)體對變量的賦值語句前說明,整個函數(shù)以及所有對函數(shù)
10
的遞歸調(diào)用都可以利用全局變量。
變量命名建議:
變量名盡量反映其含義,如汽車數(shù)量用numcar,捕魚收入用incomefish□
局部變量名盡量采用小寫,全局變量名盡量大寫
1.3.2基本語句
賦值語句是Matlab中的基本語句。其結(jié)構(gòu)為:
(1)變量名列表=表達式
例子:
a=rand(2,5);
a(1,2)=10*rand
(2)另外一個語句可以只有表達式,而沒有變量名列表和等號,這樣改語
句的結(jié)果將自動賦值給MATLAB內(nèi)部變量“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成績優(yōu)異1)
elseifgrade>=80&grade<90
sprintf「成績優(yōu)秀,)
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('成績優(yōu)異')
case{8},
sprintf('成績優(yōu)秀')
case{6,7},
sprintf('成績一般')
otherwise,
sprintf('還沒有及格')
end
12
1.3.4循環(huán)語句
1.3.4.1FOR語句
通用格式:
FORvariable=expr,statement,statementEND
例子:構(gòu)造一個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)函數(shù)
腳本:
在Matlab中即不接受輸入?yún)?shù),也不返回參數(shù)的M文件稱為腳本,這類文
件中沒有函數(shù)申明,它是一些MATLAB函數(shù)和命令的組合。
腳本可以直接在MATLAB環(huán)境下執(zhí)行,它可以訪問整個MATLAB工作空間
種的變量,而腳本中的變量在腳本執(zhí)行完后仍然保留在工作空間中,并能被其它
腳本所引用,直到用clear命令清空。
比如建立腳本文件myprol.m,其內(nèi)容如下:
13
num=inputC輸入一個正整數(shù):’)
s=0;
fori=l:num,
s=s+i;
end
s
本腳本功能是輸入?個正整數(shù),賦值給num,然后計算1到該正整數(shù)的所有
整數(shù)的和,并將結(jié)果保存到變量s中。
注意:Matlab工作空間中的變量要被函數(shù)所引用,必須申明為全局變量
且全局必須在使用前就要申明,語法為: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函數(shù)與子函數(shù)
1?3?6,1函數(shù)語法結(jié)構(gòu)
函數(shù)同其它高級語言一樣,是MATLAB語言的重要組成部分,MATLAB除了
內(nèi)部函數(shù)外,還有各種工具箱中的函數(shù),這些函數(shù)都以M文件給出,以便調(diào)用。
下面以一個例子來說明MATLAB函數(shù)的語法。下面是文件名為mean.m的內(nèi)容。
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用于統(tǒng)計的一個函數(shù)。第一行為函數(shù)的聲明,
函數(shù)語法為:
function[返回參數(shù)列表]=函數(shù)名(輸入?yún)?shù)列表)
mean的返回參數(shù)為y,y可以用中括號括起來。輸入?yún)?shù)為x和dim,
nargin^Hnargout為MATLAB的內(nèi)部變量,分別表示輸入?yún)?shù)個數(shù)和輸出參數(shù)個
數(shù),由于有些函數(shù)要進行參數(shù)個數(shù)檢查或在一些函數(shù)實現(xiàn)時參數(shù)個數(shù)不確定,因
此要借助這兩個變量進行程序算法設(shè)計和控制。
百分號%用于注釋,%后的字符串表示注釋文本
1.3.6.2函數(shù)編寫示例
求任意兩個自然數(shù)之間(包含兩個自然數(shù))所有自然數(shù)的和。
輸入?yún)?shù)2各,輸出參數(shù)1個,即返回和值。
函數(shù)名這里取為sum2,函數(shù)名要有一定意義,才便于記憶,而且不要于系統(tǒng)內(nèi)
部函數(shù)相同,可以通過“help函數(shù)名”看一下改函數(shù)名是否為系統(tǒng)函數(shù)。
functionr=sum2(nl,n2)
%sum2求任意自然數(shù)nl和n2之間(含nl和n2)所有整數(shù)的和
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函數(shù)的參數(shù)
參數(shù)的傳遞規(guī)則
每個函數(shù)有自己專用的工作空間,函數(shù)內(nèi)部變量與MATLAB工作空間的聯(lián)系只
通過輸入?yún)?shù)與輸出參數(shù)來建立。參數(shù)的傳遞屬于值傳遞,即輸入?yún)?shù)變量的值
在函數(shù)內(nèi)部改變了,而在調(diào)用改函數(shù)時沒有作為返回參數(shù),那么這個輸入?yún)?shù)變
量的并沒有改變。
例如:
functionr=testl(a)
%改變輸入?yún)?shù)a的值
r=[];
a=999;
r=a;
運行:
a=100;testl(a);a
輸出:
a=
100
說明a的值并沒有改變,可以這樣調(diào)用來改變a的值。
?a=100;a=test1(a);a
輸出:
999
1.3.6.4子函數(shù)
函數(shù)文件可以包含一個以上的函數(shù),該文件中的第一個函數(shù)時主函數(shù),后面
定義的所有函數(shù)都是子函數(shù),子函數(shù)只允許同一個文件中的函數(shù)及其它函數(shù)訪
問。函數(shù)文件名要與主函數(shù)名相同。
functions=mymainfun
num=input,輸入一個正整數(shù):)
sprintf('從1到整數(shù)%d的和為%d',num,mysum(num))
functions=mysum(num)
%求1到num所有整數(shù)相加之和
s=0;
fori=l:num,
s=s+i;
end
16
私有函數(shù)
私有函數(shù)指位于private目下的函數(shù),它們只能被其上一層目錄的函數(shù)訪問,
對于其它目錄的函數(shù)是部可見的,這就允許私有函數(shù)可以與其它目錄下的函數(shù)同
名。
MATLAB在執(zhí)行某個程序或函數(shù)時,如果它有私有目錄,則先查找私有目錄,
在根據(jù)MATLAB的PATH查找其它目錄下的函數(shù)。
如果建立了私有函數(shù)目錄,則不要添加到MATLAB的查找路徑當中。
技巧:
1.3.7建立內(nèi)部函數(shù)
命令:
inline
語法:
inline(expr)根據(jù)expr建立內(nèi)部函數(shù),函數(shù)自變量根據(jù)表達式自動搜索;
inline(expr,argl,arg2,...)指定參數(shù),argl等參數(shù)是字符串參數(shù)
inline(expr,N)參數(shù)為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字符串函數(shù)
1.4.1函數(shù)簡介
在MATLAB程序設(shè)計中,在處理數(shù)據(jù)的輸入與輸出時,字符串函數(shù)是比較
常用的。
表字符串操作函數(shù)
函數(shù)名調(diào)用格式功能
strcatT=STRCAT(S1,S2,S3,..)連接字符串
strvcatS=STRVCAT(T1,T2,T3,..)垂直連接字符串
strcmpSTRCMP(SI,S2)比較字符串,S1與S2相同返回1,不同則返回0,區(qū)別
17
大小寫
strncmpSTRNCMP(S1,S2,N)比較2字符串的前N個字符,區(qū)別大小寫
strcmpiSTRCMPI(SI,S2)比較字符串,忽略大小寫
strncmpiSTRNCMPI(SI,S2,N)ComparefirstNcharactersofstringsignoringcase.不區(qū)
別大小寫
findstrK=FINDSTR(S1,S2)尋找較短的字符串在較長字符串中的位置索引
strjustT=STRJUST(S)調(diào)整字符串
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,要區(qū)分大小寫
strtokSTRTOK(S)返回字符串中除去開始的空白串的第一個標記字符串
[t,r]=STRTOK(S,D)
upperB=UPPER(A)將字符串轉(zhuǎn)換成大寫
lowerB=LOWER(A)將字符串轉(zhuǎn)換成小寫
字符串與數(shù)值轉(zhuǎn)換函數(shù)
函數(shù)名調(diào)用格式功能
t=num2str(x)將數(shù)值轉(zhuǎn)換成字符串
num2strt=num2str(x,n)n表示轉(zhuǎn)換精度
int2strs=int2str(x)將整數(shù)轉(zhuǎn)換成字符串
將矩陣mat轉(zhuǎn)換成可以計算的字符
mat2strstr=mat2str(mat)
串
str2doublex=str2double(s)將字符串轉(zhuǎn)換成雙精度數(shù)
str2numx=str2num(s)將字符串矩陣轉(zhuǎn)換成數(shù)值矩陣
format是格式化字符串,a,..是矩陣
sprintf[s,errmsg]=sprintf(format,a,...)
參數(shù),errmsg是可選的
Count,errmsg,nextindex,size是可選
[a,count,errmsg,nextindx]=sscanf(s,format,size)的輸入、輸出參數(shù)
sscanf
Size指定所讀的元素個數(shù),若沒有則
整個字符串都讀取
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
其它函數(shù):
char(x)-將x中非負數(shù)轉(zhuǎn)換成字符
double(x)-將x轉(zhuǎn)換成雙精度類型數(shù)據(jù)
blanks(n)-生成n個空格字符
deblank(s)-刪除s末尾的空格
eval(s)-計算Matlab字符串s
字符測試:
ischar(s)-屬于字符則返回1,否則返回0
isletter(s)-屬于字母則返回1,否則返回0
isspace(s)-屬于空白字符則返回1,否則返回0.
文件操作函數(shù)
1.4.3文件處理函數(shù)
matlab\iofun
格式化的文件I/O函數(shù)
fgetl-從文件中讀取一行數(shù)據(jù),不保留行結(jié)束符
fgets-從文件中讀取一行數(shù)據(jù),保留行結(jié)束符
fprintf-將格式化的數(shù)據(jù)寫到文件
fscanf-從文件中讀取格式化的數(shù)據(jù)
input-輸入函數(shù)
textread-從文件讀取格式化的數(shù)據(jù)
字符串轉(zhuǎn)換函數(shù)
sprintf-將數(shù)據(jù)格式化成字符串
sscanf-按照格式從字符串種讀取數(shù)據(jù)
strread-從文本字符串種讀取格式化數(shù)據(jù)
文件打開、關(guān)閉函數(shù)
fopen-打開文件
fclose-關(guān)閉文件
二進制文件I/O函數(shù)
fread-從文件讀取二進制數(shù)據(jù).
fwrite-將二進制數(shù)據(jù)寫到文件中去
19
文件位置函數(shù)
feof-測試是否到文件結(jié)尾
ferror-查詢文件錯誤狀態(tài)
frewind-將文件位置指示到文件開始
fseek-設(shè)置文件位置指示器
ftell-獲得文件位置指示器
1.4.4讀取格式化文件例子
現(xiàn)有一個文本文件data.txt,其數(shù)據(jù)內(nèi)容如下,每行有固定格式,均有5個數(shù),
文件內(nèi)容如下:
2002010131253023
2002010135354025
2002010145296030
2002010165758040
現(xiàn)要將該文件數(shù)據(jù)讀入矩陣中,讀取該文件的程序如下(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);
輸出:
說明:
由于是逐行讀取,所以要判斷是否讀完,使用函數(shù)feof判斷
fgets:讀取一行的字符串
如果有些行在最后少了數(shù)據(jù),則原來的程序會出錯,出錯行為下面的語句:
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)根據(jù)Y的索引建立平面圖,其橫坐標向量等于l:length(Y),如果Y
為虛數(shù),則等
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第3章 第3節(jié) 水資源(新教學(xué)實錄)2023-2024學(xué)年八年級上冊地理(人教版)
- 第5單元第14課《新年賀卡-綜合制作》教學(xué)實錄 2023-2024學(xué)年清華大學(xué)版(2012)初中信息技術(shù)八年級上冊
- 山東省郯城縣郯城街道初級中學(xué)初中信息技術(shù)《圖像處理》教學(xué)實錄2
- 2024版二手車交易居間服務(wù)標準化合同
- 2024-2025學(xué)年新教材高中政治 第4單元 國際組織 第9課 第2框 中國與新興國際組織教學(xué)實錄 新人教版選擇性必修1
- 2024年度高端商務(wù)車輛租賃及維護服務(wù)合同3篇
- 按月還息抵押借款合同
- 2024版房產(chǎn)買賣居間合同專業(yè)版3篇
- 農(nóng)村魚塘租賃合同
- 2024年樹木批發(fā)銷售協(xié)議規(guī)范格式一
- GSP對藥品經(jīng)營企業(yè)計算機系統(tǒng)的要求
- 課堂-可以這么有聲有色
- 京瓷哲學(xué)培訓(xùn)課件
- 天貓電子商務(wù)案例分析
- 2022年1201廣東選調(diào)生考試《綜合行政能力測驗》真題
- 有機肥料采購項目售后服務(wù)方案
- 綜合實踐活動(1年級下冊)第3課時 感恩卡設(shè)計與制作-課件
- 2023河南省科學(xué)院招聘144人筆試參考題庫(共500題)答案詳解版
- (完整版)小學(xué)生英語百科知識競賽題及答案
- 肥料、農(nóng)藥采購服務(wù)方案(技術(shù)方案)
- 腦卒中后吞咽障礙患者進食護理(2023年中華護理學(xué)會團體標準)
評論
0/150
提交評論