Matlab华师大教程.docx
- 文档编号:27094948
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:100
- 大小:440.86KB
Matlab华师大教程.docx
《Matlab华师大教程.docx》由会员分享,可在线阅读,更多相关《Matlab华师大教程.docx(100页珍藏版)》请在冰豆网上搜索。
Matlab华师大教程
MATLAB简介
绪论
MATLAB是一种高级科学计算语言,它集计算、可视化和编程于一个易于使用的环境.其中的命令及函数名都是熟悉的数学语言.
MATLAB是一个交互式的系统,它的基本运算单元是矩阵,不像其他语言那样需要事先声明数据的类型,如维数,实型或复数型等.按照IEEE的数值计算标准(能正确处理无穷数Inf(Infinity)、无定义数NaN(not-a-number)及其运算)进行计算.因此编程工作量比C或Fortran小得多.
MATLAB是“MatrixLaboratory”的缩写,是当今世界流行的三大科学计算软件之一(还有两个是Mathematica和Maple).
现在MATLAB在大学中已成为数学,工程科学的标准课程.在工业界已成为高精尖产品的开发研究分析工具之一.
MATLAB的特点还在于她提供了大量的应用工具箱,对于用户是极其方便的.在工具箱中有大量的写成M-文件(后缀为m的文本文件)的开放的易于理解的源程序,这些程序运算效率极高.MATLAB分门别类地给出了信号处理(SignalProcess)、控制系统(ControlSystem)、非线性控制(NonlinearControl),最优化(Optimization),神经网络(NeuralNetwork)、模糊逻辑(FuzzyLogic),小波(Wavelet)、仿真(Simulink)、遗传(Genetic)、统计(Statistic)、符号数学(SymbolicMath),系统识别(SystemIdentification),样条(Spline),图像处理(ImageProcess)等八十余种工具箱(toolbox).位于子目录toolbox中.随着版本的不断升级,MATLAB的工具箱不断丰富.
MATLAB还有强大的帮助系统,是学习MATLAB的最好选择和途径.本教材只提供一些入门知识,系统而完备的学习要靠读者自己从帮助系统中获得.如在命令窗口的提示符>>后键入命令helpsum,再回车执行该命令可得到求和函数sum的使用方法简介,更详细的介绍用命令docsum得到.除了在命令行得到帮助外也可以进入help菜单得到整个产品的帮助.在这个帮助系统中有为初学者到专家所需的详尽的教程.有MATLAB的基本函数及各工具箱的函数按类别及按字母序排列的介绍.还可以从MATLAB界面的左下角的Start开始选取所需的服务.
MATLAB系统由如下几部分组成:
一.桌面工具及开发环境
在MATLAB桌面中有命令窗口、命令历史、文本编辑器、工作空间、帮助浏览器等等
二、MATLAB数学函数库
其中包含从简单的初等函数像求和函数sum、正弦函数sin、自变量单位为度的正弦函数sind、cos、cosd,反正切函数atan,atan2(y,x)是非零平面向量(x,y)在(-pi,pi]范围上的方向角,复杂的函数如矩阵的求逆inv、求特征值eig乃至更复杂的Bessle函数、快速Fourier变换等.
三、MATLAB的语言
这是一个具有控制流语句、函数、数据结构、输入\输出、和面向对象编程的高级的矩阵/数组的语言.她既可编写简洁小巧的程序也能编写大型应用程序.
四、图像
MATLAB有极强的图像显示、打印的能力.包括二维、三维数据的可视化、图像处理,动画等高级函数,也有让客户自已定制图像的表现方式及制作交互式图形用户界面(GUI)的低级函数.
五、MATLAB外部界面/应用程序接口API
可允许你写与MATLAB进行交互的C或Fortran程序.可让你在MATLAB中调用C或Fortran程序(动态链接),或在C或Fortran环境中调用MATLAB作为计算引擎以及读写MATLAB的数据格式文件(MAT文件).
与C或Fortran不同,MATLAB在运行程序时,对首次运行的指令是逐条解释执行的,因此执行速度比C及Fortran慢.但MATLAB会把这些指令加以编译后存放在内存中,以后再次运行时就直接执行内存中编译好的指令,速度会稍快一些.
第一节MATLAB初步
§1.1MATLAB的版本
MATLAB从早期的1.0for386的DOS版本,逐步发展到Windows的7(R14)版、7.01(R14SP1)版、7.0.4(R14SP2),7.1(R14SP3),已与它以前的6.5版本有很大的改进,到2012版还是版本7.XX,只不过从2006年开始除了用数字表示版本号外,还以发行年份作为版本名.如R2006a,R2006b,R2007a,R2007b,从2008b版开始又有了很大的改变,它的符号运算不再与Maple结合而改与另一个计算机代数系统MuPAD结合.目前的最新版本是R2013a版(8.XX版,可用于64位系统).启动MATLAB初始化后在命令窗口(CommandWindow)出现系统提示符>>,在其后键入ver然后回车就会显示MATLAB的版本号及安装的各MATLAB工具箱的版本号.为行文简洁起见,在本文中说在命令行键入语句时均意味着要回车来执行该命令.
§1.2MATLAB基本用法
启动MATLAB后可以选择你的当前目录(CurrentDirectory),对于MATLAB2013a版的MATLAB的默认当前目录为C:
\ProgramFiles\MATLAB\R2013a\bin)显示在当前目录窗口中,你可以在菜单栏上修改当前目录.MATLAB搜索文件的第一个路径就是当前目录.你创建的文件必须放在MATLAB的搜索路径中,否则运行时会提示找不到文件或函数.可以用File/SetPath…来添加搜索路径.
MATLAB是一个交互系统,您可以在提示符>>后键入各种命令,可以用编辑键对以前键入的各命令进行编辑,如通过上下箭头调出以前键入的命令,用滚动条可以查看以前的命令及其输出信息.输入一个词的前几个字母后按Tab键会出现所有相关的项供选择.用Esc键清除当前行的全部命令.也可以在命令历史(CommandHistory)中选取命令进行运行或复制.
如果要查看一个MATLAB的m文件的源代码,可在命令窗口键入type文件名.对于内部(built-in)函数不显示源代码.如要查一m文件所在的目录,可键入which文件名.
MATLAB常用的命令及键盘操作有
clc清除命令窗口的显示内容
shg显示当前图形窗口
clf清除当前图形窗口中的图像
clearx清除内存中的变量x;clear清除内存中所有的变量.
clearall清除内存中的变量,编译好的函数及MEX的连接
closeallhidden关闭所有图形窗口
组合键Ctrl+C强行退出正在运行的MATLAB程序
下面我们先从输入简单的矩阵开始掌握MATLAB的功能.
§1.2.1矩阵的创建
MATLAB把标量、向量作为一个二维矩阵的特殊情况.如标量就是一个1行1列的矩阵.要看一个矩阵A的维数可用ndims(A)得到.注意,这个维数和数学中向量的维数的意义不同.
行向量的建立方法如R=[1,2,3,4];其中分割符,可以用空格代替,对于这种增量为1的行向量也可简单地用R=1:
4;来得到.当不输入分号时在命令窗口上会显示R的值.列向量可用例如C=[1;2;3;4];或把行向量R取转置得到,如C=R.’;而C=R’;表示是R的转置并取复共轭.对于实的矩阵,这两种转置运算的结果相同.对于等增量但增量不是1的行向量的建立可用如V=5:
-1:
1;来得到[5,4,3,2,1];而U(1:
2:
5)=V([3,1,5]);得到的向量U是[30501];U中未赋值的元素值为0;如我们要把V的第二个元素和第四个元素交换得的向量仍为V,可以用V([2,4])=V([4,2]);如果要把V的元素顺序颠倒作为向量U,可以用U=V(end:
-1:
1);得到.其中end表示V的最后一列的列数.如果要把V中的第2和第5个元素分别改为9和11,可以用V([2,5])=[9,11];来实现.以上这种向量的生成方法的一个应用如下:
如用P=[4,5,2,3,1];表示1:
5的一个置换,那么它的反置换Q=[5,3,4,1,2]可以用以下语句得到Q(P)=1:
5;
输入一个小阶数的二维矩阵的最简单方法是在矩阵名=[后一行一行依次写入.行与行之间用分号或回车分开.最后一行后写上]例如输入:
A=[147;258;369]
或
A=[147
258
369]
由于命令行没有用分号结束,在命令窗口就显示%注意:
对于数值结果的显示是缩进的
A=
147
258
369
表示系统已经接收并处理了命令,在当前工作区内建立了矩阵A.要看矩阵A的各维的长度,可用size(A),得到33,size(A,1)是矩阵A的行数,size(A,2)是矩阵A的列数.矩阵的各维长度的最大值称为矩阵的长度,用length(A)可得到,值为3.要看A的元素个数可用numel(A)得到,值为9.
二维空矩阵用[]表示.空矩阵的size为00,length为0,numel为0.注意:
如1:
0也是二维空阵.有些特殊矩阵是用函数得到的,如zeros(3,4)是一个3乘4的零矩阵,zeros(4)是一个4阶零方阵.ones(3,4)是一个3乘4的元素全为1的矩阵,3阶单位阵可用eye(3)得到.
若我们要把A的第1,3行、第2列到最后一列的元素取出,赋值给C,可以键入
C=A([1,3],2:
end);其中end表示A的列数.
如我们要得到一个4列的矩阵R,它的各列等于上述矩阵A的第一列,可用R=A(:
ones(1,4))得到.如要得到一个5行的矩阵P,它的每一行等于A的第3行的第1和第3列,可用P=A(3*ones(1,5),[1,3]);(其中*表示乘)来得到.
如我们要把A中大于5的元素都改为10,可以用A(A>5)=10;来得到.然后找A中小于5的数,可以用A(A<5)得到列向量[1:
4]’;
长的语句可以分行输入,如一行太长,可用续行号…(数字与续行号之间要有空格),再回车键入其余的.
MATLAB的矩阵也可以是高维的,如一个3行乘3列乘2页的三维矩阵,可输入如下来得到:
A(:
:
2)=[101316;111417;121518];
A(:
:
1)=[147;258;369];%如果先输入这行,则得到的A是二维矩阵.再输入前一行就得到所要求的三维矩阵.
这个A的size(A)的值为[332],length(A)的值为3
MATLAB的数组中的元素的次序是按FORTRAN的规则的,即按列序的,在以上的三维矩阵A中元素的序号就是该元素的值.因此,以上矩阵可以如下简单地得到,A=zeros(3,3,2);A(:
)=1:
18;
高维的空矩阵可以用某维长度为0的高维阵得到,例如A=zeros(3,3,0)就建立了一个三维的空矩阵A..
矩阵的元素的寻访可以用其下标表示,如以上的三维矩阵A,A(1,2,2)就表示A的第1行第2列第2页的元素的值;也可用序号表示为A(13).
若令B=A(:
),则B就是A的各元素按列序排成的一个列向量[1:
18]’.
对于矩阵的元素的寻访可以有两个作用,取值或赋值,若寻访的对象在赋值号=的左边时是赋值,是把赋值号=的右边的值赋值给左边.在赋值号的右边时,是把其值取出赋值给赋值号=的左边.
若我们定义先clearA,即清除了以前定义的A,再输入A=[147;258;369];B(:
:
1)=A;则这个B的第三维的长度等于1,长度等于1的维称为孤维(singletondimension),这孤维是最后一维时,B实际上是二维矩阵.size(B)的值为[3,3],ndims(B)的值是2.
若我们定义A=[147;258;369];C(:
1,:
)=A,孤维不是最后一维,虽然C实质上是二维阵,但MATLAB认为C是三维阵,size(C)的值是[3,1,3],ndims(C)的值是3.如果我们把C的孤维移到最后一维,则C就化为二维阵,MATLAB中可通过
D=shiftdim(C,2)来实现,这时D=[1,2,3;4,5,6;7,8,9];2表示孤维向左回绕2次到达最后一维,注意D是A的转置,但D的元素的次序与C的元素次序不变.要把C转化为二维阵A,可用A=squeeze(C)来实现.squeeze是MATLAB中删除孤维而保持元素相对位置的函数.
§1.2.2对矩阵的简单操作
MATLAB的矩阵元素可以是任何数值表达式.如:
x=[-1.3sqrt(-1)(-8)^(1/3)(3+2-1)*4/5]
%sqrt()是算术平方根函数,^表示乘方,*表示乘,/表示除,百分号表示该行%后是注释.
注意,在MATLAB中数值的开方的值只给出一个实部最大、虚部非负的值,如sqrt(-1)的值为i,(-8)^(1/3)的值是1+1.732050807568877i,要求-8的所有立方根,可用roots([1008])得到,其中[1008]是多项式x^3+8的系数组成的向量.
注意在默认情况下是按双精度计算(15~16位十进制有效数是准确的)的,但只显示5位有效数字,如要显示双精度数值,可在命令窗口键入formatlong,变量的值都以双精度显示.如要恢复默认显示,可键入format或formatshort.
MATLAB能精确表示的双精度浮点数实数集F只是实数集R中的一个子集:
F={0x=(1+f)*2^a|f是52位二进制小数,指数a是整数,-1022≤a≤1023}
如你需要求黄金分割律更精确的值,如精确到20位的数字,可用任意精度求值函数vpa得到:
vpa中用单引号括起表示是字符串,是要求的值的表达式,可用vpa('(sqrt(5)-1)/2',20)得到,得到的值也是个符号.显示为
ans=
0.6180339887498948482%注意:
符号的运算结果的显示是不缩进的.
如不指定精确的位数20,则精度为当前vpa的由digits命令指定的位数,未指定digits时默认为32位.如运行vpa((sqrt(5)-1)/2,20)则精度只能达到双精度,原因是这时(sqrt(5)-1)/2不是符号,只是个双精度的值
在括号中加注下标,可取出单独的矩阵元素.如:
x(5)=abs(x
(1))%abs是绝对值函数
当采用默认的显示精度(formatshort)时显示的结果是
x=
-1.30001.73214.800001.3000
注:
结果中自动产生了向量的第5个元素,中间未定义的第四个元素自动初始化为零.
可以增添元素到一个矩阵得到更大的矩阵,如:
>>A=[A;[101112]]
结果得
A=
123
456
780
101112
若键入B=magic(4)则得到4阶幻方(三阶及更高阶的幻方是各行、各列、对角线及反对角线上元素的和皆相同的方阵)
B=
162313
511108
97612
414151
若再键入A=B(:
[1,3,2,4])则表示A是把B的第2,3列交换得到的,
A=
163213
510118
96712
415141
如果我们要把以上A的第二行与第三行交换,仍为A,可以用A([2,3],:
)=A([3,2],:
);来得到.
试猜A=B([1,3,2,4],:
)的结果是什么?
注:
N=4*m阶的幻方的秩等于3,N=4*m+2阶的幻方的秩为2*m+3,奇数阶幻方的秩等于阶数,六阶及六阶以上的幻方的个数是多少的问题尚未解决.
§1.2.3语句和变量
MATLAB的表述语句、变量的类型说明由MATLAB系统解释和判断.MATLAB语句通常形式为:
变量=表达式
或者使用其简单形式:
表达式
表达式由操作符或其它特殊字符、函数和变量名组成.表达式的结果为一个矩阵,显示在屏幕上,同时保存在变量中以留用.如果变量名和“=”省略,则具有ans名(意思指答案answer)的变量将自动建立.例如:
键入1900/81
当采用默认的显示精度(formatshort)时结果为:
ans=
23.4568
需注意的问题有以下几点:
●语句结束键入回车键,若语句的最后一个字符是分号,即“;”,则表明除了必定要显示的命令外不显示当前命令的结果.
●变量、函数、文件名均由字母开头,由字母、数字、下横线组成,但最多不能超过63个字符,否则系统只承认前63个字符.
●MATLAB变量的字母区分大小写,如A和a不是同一个变量,MATLAB的关键词与函数名除了Inf及NaN外一般使用小写字母,如求绝对值abs(x)不能写成ABS(x),否则系统认为是未定义函数.故建议用户自定义的函数名的首字母使用大写字母,如Abs等,这样就不至于和MATLAB的函数abs相冲突.
●MATLAB是以双精度计算的,但默认显示的数值是单精度的,要用科学表示法显示双精度可以用命令formatlong
§1.2.4who和系统预定义变量
输入who命令可检查工作空间中建立的变量,(MATLAB把常量也作为变量看待)键入:
who
系统输出为:
Yourvariablesare:
Aansx
这里表明三个变量已由前面的例子产生了.
但列表中列出的并不是系统全部的变量,系统还有以下常数函数(是MATLAB的内部函数)eps、pi、Inf、NaN,intmax,intmin,realmax.
常数eps是在计算机中使得1+eps>1的最小正数,eps=2^-52≈2.220446049250313e-016,(这里e-016表示e前的数字乘以10的-16次方)这是因为MATLAB的浮点运算的精度是双精度的.因此两个相近的数相减所得的差的相对误差会变大,这点在编程序时特别要注意.比如二次方程
根
当
很小时有一个根的相对误差会很大.试问这两个根应当如何表示可以避免精度的损失?
答案是x1=-(b+sign(b)*sqrt(b^2-c));x2=c/x1;
当用差分法近似表示非线性可微函数f的导数f’(x)=(f(x+h)-f(x))/h-f’’(ξ)*h/2,其中ξ是x与x+h之间的数.用计算机求值时一般会有自变量x,x+h及h的误差和函数值的误差,一般函数值的误差我们没法控制,但h的误差是可以控制的,我们可取h是计算机能精确表示的数,如h=eps的整数倍等等.这时(f(x+h)-f(x))/h的误差约为f(x)*eps/h,而截断误差是f’’(ξ)*h/2,因此只有取适当大小的h才可得到误差较小的导数近似值.
类似地,当|z|很小时,用MATLAB求log(1+z)的值的相对误差较大,因为当|z|很小时1+z的绝对误差等于eps,而log(1+z)≈z的绝对误差约为eps,故导致|z|很小时1+z的对数值的相对误差增大,若改用MATLBAB的另一函数log1p(z)(=log(1+z))则可避免精度的损失.
常数函数pi的值等于,它是用imag(log(-1))建立的.
Inf表示无穷大.如果您想计算S=1/0或S=-1/0将分别得到S=Inf,S=-Inf.
函数NaN表示它是个不定值.Inf/Inf或0/0会产生NaN.
要了解当前变量的信息可键入whos,屏幕将显示:
NameSizeBytesClass
A4x396doublearray
S1x18doublearray
ans1x18doublearray
x1x540doublearray
Grandtotalis19elementsusing152bytes
从size及bytes项目可以看出,矩阵的每个实元素需8个字节的内存.4×3的矩阵使用96个字节,全部变量的使用内存总数为152个字节.自由空间的大小决定了系统变量能有多少,如计算机上有虚拟内存的话,其可定义的变量个数会大大增加.
§1.2.5数和算术表达式
MATLAB中数的表示方法和一般的编程语言没有区别.如:
3-990.0001
9.639721.6021e-0206.02252e+023
在计算中使用IEEE浮点算法其舍入相对误差是eps.浮点数表示范围是-realmax到realmax即-1.797693134862316e+308~1.797693134862316e+308
数学运算符有:
+加;-减;*乘;/右除(左);\左除(右);^幂.
这里1/4和4\1有相同的值都等于0.25(注意比较:
1\4=4).只有在矩阵的除法时左除和右除才有区别.如当A是矩阵时,求解Ax=b可用x=A\b得到,求解xA=b可用x=b/A得到.
§1.2.6复数与矩阵
MATLAB的虚数单位是小写的英文字母i和j.输入复数矩阵有两种方法,如:
A=[12;34]+i*[56;78]和A=[1+5i2+6i;3+7i4+8i]
两式具有相等的结果.而用前者表示较好.当复数作为矩阵的元素输入时,不要留有任何空格,如1+5i,如在“+”号左右留有空格,就会被认为是两个分开的数.为避免歧义,指标变量i,j最好用大写的I,J表示.
§1.2.7输出格式
大多MATLAB语句执行的结果可在屏幕上显示,同时赋给指定的变量,没有指定变量时赋给默认变量ans.用format命令可改变变量默认的数字显示格式.但不影响其值(MATLAB以双精度执行所有的实数型运算)
首先,如果矩阵元素是整数则矩阵显示就没有小数,如x=[-101],结果为:
x=
-101
如果矩阵元素不是整数则对应于不同的显示格式输出形式有:
(用命令:
format格式可以改变显示格式)
格式
中文解释
说明
format或formatshort
短格式
显示5位固定格式
formatlong
长格式
显示15位数字
formatshorte
短格式e方式
显示5位数字
formatlonge
长格式e方式
显示15位科学表示形式
formatshortg
短格式g方式
显示5位固定或浮点格式
formatlongg
长格式g方式
显示15位固定或浮点格式
formathex
16进制格式
format+
+格式
用符号+,-与空格表示正,负与零,忽略虚部
formatbank
银行格式
显示舍入到两位小数
formatrat
有理数格式
显示为近似的小整数的比
formatcompact
紧凑格式
formatloose
松散格式
例如:
x=[4/31.2345e-6]
在不同的输出格式下的结果为:
短格式1.33
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 师大 教程
![提示](https://static.bdocx.com/images/bang_tan.gif)