Matlab华师大教程.docx

上传人:b****3 文档编号:27094948 上传时间:2023-06-27 格式:DOCX 页数:100 大小:440.86KB
下载 相关 举报
Matlab华师大教程.docx_第1页
第1页 / 共100页
Matlab华师大教程.docx_第2页
第2页 / 共100页
Matlab华师大教程.docx_第3页
第3页 / 共100页
Matlab华师大教程.docx_第4页
第4页 / 共100页
Matlab华师大教程.docx_第5页
第5页 / 共100页
点击查看更多>>
下载资源
资源描述

Matlab华师大教程.docx

《Matlab华师大教程.docx》由会员分享,可在线阅读,更多相关《Matlab华师大教程.docx(100页珍藏版)》请在冰豆网上搜索。

Matlab华师大教程.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1