MATLAB经典数学的建模教程.docx
- 文档编号:4754678
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:136
- 大小:567.39KB
MATLAB经典数学的建模教程.docx
《MATLAB经典数学的建模教程.docx》由会员分享,可在线阅读,更多相关《MATLAB经典数学的建模教程.docx(136页珍藏版)》请在冰豆网上搜索。
MATLAB经典数学的建模教程
第1节Matlab基本知识
一、Matlab的主要功能
Matlab是一种功能非常强大的工程语言,诞生于20世纪70年代,1984年正式推向市场。
2002年8月,Matlab6.5开始发布。
是进行科学研究和产品开发必不可少的工具。
●数值和符号计算
矩阵(数组)的四则运算(Matrix+Laboratory)、数值差分、导数、积分、求解微分方程、微分方程的优化等
●数字图像、数字信号处理
●工程和科学绘图
●控制系统设计
●财务工程
●建模、仿真功能
二、Matlab的界面
1.命令窗口(CommandWindow):
Matlab各种操作命令都是由命令窗口开始,用户可以在命令窗口中输入Matlab命令,实现其相应的功能。
此命令窗口主要包括文本的编辑区域和菜单栏(如:
四则运算;“;”禁止显示变量的值;↑↓遍历以前的命令)。
在命令窗口空白区域单击鼠标右键,打开快捷菜单,各项命令功能如下:
EvaluateSelection:
打开所选文本对应的表达式的值。
OpenSelection:
打开文本所对应的MatLab文件。
Cut:
剪切编辑命令。
Paste:
粘贴编辑命令。
2.M-文件编辑/调试(Editor/Debugger)窗口
MatlabEditor/Debugger窗口是一个集编辑与调试两种功能于一体的工具环境。
M-文件(函数文件)
●什么是M-文件:
它是一种和Dos环境中的批处理文件相似的脚本文件,对于简单问题,直接输入命令即可,但对于复杂的问题和需要反复使用的则需做成M-文件(ScriptFile)。
●创建M-文件的方法:
Matlab命令窗的File/New/M-file。
在Matlab命令窗口运行edit。
●M-文件的扩展名:
*.m
●执行M-文件:
F5
●M文件的调试
选择Debug菜单,其各项命令功能如下:
Step:
逐步执行程序。
Stepin:
进入子程序中逐步执行调试程序。
Stepout:
跳出子程序中逐步执行调试程序。
run:
执行M-文件。
GoUntilCursor:
执行到光标所在处。
ExitDebugMode:
跳出调试状态。
●函数文件的创建要求:
文件名与函数名必须相同,如sin(x)必有sin.m函数文件存在。
要求实参和形参位置一一对应。
形参在工作空间中不会存在。
可以编写递归函数,可以嵌套其他函数。
可以用return命令返回,也可以执行到终点返回
3.工作空间(Workspace)窗口:
显示目前保存在内存中的Matlab的数学结构、字节数、变量名以及类型窗口。
保存变量:
File菜单\SaveWorkspaceas命令行:
save文件名
装入变量:
File菜单\ImportData命令行:
Load文件名
4.现在目录窗口(CurrentDirectory)
5.命令历史窗口(CommandHistory):
提供先前使用过的函数,可以复制或者再次执行这些命令。
Matlab帮助系统
Matlab在命令窗口提供了可以获得帮助的命令,用户可以很方便的获得帮助信息。
例如:
在窗口中输入“helpfft”就可以获得函数“fft”的信息。
常用的帮助信息有help,demo,doc,who,whos,what,which,lookfor,helpbrowser,helpdesk,exit,web等。
三、关于变量
变量命名规则:
●变量名是不包含空格的单个词
●变量名区分大小写
●变量名必须以字母开头的字母、数字、下划线的组合,最多19个字符。
●Matlab提供的标准函数名均以小写字母开头
特殊变量名:
●ans缺省变量名
●pi圆周率
●i,j虚数单位
●eps无穷小
●inf,Inf无穷大
●realmax最大正实数
●realmin最小正实数
清除变量的值
●clear
●clear变量名1变量名2
显示驻留内存的变量名
●who
●whos
第2节Matlab编程
一、矩阵(数组)的输入
1、直接输入
直接按行方式输入每个元素:
同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。
所有元素处于一方括号([])内;多维矩阵用多重方括弧。
可建立复数矩阵
如:
Null_M=[]%生成一个空矩阵
可建立复数矩阵
R=[1,2,3;4,5,6]
I=[7,8,9;10,11,12]
Z=R+I*j
2.由M文件方式建立,今后使用键入M文件名即可建立相应矩阵
2、利用函数输入
“:
”表达式,产生等差行向量start:
step:
end或start:
end(step=1)如:
t=1:
20
产生等距输入:
linspace(a,b,n)将〔a,b〕区间分成n-1个等距小区间
产生随机排列:
randperm(n)产生1~n之间整数的随机排列
3、特殊矩阵输入
zeros(n)生成n×n全零阵,
zeros(a,b)元素全为0的a×b维矩阵,以下各函数同理具有该类型。
zeros(size(A))生成与矩阵A相同大小的全零阵,
ones(a,b)元素全为1的a×b维矩阵
eye(a,b)对角线上的元素为1的a×b维矩阵
rand(a,b)产生a×b维均匀分布的随机矩阵,其元素在(0,1)内
rand无变量输入时只产生一个随机数
randn(a,b)产生a×b维正态分布的随机矩阵
4.矩阵的转置和逆矩阵
⏹X的转置:
X’(图像顺时针旋转90°,并水平镜像)
如:
a=imread('D:
\2-1.bmp');
b=a';
subplot(1,2,1),subimage(a),subplot(1,2,2),subimage(b)
⏹X的逆矩阵inv(X)
二、矩阵元素的访问及其大小的确定
访问第n个元素:
X(n)(n>=1)
访问多个元素:
X([n1,n2,n3……])或X(1:
10)
确定元素的个数:
numel(X)
确定矩阵的大小:
[m,n,l]=size(X)
三、矩阵的算数运算
●数与矩阵的运算:
m等价于m.
m+A:
m与A中各元素相加
m-A:
m与A中各元素相减
m×A:
m与A中各元素相乘
m./A:
m除以A中各元素(没有m/A)
m\A:
A中各元素除以m
●矩阵与矩阵的运算
A+B:
A、B对应元素相加
A-B:
A、B对应元素相减
A×B:
A、B矩阵按线性代数中矩阵乘法运算进行相乘(注意维数匹配)
A.*B:
A、B对应元素相乘(注意维数相同)
A/B:
A除以B矩阵(A×B-1)(注意维数匹配)
A./B:
A除以B中各元素
A\B:
B除以A矩阵(A-1×B)(注意维数匹配)
A.\B:
B除以A中各元素
A^m:
相当于矩阵A×矩阵A×矩阵A…….(m为小数即是矩阵的开方运算)(注意维数匹配)
A.^m:
矩阵A中各元素的m次方
A.^B:
矩阵A中各元素的进行B中对应元素次方(注意维数相同)
四、关系运算
<、<=、>、>=、==、~=六种关系运算符。
关系成立结果为1,否则为0。
五、逻辑运算
设矩阵A和B都是m×n矩阵或其中之一为标量,在MATLAB中定义了如下的逻辑运算:
&、|、~、xor(真为1,假为0)
(1)矩阵的与运算
格式A&B或and(A,B)
说明A与B对应元素进行与运算,若两个数均非0,则结果元素的值为1,否则为0。
(2)或运算
格式A|B或or(A,B)
说明A与B对应元素进行或运算,若两个数均为0,则结果元素的值为0,否则为1。
(3)非运算
格式~A或not(A)
说明若A的元素为0,则结果元素为1,否则为0。
(4)异或运算
格式xor(A,B)
说明A与B对应元素进行异或运算,若相应的两个数中一个为0,一个非0,则结果为0,否则为1。
六、集合运算
1.两个集合的交集intersect
2.检测集合中的元素ismember
3.两集合的差setdiff
4.两个集合交集的非(异或)函数setxor
5.两集合的并集union
6.取集合的单值元素unique
七、MatLab的控制流
由各种语句构成
语句后面加“;”号,不显示运算结果
%开头表示是注释语句
赋值语句
变量=表达式
表达式(相当于将值付给ans变量)
演示(三)
for循环结构
【例】一个简单的for循环示例。
fori=1:
10;%i依次取1,2,…10,.
x(i)=i;%对每个i值,重复执行由该指令构成的循环体,
end;
x%要求显示运行后数组x的值。
x=
12345678910
while循环结构
【例】Fibonacci数组的元素满足Fibonacci规则:
,
;且
。
现要求计算出该数组中第一个大于10000的元素。
a
(1)=1;a
(2)=1;i=2;
whilea(i)<=10000
a(i+1)=a(i-1)+a(i);%当现有的元素仍小于10000时,求解下一个元素。
i=i+1;
end;
i,a(i),
i=
21
ans=
10946
if-else-end分支结构
【例1】一个简单的分支结构。
cost=10;number=12;
ifnumber>8
sums=number*0.95*cost;
end,sums
sums=
114.0000
【例2】用for循环指令来寻求Fibonacc数组中第一个大于10000的元素。
n=100;a=ones(1,n);
fori=3:
n
a(i)=a(i-1)+a(i-2);
ifa(i)>=10000
a(i),
break;%跳出所在的一级循环。
end;
end,i
ans=
10946
i=
21
switch-case结构
【例】学生的成绩管理,演示switch结构的应用。
clear;
%划分区域:
满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(<60)。
fori=1:
10;a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;c=[d,c];
Name={'Jack','Marry','Peter','Rose','Tom'};%元胞数组
Mark={72,83,56,94,100};Rank=cell(1,5);
%创建一个含5个元素的构架数组S,它有三个域。
S=struct('Name',Name,'Marks',Mark,'Rank',Rank);
%根据学生的分数,求出相应的等级。
fori=1:
5
switchS(i).Marks
case100%得分为100时
S(i).Rank='满分';%列为'满分'等级
casea%得分在90和99之间
S(i).Rank='优秀';%列为'优秀'等级
caseb%得分在80和89之间
S(i).Rank='良好';%列为'良好'等级
casec%得分在60和79之间
S(i).Rank='及格';%列为'及格'等级
otherwise%得分低于60
S(i).Rank='不及格';%列为'不及格'等级
end
end
%将学生姓名,得分,登记等信息打印出来。
disp(['学生姓名','得分','等级']);disp('')
fori=1:
5;
disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]);
end;
学生姓名得分等级
Jack72及格
Marry83良好
Peter56不及格
Rose94优秀
Tom100满分
try-catch结构
【例】try-catch结构应用实例。
clear,N=4;A=magic(3);%设置3行3列矩阵A。
try
A_N=A(N,:
),%取A的第N行元素
catch
A_end=A(end,:
),%如果取A(N,:
)出错,则改取A的最后一行。
end
lasterr%显示出错原因
A_end=
492
ans=
Indexexceedsmatrixdimensions.
第二章符号数学工具(SymbolicMathToolbox)
第1节符号表达式
●符号表达式是代表数字、函数、算子和变量的MATLAB字符串,或字符串数组。
不要求变量有预先确定的值,符号方程式是含有等号的符号表达式。
如表2.1所列。
表2.1
符号表达式
在MATLAB中的表示
'1/(2*x^n)'
y='1/sqrt(2*x)'
'cos(x^2)-sin(2*x)'
M=sym('[a,b;c,d]')
f=int('x^3/sqrt(1-x)','a','b')
注意:
加单引号’’表示是一个符号表达式而不是数字表达式。
●符号函数:
让用户操作上述符号表达式的方法和函数,比如:
>>diff('cos(x)')%differentiatecos(x)withrespecttox
ans=
-sin(x)
>>M=sym('[a,b;c,d]')%createasymbolicmatrixM
M=
[a,b]
[c,d]
注意:
1.建立符号数组时,最好用上函数sym
2.许多符号函数可以自动将字符转变为符号表达式。
例如diffcos(x)也可以,
>>diffx^2+3*x+5%theargumentisequivalentto'x^2+3*x+5'
●符号变量是符号表达式中的变量,如:
’x+3*y+z’中的x,y,z。
●独立变量是当符号表达式中含有多于一个的变量时,只有一个变量是独立变量。
缺省的独立变量是x,如果没有x,则选择最靠近x的作为独立变量。
如表达式'1/(5+cos(x))'中是'x';在'3*y+z'中是'y';在'a+sin(t)'是't',而表达式'sin(pi/4)-cos(3/5)'是一个符号常数无符号变量。
可利用函数symvar询问MATLAB在符号表达式中哪一个变量它认为是独立变量(系统找不到一个独立变量,便假定无独立变量并返回x)。
>>symvar('a*x+y*)%findthedefaultsymbolicvariable
ans=
x
>>symvar('a*t+s/(u+3)')%uistheclosestto'x'
ans=
u
>>symvar('sin(omega)')%'omega'isnotasingleecharacter。
ans=
x
>>symvar('3*i+4*j')%iandjareequeltosqrt(-1)
ans=
x
指定独立变量:
>>diff('x^n')%differentiatewithrespecttothedefaultvariable'x'
ans=
x^n*n/x
>>diff('x^n','n')%differentiatex^nwithrespectto'n'
ans=
x^n*log(x)
>>diff('sin(omega)')%differentiateusingthedefaultvariables(x)
ans=
0
>>diff('sin(omega)','omega')%specifytheindependentvariable
ans=
cos(omega)
第2节符号表达式运算(目的:
更方便的构造符号表达式)
标准代数运算:
symadd、symsub、symlnul、symdiv:
分别为加、减、乘、除两个表达式
sympow:
将一个表达式上升为另一个表达式的幂次
例如:
给定两个函数
>>f='2*x^2+3*x-5'%definethesymbolicexpression
f=
2*x^2+3*x-5
>>g='x^2-x+7'
g=
x^2-x+7
>>symadd(f,g)%findanexpressionforf+g
ans=
3*x^2+2*x+2
>>symsub(f,g)%findanexpressionforf-g
ans=
x^2+4*x-12
>>symmul(f,g)%findanexpressionforf*g
ans=
(2*x^2+3*x-5)*(x^2-x+7)
>>symdiv(f,g)%findanexpressionforf/g
ans=
(2*x^2+3*x-5)/(x^2-x+7)
>>sympow(f,'3*x')%findanexpressionfor
ans=
(2*x^2+3*x-5)^(3*x)
联接运算:
symop:
取由逗号隔开的、多至16个参量。
各个参量可为符号表达式、数值或算子('+'、'-'、'*'、'/'、'^'、'('或')'),然后symop可将参量联接起来,返回最后所得的表达式.
>>f='cos(x)'%createanexpression
f=
cos(x)
>>g='sin(2*x)'%createanotherexpression
g=
sin(2*x)
>>symop(f,'/',g,'+',3)%combinethem
ans=
cos(x)/sin(2*x)+3
高级运算:
compose:
把f(x)和g(x)复合成f(g(x));
finverse:
求函数的逆函数;
symsum:
求表达式的序列和。
●compose
给定表达式
>>symsxyuv
f=1/(1+x^2);g=sin(y);h=1/(1+u^2);k=sin(v);
%createthefourexpression
>>compose(f,g)%findanexpressionforf(g(x))
ans=
1/(1+sin(y)^2)
>>compose(g,f)%findanexpressionforg(f(x))
ans=
sin(1/(1+x^2))
用于含有不同独立变量的函数表达式:
>>compose(h,k,'u','v')%givenh(u),k(v),find(k(v))
compose(h,k)%结果一样
ans=
1/(1+sin(v)^2)
●finverse
表达式譬如f(x)的函数逆g(x),满足g(f(x))=x。
例如,
的函数逆是ln(x),因为ln(
)=x。
sin(x)的函数逆是arcsin(x),函数
的函数逆是arcsin
。
函数finverse返回表达式的函数逆。
如果解不是唯一就给出警告。
>>symsxabcdz
>>finverse(1/x)%theinverseof1/xis1/xsince'1/(1/x)=x'
ans=
1/x
>>finverse(x^2)%g(x^2)=xhasmorethanonesolution
Warning:
finverse(x^2)isnotunique
ans=
x^(1/2)
>>finverse(a*x+b)%findthesolutionto'g(f(x))=x'
ans=
-(b-x)/a
>>finverse(a*b+c*d-a*z,'a')%findthesolutionto'g(f(a))=a'
ans=
-(c*d-a)/(b-z)
●symsum
求表达式的序列和有四种形式:
symsum(f)返回
;
symsum(f,'s')返回
,
symsun(f,a,b)返回
;
symsun(f,'s',a,b)返回
。
1.
,它应返回:
。
>>symsnx%一定要定义符号变量,即使是x
>>symsum(x^2)
ans=
1/3*x^3-1/2*x^2+1/6*x
2.
,它应返回
。
>>symsum((2*n-1)^2,1,n)
ans=
11/3*n+8/3-4*(n+1)^2+4/3*(n+1)^3
3.
,返回应是
。
>>symsn
>>symsum(1/(2*n-1)^2,1,inf)
ans=
1/8*pi^2
变量替换:
subs将某个符号变量用另一个符号变量来表示。
格式:
subs(f,old,new)如:
>>f='a*x^2+b*x+c'%createafunctionf(x)
f=
a*x^2+b*x+c
>>subs(f,'x','s')%substitute's'for'x'intheexpressionf
ans=
a*s^2+b*s+c
>>subs(f,'a','alpha')%substitute'alpha'for'a'inf
ans=
alpha*x^2+b*x+c
求符号表达式的函数值
为了得到数字,需要使用函数eval来转换字符串。
>>symsx
>>f=symsum(x^2)
>>x=2
>>eval(f)
第3节微积分(Calculus)函数
微分和积分广泛地用在许多工程学科,这部分的主要函数有:
diff():
Differentiate.(微分)
Int():
Integrate(积分)
Jacobian():
Jacobianmatrix(雅可比行列式)
Limit():
Limitofanexpression.(极限)
Symsum():
Sum
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 经典 数学 建模 教程