matlab第一讲
- 格式:pdf
- 大小:757.08 KB
- 文档页数:23
第一篇MATLAB入门第1章MATLAB简介MATLAB(Matrix Laboratory)是由MathWorks公司于1984年推出的一套科学计算软件,分为总包和若干个工具箱。
它具有强大的矩阵计算和数据可视化能力。
1.1 MATLAB的主要特点该软件的主要特点:⑴简单易学:MATLAB是一门编程语言,其语法规则与一般的结构化高级编程语言大同小异,而且使用更方便,具有一般语言基础的用户很快就可以掌握。
⑵代码短小高效:由于MATLAB已经将数学问题的具体算法编成了现成的函数,用户只要熟悉算法的特点、使用场合、函数的调用格式和参数意义等,通过调用函数很快就可以解决问题,而不必花大量的时间纠缠于具体算法的实现。
⑶计算功能非常强大:该软件具有强大的矩阵计算功能,利用一般的符号和函数就可以对矩阵进行加、减、乘、除运算以及转置和求逆等运算,而且可以处理稀疏矩阵等特殊的矩阵,非常适合于有限元等大型数值算法的编程。
此外,该软件现有的数十个工具箱,可以解决应用中的很多数学问题。
⑷强大的图形绘制和处理功能:该软件可以绘制常见的二维三维图形,还可以对三维图形进行颜色、光照、材质、纹理和透明性设置并进行交互处理。
⑸可扩展性能:可扩展性能是该软件的一大优点,用户可以自己编写M文件,组成自己的工具箱,方便地解决本领域内常见的计算问题。
此外,利用MATLAB编译器可以生成独立的可执行程序,从而可以隐藏算法并避免依赖MATLAB。
1.2 MATLAB桌面简介启动MATLAB时,MA TLAB的桌面如图1-1。
可以根据需要改变桌面外观,包括移动、缩放和关闭工具窗口等。
MATLAB桌面包括表1-1中的几种工具窗口,在默认情况下,它们中间有一些没有显示。
1.2.1 启动按钮(“Start”)打开MATLAB主界面以后,单击“Start”按钮,显示一个菜单,利用“Start”菜单及其子菜单中的选项,可以直接打开MA TLAB的有关工具。
第一讲Matlab基础for金融生什么是Matlab?MATLAB和Mathematica、Maple并称为三大数学软件。
MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
360安全卫士把它归类为编程语言。
其实它既是一个计算工具,又是一种编程语言。
Matlab的应用领域MATLAB 产品族可以用来进行以下各种工作:●数值分析●数值和符号计算●工程与科学绘图●控制系统的设计与仿真●数字图像处理技术●数字信号处理技术●通讯系统设计与仿真●财务与金融工程金融专业学生要求学会使用matlab的金融函数并能编一些简单的程序用于计算金融工程问题。
由于matlab是英文版的,要求有些常见的单词能记下来。
一、Matlab中的数组一维数组(array)就是向量(vector),二维数组就是矩阵(matrix), 三维数组可以看作是由n个矩阵构成的一本书,每个矩阵是其中的一页。
与数组或向量相对应的就是标量(scalar)。
如:a=[1 2 3 4 5]就是向量,而100就是标量。
在matlab中,数组可以直接赋值,而不必像C语言那样先要定义数组。
数组的特征是在赋值符号(=号,注意不是等号)后面有个中括号。
如:name =[‘宋江’,’李逵’,’卢俊义’];注意:①分号表示一句话结束。
在matlab中,如果在一句话后不加分号,会马上输出变量的结果,如果不想要显示这个结果,加快代码的运行,就应该加上分号。
②此处的输出结果是:name =宋江李逵卢俊义可见,字符串向量是按字母/汉字一顺排的。
1. 字符串向量(1)行字符串向量的输出值是按字母顺序不空格排列的。
(2)可以用数组下标法,显示指定元素的值。
如:name(3)=李(注意,不是“卢俊义”)Name(6)=俊(2)如果要表示列字符串向量,可以在中括号中用分号分隔,每个分号表示一行(对于所有向量和矩阵都是这样)。
一、MATLAB工作环境Command Window:(主要的工作界面)●>>在默认情况下,这个意思就是,你可以在这个地方输入函数命令和表达式进行运算和操作●Undock 窗口太多就会是我们觉得十分繁琐,所以matlab可以将某一个窗口独立开来●用户对命令窗口中的一些属性进行,设置Preference菜单项在matlab中的设置也是比较人性化,我们可以任意按自己的喜好调节字体风格、大小、颜色和数值计算结果的显示格式。
点击下拉列表比如我们可以选择format short格式,它表示在这个数据格式下,所输出的结果是小数点后保留4位,最多不超过7位;对于大于1000的实数,用5位小数的科学计数法表示。
设定好后,单击“OK”,这些设置立即生效,并且将这些设置永久保留下来,不会因MATLAB 的关闭和开启而改变。
Loose 结果之间有空格Compact 没空格在MATLAB中,数值计算的默认类型格式为双精度型(double),但数据的显示格式可以设置不同的格式。
●Number format(数据格式)Number display(数据显示),什么是数据显示方式呢,我们马上就会展示。
Preference(通用)附录1 数据显示格式设置例:对于数据格式的问题,我们也可以通过直接在command window输入指令来改变。
使用我们现在见到的第一个函数format 它可以实现数据格式Number format和数据显示方式Number display的改变与转换。
现在,我们就展示如下>>format compact>> format short>> pians =3.1416>> format loose>> pi,sqrt(2)ans =3.1416ans =1.4142Loose 结果之间有空格Compact 没空格Command History(保存在Command Window中执行过的命令)●按住“Ctrl”键,可选中Command History中一行或多行命令●“Evaluate Selection”完成对命令行的重新执行(或F9快捷键)●M文件(仅仅提及)Workspace Browser可以显示命令窗口中运行时产生的变量,能够详细显示所有的变量名、变量大小和字节数。
同时可以单击进行观察、编辑、提取和保存。
●图形绘制功能plot//more plot(向下的箭头)●数组编辑器(双击或选择Open Selection)数组编辑器中可以输入大量的数组●工作空间数据的保存Save Workspace//Open,Import Data(打钩即可)二、目录和文件管理●设置当前目录(Browser for folder)OR(Up one level)三、命令行帮助查询●help help●help funfun (显示帮助主题中的所有命令)●lookfor (查询某函数所属的文件)说明:最简单常用的便是help●Demo(帮助演示文件)在on this page 中选择所需学习的类型即可三、MATLAB计算介绍● 2.1 matlab 计算的介绍2.1.1数值计算1. 直接输入数值计算结果储存在临时变量ans中2. 定义变量%直接输入法计算(计算扇形的面积,半径为3,弧长为4)例:%直接输入法计算(计算扇形的面积,半径为3,弧长为4)>> 3*4/2ans =6>> %定义变量方法计算>> a=3;>> b=4;>> s=0.5*a*bs =6小技巧1:matlab会自动忽略变量或计算符号之间的空格,因此,可以在变量及计算符号之间添加空格以便阅读。
数学处理的优先级顺序help precedence2.1.2基本数学运算符号附录2 基本的数学运算符号例:>> A=[9 4 47 9 92 9 1];>> B=[8 1 63 5 74 9 2 ];>> c1=A*Bc1 =100 65 90119 133 12347 56 77>> c2=A.*Bc2 =72 4 2421 45 638 81 2>> d1=A./Bd1 =1.1250 4.0000 0.66672.3333 1.8000 1.28570.5000 1.0000 0.5000>> d2=A.\Bd2 =0.8889 0.2500 1.50000.4286 0.5556 0.77782.0000 1.0000 2.0000小结:带“.”的运算方法表示对矩阵元素进行运算。
对于矩阵而言右除是具有一般意义上的除法,左除具有对称意义即A./B=B.\A。
小技巧2:空格可以作为数组元素之间的分隔符2.1.4 命令窗口中的常用操作和编辑指令clc 清空命令窗口clear 清空工作空间中的变量clf 清空图形窗口quit 退出matlabsave 保存内存变量what 列出所在目录matlab文件which 定为matlab文件路径who 列出工作空间的变量whos 详细列出工作空间中的变量whoYour variables are:A AsBCDEF X Y Z ans idx>> whosName Size Bytes Class AttributesA 3x3 72 doubleAs 1x8 64 doubleB 3x2 48 doubleC 2x2 32 doubleD 9x1 72 doubleE 2x2 32 doubleF 2x2 32 doubleX 2x2 32 doubleY 2x2 32 doubleZ 2x2 32 doubleans 3x3 72 doubleidx 1x8 64 double>> whatMAT-files in the current folder E:\baiduyundownload\matlab ok\binmatlab matlab1● 2.2 数值、变量和表达式matlab中的命名规则:变量名对大小写敏感变量名必须以字母开头变量名最长可以有63个字符,之后的字符都将被省略注意:matlab中的某些关键字不能作为变量名称(但sin可以作为变量名称)Iskeyword查询所有的关键字isvarword系统预定义了一些变量(可以被命名,临时覆盖重启或clear可恢复)例如:ans、pi、inf、NaN、i或j等附录3● 2.3 数值数据类型一般定义好需要处理的数值数据类型才能很好地进行之后的编程操作2.3.1 整数整数的定义十分简单易懂整数int的数据类型一般分为8位16位32位和64位,不同的位数代表数据处理的宽度。
其中又分为有符号和没符号,区分便是在左边加一个u(int8 uint8).整型数据定义的举例%定义一个16位数值大小为20的数>> x1=int16(20)x1 =20%查询该种数据类型的上下限>> intmin('int16')ans =-32768>> intmax('int16')ans =32767%class函数可以获取所定义变量的数据类型>> class(x1)ans =int16整型数据运算举例a=int8([3 4 7 89]);>> b=int8([4 33 5 32]);>> a+bans =7 37 12 121a./bans =1 0 1 3说明:首先将整数元素作为双精度类型的数据进行计算,然后根据四舍五入原则得到整型数据相除的结果。
整型数据的转化(cast函数)>> b=[1 81 9 3 4]b =1 81 9 3 4>> class(b)ans =double>> c=cast(b,'uint16')c =1 81 9 3 4>> b+cError using +Integers can only be combined with integers of the same class, or scalar doubles.>> c+5ans =6 86 14 8 9>> class(ans)ans =uint16小结:不同类型的整型数据之间不能进行数学运算。
但是,matlab支持双精度标量和整型数据之间的数学运算,原因在于matlab将双精度类型的变量数据转化成整型数据在进行计算。
整型数据的溢出>> a=int8(234)a =127小结:饱和处理问题的方式处理,即将计算结果设定为溢出方向的上下线数值。
2.3.2 浮点数双精度类型(double)单精度(single)单精度和双精度的取值范围:realminrealmax单精度类型的浮点数的精度eps单双精度浮点数的数值范围和精度>> format compact>> realmin('single')ans =1.1755e-38>> realmax('single')ans =3.4028e+38>> realmin('double')ans =2.2251e-308>> realmax('double')ans =1.7977e+308>> epsans =2.2204e-16单精度数据创建及混合运算a=single([1 3 2 4 3 2 1])a =1 32 43 2 1>> b=[2 32 4 3 5 2 1]b =2 32 43 5 2 1>> class(a)ans =single>> class(b)ans =double>> a+bans =3 35 6 7 84 2>> class(ans)ans =single小结:单精度数据创建方法和整型数据创建方法相同。
对于单精度与双精度数据所做的混合型运算,处理据结果为单精度的数据结果。
特殊的双精度数(Inf NaN)>> 0.54325/0ans =Inf>> 0/0NaN●整型浮点数之间的操作进行不同数据类型变量的创建或数据之间的转化处理附录四2.3.4 复数matlab可以直接在复数域上进行计算,而不用任何特殊的操作●复数极坐标和直角坐标之间的转化real(z)计算复数的实部imag(z)计算复数的虚部abs(z)计算复数的模angle(z) 以弧度为单位给出读数的幅角(angle(z)*180/pi给出角度)例:●复数的表达和书写一般的表达形式>> z1=4+3iz1 =4.0000 + 3.0000i直角坐标>> z2=3+5*iz2 =3.0000 + 5.0000i极坐标>> z3=2*exp(ipi/3)Undefined function or variable 'ipi'.>> z3=2*exp(i*pi/3)z3 =1.0000 + 1.7321i>> %通过函数定义复数>> c0=complex(1,2)c0 =1.0000 +2.0000i>> %运算的到复数>> c1=sqrt(-2)c1 =0.0000 + 1.4142i复数的混合运算>> z=z1*z2/z3z =11.8074 + 8.5490i小技巧3:利用%来说明程序的功能●复数实部、虚部、模和幅角的计算3.0000 + 7.0000i>> abs(z)ans =7.61582.3.5常见的数学函数Fx图标● 2.4数组matlab一般把数组看做存贮和运算的基本单元●一维数组的创建之前其实已经了解到一种数组的创建方法那边是直接创建法,现在把一维数组的常见创建方法做了一定的归纳:1.直接生成方法(空格,逗号(生成的数组横向排列)和分号(生成的数组纵向排列))[5 4 3 4]ans =5 4 3 42.步长生成方法x=a:inc:b> x=1:2:5x =1 3 5>> x=1:2:4x =1 33.等间距线性生成方法x=linspace(a,b,n)在ab间线性采样n个数据点第一个是alinspace(4,10,4)ans =4 6 8 104. c=logspace(1,2,5) %在10^a and 10^b产生n-1(b−a)个点第一个是10^an−1c =10.0000 17.7828 31.6228 56.2341 100.0000●一维数组的访问>> m=linspace(1,10,10)m =1 2 3 4 5 6 7 8 9 10>> %索引访问数组元素>> m(5)ans =5>> %访问一块数据>> m(1:5)ans =1 2 3 4 5>> m(3:end)ans =3 4 5 6 7 8 9 10>> %构造访问数组>> m(1:2:7)ans =1 3 5 7>> %直接构造访问数组>> m([1 2 3 4 7])ans =1 2 3 4 7●一维数组的方向横排与竖排之间的转换>> n=[4+3i 53-7i 43 2 4];>> m=n' %转置共轭m =4.0000 - 3.0000i53.0000 + 7.0000i43.0000 + 0.0000i2.0000 + 0.0000i4.0000 + 0.0000i>> m=n.' %转置m =4.0000 + 3.0000i53.0000 - 7.0000i43.0000 + 0.0000i2.0000 + 0.0000i4.0000 + 0.0000i●多维数组的创建●二维数组1. 直接生成方法(同一行之间用逗号或分号连接,不同行之间用分后连接)%t通过一维数组创建方法来创建二维数组f=[1 2 3 44 3 6 81 2 3 78 9 0 3]f =1 2 3 44 3 6 81 2 3 78 9 0 3>> f=[1 2 3 4;4 3 6 8;1 2 3 7;8 9 0 3]f =1 2 3 44 3 6 81 2 3 78 9 0 3A=[1 2 3 4;linspace(0,5,4);1:2:7;3:6]A =1.00002.00003.00004.00000 1.6667 3.3333 5.00001.0000 3.0000 5.0000 7.00003.00004.00005.00006.00002. 使用Array editor来输入二维数组(点击New Variable创建图标,在workspace中右键后renamed命名)3. 大数据通过表格的形式输入,采用Import Data4. matlab中的其他函数三维数组行、列、页三维数组(矩阵)的创建1. 直接创建内置函数zeros(全零元素)(zaros(3)三行三列) ones(全1元素)rand randn>> %通过内置函数直接创建zeros(n行,n列,n页)>> A=zeros(3,4,2)A(:,:,1) =0 0 0 00 0 0 00 0 0 0A(:,:,2) =0 0 0 00 0 0 00 0 0 02. 通过索引的方法进行创建>> %通过直接索引的方法进行创建>> %通过创建二维数组来扩展>> B=zeros(2,3)B =0 0 00 0 0>> %向二维数组中添加二维数组来增加页>> B(:,:,2)=ones(2,3)B(:,:,1) =0 0 00 0 0B(:,:,2) =1 1 11 1 1>> %通过标量扩展得到三维数组的另外一页>> B(:,:,3)=4B(:,:,1) =0 0 00 0 0B(:,:,2) =1 1 11 1 1B(:,:,3) =4 4 44 4 43. 内置函数reshape或repmat将二维数组转换为三维数组reshape(A,2,9)将三页A数组合成二维数组reshape(C,2,3,3)将得到的二维数组重新生成三维数组repmat(A,[行,列,页])以A为基元resphape(结构体变换函数,交换前后函数的元素个数相等)>> B=zeros(2,3);B(:,:,2)=ones(2,3);B(:,:,3)=4B(:,:,1) =0 0 00 0 0B(:,:,2) =1 1 11 1 1B(:,:,3) =4 4 44 4 4>> %利用resphape函数扩展得到二维数组>> C=reshape(B,2,9)C =0 0 0 1 1 1 4 4 40 0 0 1 1 1 4 4 4 >> %直接扩展得到二维数组>> C=[B(:,:,1) B(:,:,2) B(:,:,3)]C =0 0 0 1 1 1 4 4 40 0 0 1 1 1 4 4 4 >> %将二维数组重新合成三维数组reshape(C,2,3,3)ans(:,:,1) =0 0 00 0 0ans(:,:,2) =1 1 11 1 1ans(:,:,3) =4 4 44 4 4%替换的转换方法>> reshape(C,3,2,3)ans(:,:,1) =0 00 00 0ans(:,:,2) =1 11 11 1ans(:,:,3) =4 44 44 4%repmat 方法创建三维数组>> D=ones(3,2)D =1 11 11 1repmat(数组复制生成函数)>> repmat(D,[1,2,3])(以D为基元复制1行2列3页)ans(:,:,1) =1 1 1 11 1 1 11 1 1 1ans(:,:,2) =1 1 1 11 1 1 11 1 1 1ans(:,:,3) =1 1 1 11 1 1 11 1 1 14. 使用cat函数将低维数组转换为高维数组使用cat函数可以在任意维度上合并数组>> X=zeros(2)X =0 00 0>> Y=ones(2)Y =1 11 1>> Z=repmat(2,2,2)(以2为基元复制2行2列)Z =2 22 2>> %在第三为维上合并数组>> cat(3,X,Y,Z)ans(:,:,1) =0 00 01 11 1ans(:,:,3) =2 22 2>> %在第二维上合并数组>> B=cat(2,X,Y,Z)B =0 0 1 1 2 20 0 1 1 2 2>> %在第一维上合并数组>> cat(1,X,Y,Z)ans =0 00 01 11 12 22 22.4.3 数组的运算数组与数组之间的运算数组与标量之间的运算举例从创建到运算的整个流程:A=[1 2;2 4];>> B=[3 4 ;6 2];>> C=A.*BC =3 812 8D =15 830 16>> E=A./BE =0.3333 0.50000.3333 2.0000>> F=A.\BF =3.0000 2.00003.0000 0.5000>> %矩阵运算>> A/Bans =0.5556 -0.11111.1111 -0.2222>> A\BWarning: Matrix is singular to working precision. ans =NaN -InfNaN Inf>> %矩阵乘方运算>> A^2ans =5 1010 20>> A^5ans =625 12501250 2500 >> A.^2ans =1 44 16>> A.^5ans =1 3232 1024对于除法的单独演示:A=[1 2;3 2];>> B=[2 4;1 3];>> C=A*BC =4 108 18>> C/Aans =5.5000 -0.50009.5000 -0.5000>> C/Bans =1 23 2>>A =3 4 323 4 25 6 7%矩阵求逆>> inv(A)ans =-0.26667 -2.7333 20.18333 2.3167 -1.50.033333 -0.033333 02.4.4 常用的标准数组Matlab中提供了一些常见的函数创建。