MATLAB与数学实验讲义08Word下载.docx
《MATLAB与数学实验讲义08Word下载.docx》由会员分享,可在线阅读,更多相关《MATLAB与数学实验讲义08Word下载.docx(66页珍藏版)》请在冰豆网上搜索。
(2)变量名区分大小写;
(3)变量名最多不超过19个字符;
(4)变量名必须以字母打头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号.
特殊变量表
2、数学运算符号及标点符号
(1)MATLAB的每条命令后,若为逗号或无标点符号,
则显示命令的结果;
若命令后为分号,则禁止显示结果.
(2)“%”后面所有文字为注释.
(3)“...”表示续行.
3、数学函数
第二讲数组与矩阵
一、数组
1、创建简单的数组
x=[abcdef]创建包含指定元素的行向量
x=first:
last
创建从first开始,加1计数,到last结束的行向量
increment:
创建从first开始,加increment计数,last结束的行向量
x=linspace(first,last,n)
创建从first开始,到last结束,有n个元素的行向量
x=logspace(first,last,n)
创建从first开始,到last结束,有n个元素的对数分隔行向量.
2、数组元素的访问
(1)访问一个元素:
x(i)表示访问数组x的第i个元素.
(2)访问一块元素:
x(a:
b:
c)表示访问数组x的从第a个元素开始,以步长为b到第c个元素(但不超过c),b可以为负数,b缺损时为1.
(3)直接使用元素编址序号.x([abcd])表示提取数组x的第a、b、c、d个元素构成一个新的数组
[x(a)x(b)x(c)x(d)].
3、数组的方向
前面例子中的数组都是一行数列,是行方向分布的.称之为行向量.数组也可以是列向量,它的数组操作和运算与行向量是一样的,唯一的区别是结果以列形式显示.
产生列向量有两种方法:
直接产生例c=[1;
2;
3;
4]
转置产生例b=[1234];
c=b’
说明:
以空格或逗号分隔的元素指定的是不同列的元素,而以分号分隔的元素指定了不同行的元素.
4、数组的运算
(1)标量-数组运算
数组对标量的加、减、乘、除、乘方是数组的每个元素对该标量施加相应的加、减、乘、除、乘方运算.
设:
a=[a1,a2,…,an],c=标量
则:
a+c=[a1+c,a2+c,…,an+c]
a.*c=[a1*c,a2*c,…,an*c]
a./c=[a1/c,a2/c,…,an/c](右除)
a.\c=[c/a1,c/a2,…,c/an](左除)
a.^c=[a1^c,a2^c,…,an^c]
c.^a=[c^a1,c^a2,…,c^an]
(2)数组-数组运算
当两个数组有相同维数时,加、减、乘、除、幂运算可按元素对元素方式进行的,不同大小或维数的数组是不能进行运算的.
a=[a1,a2,…,an],b=[b1,b2,…,bn]
a+b=[a1+b1,a2+b2,…,an+bn]
a.*b=[a1*b1,a2*b2,…,an*bn]
a./b=[a1/b1,a2/b2,…,an/bn]
a.\b=[b1/a1,b2/a2,…,bn/an]
a.^b=[a1^b1,a2^b2,…,an^bn]
二、矩阵
1、矩阵的建立
逗号或空格用于分隔某一行的元素,分号用于区分不同的行.除了分号,在输入矩阵时,按Enter键也表示开始一新行.输入矩阵时,严格要求所有行有相同的列.
例m=[1234;
5678;
9101112]
p=[1111
2222
3333]
特殊矩阵的建立:
a=[]产生一个空矩阵,当对一项操作无结
果时,返回空矩阵,空矩阵的大小为零.
b=zeros(m,n)产生一个m行、n列的零矩阵
c=ones(m,n)产生一个m行、n列的元素全为1的矩阵
d=eye(m,n)产生一个m行、n列的单位矩阵
2、矩阵中元素的操作
(1)矩阵A的第r行:
A(r,:
)
(2)矩阵A的第r列:
A(:
,r)
(3)依次提取矩阵A的每一列,将A拉伸为一个列向量:
(4)取矩阵A的第i1~i2行、第j1~j2列构成新矩阵:
A(i1:
i2,j1:
j2)
(5)以逆序提取矩阵A的第i1~i2行,构成新矩阵:
A(i2:
-1:
i1,:
(6)以逆序提取矩阵A的第j1~j2列,构成新矩阵:
A(:
j2:
j1)
(7)删除A的第i1~i2行,构成新矩阵:
i2,:
)=[]
(8)删除A的第j1~j2列,构成新矩阵:
,j1:
j2)=[]
(9)将矩阵A和B拼接成新矩阵:
[AB];
[A;
B]
3、矩阵的运算
(1)标量-矩阵运算
同标量-数组运算。
(2)矩阵-矩阵运算
[1]元素对元素的运算,同数组-数组运算。
[2]矩阵运算:
矩阵加法:
A+B
矩阵乘法:
A*B
方阵的行列式:
det(A)
方阵的逆:
inv(A)
方阵的特征值与特征向量:
[V,D]=eig[A]
关系与逻辑运算
1、关系操作符
2、逻辑运算符
第三讲M文件与程序设计初步
一、M文件的特点与形式
要说明M文件的特点,就得从MATLAB本身说起。
MATLAB实质上是一种解释性语言,就MATLAB(matlab.exe)本身来说,它并不能做任何事情,它就像DOS操作系统的一样,本身没有实现功能而只对用户发出的指令起到解释执行的作用。
像前面介绍过的命令行式的操作一样,命令先送到MATLAB系统内解释,再运行得到结果。
这样就给用户提供了最大的方便。
用户可以把所要实现的指令罗列编制成文件,再统一送入MATLAB系统中解释运行,这就是M文件。
只不过此文件必须以m为扩展名,MATLAB系统才能识别。
也就是说,M文件其实是一个像命令集一样的ASCII(纯文本)码文件。
因此M文件语法简单,调试容易,人机交互性强。
用户可以便用任何字处理软件对其进行编写和修改。
正是M文件的这个特点造就了MATLAB强大的可开发性和可扩展性,Mathworks公
司推出的一系列工具箱就是明证。
而正是有了这些工具箱,MATLAB才能被广泛地应用于信号处理、神经网络、鲁棒控制、系统识别、控制系统、实时工作系统、图形处理、光谱分析、模型预测、模糊逻辑、数字信号处理、定点设置、金融管理、小波分析、地图工具、交流通
信、模型处理、LMI控制、概率统计、样条处理、工程规划、非线性控制设计、QFT控制设计、NAG等各个领域。
对个人用户来说,还可以利用M文件来建造和扩充属于自己的“库”。
因此,一个不了解M文件,没有掌握M文件的MATLAB使用者不能称其为一个真正的MATLAB用户。
由于商用的MATLAB软件用C/C++语言编写而成。
因此,M文件的语法与C语言十分相似。
对广大的C语言爱好者来说,M文件的编写是相当容易的。
M文件有两种形式,命令式(Script)和函数式(Function).两者相同之处在于它们都是以m作为扩展名的文本文件,不进入命令窗口,而是由文本编辑器来创建的外部文本文件。
命令式M文件就是命令行的简单叠加,MATLAB会自动按顺序执行文件中的命令,与批处理文件类似,在MATLAB命令窗口直接输入此文件的文件名,MATLAB可逐一执行在此文件内的所有命令,和在命令窗口中逐行输入这些命令一样。
这样就解决了用户在命令窗中运行许多命令的麻烦;
还可以避免用户做许多重复性的工作。
函数式M文件主要用以解决参数传递和函数调用的问题,它的第一句以function语句为引导。
另外,值得注意的是,命令式M文件在运行过程中可以调用MATLAB工作域内所有的数据,而且,所产生的所有变量均为全局变量。
也就是说,这些变量一旦生成,就一直保存在工作空间中,直到执行clear或quit时为止。
在函数式M文件中的变量除特别声明外,均为局部变量。
因为MATLAB是一种解释性语言,所以即使在某个或某些函数中存在语法错误,但如果没执行到该语句时可能就不会发现该错误,这在一个成功的程序设计中是不能容许的。
要查出某目录中所有的M函数语法错误,首先应该用cd命令进入该目录,然后运行pcode*命令进行伪代码转换。
因为该命令会将MATLAB函数转换成伪代码,而在转换过程中该程序将自动翻译每一条语句,所以一旦发现有语法错误,将会停止翻译,给出错误信息。
改正了该语法错误后,再重新执行pcode命令,直到没有错误为止。
至少这样会保证目录下所有的程序不含有语法错误。
一个M文件首次被调用时,MATLAB将首先对该M文件进行语法分析。
并把生成的相应内部伪代码(P码)存放在内存中。
此后当再次调用该M文件时,将直接运行该文件在内存中的P码文件而不会对原码文件重复进行语法分析。
P码文件和原码文件具有相同的文件名,但其扩展名为“.p”,并且其运行速度要高于原码文件,但对于规模不大的文件,用户一般察觉不到这种速度上的优势。
P码文件不是只有当M文件被调用时才生成,也可被预先生成。
二.命令式M文件
由于命令式M文件的运行相当于在命令窗口中逐行输入并运行命令,因此,在编制此类文件时,只需把所要执行的命令按行编辑到指定的文件中,且变量不需要预先定义,也不存在文件名对应问题。
例:
假设当前目录下有一个命令M文件:
%solver.m
%usedtosolveA*x=b
%whereA=[-1.512;
3-11;
-135],b=[2.5;
5;
8].
A=[-1.512;
-135];
b=[2.5;
8];
x=A\b
在命令窗口中执行solver命令,即可得到方程组的解。
x=0.7500
-0.6250
2.1250
在命令窗口中键入typesolver.m即可在命令窗口中看到该文件。
在命令窗口中运行helpsolver,可以得到该文件的注释部分。
结合上例,有以下说明:
1.以%引导的行是注释行,不执行,可供help命令查询。
2.不需要end语句作为M文件的结束标志。
3.在运行次文件之前,需要把它所在目录加到MATLAB的搜索路径上去,或将文件所在目录设为当前目录。
三.函数式M文件
为了实现计算中的参数传递,需要用到函数式M文件.函数式M文件的标志是第一行的function关键词。
函数式文件可以有返回值,也可以只执行操作而无返回值,大多数函数式文件有返回值。
函数式文件在MATLAB中应用十分广泛,MATLAB所提供的绝大多数功能函数都是由函数式文件实现的,这足以说明函数式文件的重要性。
函数式文件执行之后,只保留最后结果,不保留中间过程,所定义的变量也仅在函数内部起作用,并随调用的结束而被清除。
MATLAB的M函数由function语句引导,其基本格式如下:
function[返回变量列表]=函数名(输入变量列表)
注释说明语句段,由%引导
输入、返回变量格式的检测
函数体语句
MATLAB的内部函数是有限的,有时为了研究某一个函数的各种性态,需要为MATLAB定义新函数,为此必须编写函数文件.函数文件是文件名后缀为M的文件,这类文件的第一行必须是一特殊字符function开始,格式为:
function因变量名=函数名(自变量名)
函数值的获得必须通过具体的运算实现,并赋给因变量.
M文件建立方法:
1.在Matlab中,点:
File->
New->
M-file
2.在编辑窗口中输入程序内容
3.点:
Save,存盘,M文件名必须与函数名一致。
Matlab的应用程序也以M文件保存。
定义函数f(x1,x2)=100(x2-x12)2+(1-x1)2
1.建立M文件:
fun.m
functionf=fun(x)
f=100*(x
(2)-x
(1)^2)^2+(1-x
(1))^2
2.可以直接使用函数fun.m
例如:
计算f(1,2),只需在Matlab命令窗口键入命令:
x=[12]
fun(x)
四、控制流
MATLAB提供三种决策或控制流结构:
for循环、while循环、if-else-end结构.
这些结构经常包含大量的MATLAB命令,故经常出现在MATLAB程序中,而不是直接加在MATLAB提示符下.
1、for循环:
允许一组命令以固定的和预定的次数重复
forx=array
{commands}
end
在for和end语句之间的命令串{commands}按数组(array)中的每一列执行一次.在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:
,n)
例对n=1,2,…,10,求
的值
例子:
如果求1+2+...+100的值,可以作下列的循环:
>
mysum=0;
fori=1:
1:
100,mysum=mysum+i;
end;
mysum
2、While循环
与for循环以固定次数求一组命令相反,while循环以不定的次数求一组语句的值.
whileexpression
只要在表达式(expression)里的所有元素为真,就执行while和end语句之间的命令串{commands}.
例mysum=0;
i=1;
while(i<
=100),mysum=mysum+i;
i=i+1;
end
3、If-Else-End结构
(1)有一个选择的一般形式是:
ifexpression
如果在表达式(expression)里的所有元素为真,就执行if和end语句之间的命令串{commands}.
下面是一个简单的分支语句的例子:
functiony=control(n)
a=20;
ifn==0
y=a+1;
elseifn==1
y=a*(1+n);
elseifn==2
y=a+n;
else
y=a;
end
说明:
注意if语句嵌套时,if和else必须对应,否则容易出错;
else子句中嵌套if时,就形成了elseif结构,可以实现多路选择结构。
先建立M文件fun1.m定义函数f(x),再在Matlab命令窗口输入fun1
(2),fun1(-1)即可。
2)有三个或更多的选择的一般形式是:
if(expression1)
{commands1}
elseif(expression2)
{commands2}
elseif(expression3)
{commands3}
elseif……
…………………………………
else
{commands}
……
End
先建立M文件fun2.m定义函数f(x),再在Matlab命令窗口输入fun2
(2),fun2(0.5),fun2(-1)即可。
2.switch-case-otherwise语句(开关结构)
此语句与C语言中的选择语句具有相同的功能,它通常用于条件较多而且较单一的情况,类似于一个数控的多路开关。
其语法结构如下:
switchexpression
casevalue1
statements1;
casevalue2
statements2;
……
casevaluen
statementsn;
otherwise
statements;
expression是一个标量或者字符串,将expression的值依次和各个case指令后面的检测值进行比较,当比较结果为真时,MATLAB执行后面的一组命令,然后跳出switch结构。
如果所有的结果都为假,则执行otherwise后的命令。
当然otherwise指令也可以不存在。
第四讲图形处理功能
图形可视化技术一直是数学计算人员所喜爱和追求的一项技术,因为不管是数值计算还是符号计算,无论计算多么完美、结果多么准确,人们还是很难直接从大量的数据堆或符号堆中感受它们的具体含义。
人们更喜欢直接用眼睛看到直观的图形。
因此,对任何数学计算人员来说,可视化技术都是必须掌握的。
MATLAB为用户提供了完整的可视化工具。
从最原始版本的MATLAB开始,图形功能就已经成为其最基本的功能之一。
随着MATLAB版本的逐步升级,MATLAB的图形工具箱从最简单的点、线、面处理发展到了集二维图形、三维图形甚至四维表现图和对图形进行着色、消隐、光照处理、渲染及多视角处理等多项功能于一身的强大功能包。
在进行数值计算的过程中,为了从直观上认识计算结果,可以通过MATLAB的图形功能将计算结果图形化.MATLAB是通过描点、连线来作图的,因此,在作二维图形和三维图形之前,必须先取得该图形上一系列点的坐标,然后利用MATLAB函数作图.下面着重介绍二维图形的画法,对三维图形只作简单叙述.
一、二维图形
二维图形的绘制是MATLAB图形功能的基础,也是在绝大多数数值计算中广泛应用的图形方式之一.
1、基本绘图命令
(1).plot命令绘制二维图形最常用的函数是plot函数,对于不同形式的输入,该函数可以实现不同的功能.
(i).当plot函数仅有一个输入变量时:
plot(X)
如果X为实向量,则以X的索引坐标作为横坐标,以X的各元素作为纵坐标绘制图形.如果X为复向量,则以X的实部作为横坐标,虚部作为纵坐标绘制图形.如果X为实数矩阵,则绘制X的列向量对其坐标索引的图形.如
X=[00.50.750.950.80.35];
plot(X)%图1
X=[1+2i,2+4i,3+2i,5+i,6+4i];
plot(x)%图2
图1图2
(ii).当plot函数有两个输入变量时:
plot(X,Y)
当X和Y为向量时,X和Y的维数必须相同,而且同时为行向量或同时为列向量.此时以第一个向量的分量为横坐标,第二个向量的分量为纵坐标绘制图形,这是实际应用过程中最为常用的.例如:
x=0:
0.01*pi:
pi;
y=sin(x).*cos(x);
%注意:
此处的.*表示两个向量对应元素的乘积.
plot(x,y)%图3
图3图4
当X,Y为m*n矩阵时,将在同一幅图中绘出n条不同颜色的连线.绘制规则为:
以X矩阵的第j列分量作为横坐标,矩阵Y的第j列分量作为纵坐标,绘得第j条连线.若在同一幅图中出现多条曲线,MATLAB会自动地把不同曲线绘制成不同的颜色,以进行简单的区别.如:
y=[sin(x'
),cos(x'
)];
plot([x'
x'
],y)
(iii).当plot函数有三个输入变量时:
plot(X,Y,'
Linespec'
想绘制不同的线型、颜色、标识等的图形时,可以调用此形式,第3个输入变量为图形显示属性的设置选项:
线型、颜色、标识.
线型:
-实线;
:
点线;
-.虚点线;
--虚线;
颜色:
y黄;
m紫;
c青;
r红;
g绿;
b蓝;
w白;
k黑;
标识:
.点;
o圆点;
x叉号;
+加号;
*星号;
s方形;
d菱形;
v下三角;
^上三角;
<
左三角;
右三角;
p五角星;
h六角星.
应用上述符号的不同组合可以为图形设置不同的线型、颜色、标识.在调用时,选项应置于单引号内,当多于一个选项时,各选项直接相连,中间不需要任何的分隔符.如:
x=1:
0.1*pi:
2*pi;
y=sin(x);
z=cos(x);
plot(x,y,'
--k'
x,z,'
-.kd'
)%图4
(2).fplot命令
前面介绍的plot命令是根据外部输入数据或通过函数数值计算得到的数据进行作图.而在实际应用中,我们可能并不知道某一函数随自变量变化的趋势,此时若采用plot命令来绘图,则有可能会因为自变量的取值间隔不合理而使曲线图形不能反映出自变量在某些区域内函数值的变化情况.当然我们可以将自变量间隔取得足够小以体现函数值随自变量变化的曲线,但这样会使数据量变大.
fplot命令可以很好地解决这个问题.该命令通过内部的自适应算法来动态决定自变量的取值间隔,当函数值变化缓慢时,间隔取大一点;
变化剧烈时,间隔取小一点.fplot命令的调用方式:
fplot(@fun,[xminxmaxyminymax])在[xminxmax]内画出字符串fun表示的函数的图形,[yminymax]给出了y的限制.例如:
fplot('
sin(x)./x'
[-2020-0.31.3])%图5
图5图6
2、图形处理的基本技术
除了提供强大的绘图功能外,MATLAB语言还有极为强大的图形处理能力.下面介绍一些图形处理技术,包括图形控制、图形标注、图形保持以及子图的绘制等.
(1).图形控制
MATLAB语言中较常用的图形控制函数有坐标轴控制函数axis、坐标轴缩放函数zoom和坐标网格函数grid等.
(i).axis函数控制坐标轴的特征
在缺省情况下MATLAB自动选择图形的横、纵坐标的比例,如果你对这个比例不满意,可以用axis命令控制,常用的有:
axis([xminxmaxyminymax])[]中分别给出了x轴和y轴的最小、最大值;
axisequal或axis('
equal'
)x轴和y轴单位长度相同;
axissquare或axis('
square'
)图框呈方形;
axisoff或axis('
off'
)清除坐标刻度.例如:
0.025:
pi/2;
plot(x,tan(x),'
-ko'
)%使用axis命令设定坐标轴之前的图形图