Download presentation
Presentation is loading. Please wait.
1
Z Mathematical Model ‡ ' MATLAB简介
2
MATLAB的发展史 MATLAB名字由MATrix和 LABoratory 两词的前三个字母组合而成。那是20世纪七十年代,时任美国新墨西哥大学计算机科学系主任的Cleve Moler出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK矩阵软件工具包库程序的的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。 1984年由Little、Moler、Steve Bangert合作成立MathWorks公司,并把MATLAB正式推向市场。从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。 1997年仲春,MATLAB5.0版问世,紧接着是5.1、5.2,以及和1999年春的5.3版。现今的MATLAB拥有更丰富的数据类型和结构、更友善的面向对象、更加快速精良的图形可视、更广博的数学和数据分析资源、更多的应用开发工具。
3
MATLAB语言的主要特点 (1)具有丰富的数学功能 包括矩阵各种运算。如:正交变换、三角分解、特征值、常见的特殊矩阵等。
包括各种特殊函数。如:贝塞尔函数、勒让德函数、伽码函数、贝塔函数、椭圆函数等。 包括各种数学运算功能。如:数值微分、数值积分、插值、求极值、方程求根、FFT 、常微分方程的数值解等。 (2)具有很好的图视系统 可方便地画出两维和三维图形。 高级图形处理。如:色彩控制、句柄图形、动画等。 图形用户界面GUI制作工具,可以制作用户菜单和控件。使用者可以根据自己的需求编写出满意的图形界面。
4
MATLAB语言的主要特点(续) (3)可以直接处理声言和图形文件。 声言文件。如: WAV文件(例:wavread,sound等)。
图形文件。如: bmp 、gif 、 pcx 、tif 、jpeg等文件。 (4)具有若干功能强大的应用工具箱。 如:SIMULINK、COMM、DSP、 SIGNAL等16种工具箱。 (5)使用方便,具有很好的扩张功能。 使用MATLAB语言编写的程序可以直接运行,无需编译。 可以M文件转变为独立于平台的EXE可执行文件。 MATLAB的应用接口程序API是MATLAB提供的十分重要的组件 ,由 一系列接口指令组成 。用户就可在FORTRAN或C中 , 把MATLAB当作计算引擎使用 。 (6)具有很好的帮助功能 提供十分详细的帮助文件(PDF 、HTML 、demo文件)。 联机查询指令:help指令(例:help elfun,help exp,help simulink),lookfor关键词(例: lookfor fourier )。
5
同一个元胞数组中各元胞的内容可以不同。(例 1_2_1)
MATLAB简介 1 MATLAB的计算功能 (1) MATLAB的数据类型 现有四种基本数据类型:双精度数组、字符串数组、元胞数组、构架数组。 元胞数组(Cell Array)如同银行里的保险箱库一样。 该数组的基本组分是元胞(Cell),以下标来区分。 元胞可以存放任何类型、任何大小的数组。 同一个元胞数组中各元胞的内容可以不同。(例 1_2_1) 构架数组(Structure Array)也能存放各类数据。 该数组的基本组分是构架( Structure ),以下标来区分。 构架必须在划分“域”后才能使用。 数据不能存放于构架,只能存放在域中。 构架的域可以存放任何类型、任何大小的数组。 不同构架的同名域中存放的内容可不同。(例 1_2_2 )
6
一. 矩阵: 1.矩阵的建立与表示法: 在命令窗口中输入:A=[1,2,3;4,5,6;7,8,9] 可以得到: A = 若要显示整行或整列,则可以用(:)冒号来表示。冒 (:)代表矩阵中行(ROWS)或列(COLUMNS)的全部。 例如执行命令:A(:,2),就会显示第2列的全部,结果 为: ans = 2 5 8
7
其他特殊矩阵的生成方法: 1)、eye (m,n)或eye (m) 产生m*n 或 m*m的单位矩阵。例如: eye (3,4)与eye (3)分别产生如下矩阵: 2)、zeros (m,n) 或 zeros (m) 产生m*n 或m*m 的零矩阵。例如: zeros (3,4) 与zeros (3) 分别产生如下矩阵:
8
3)、ones (m,n) 或ones (m) 产生m*n或m*m的全部元素为1的矩
阵。例如:ones (3,4)与ones(3)分别产生如下矩阵: 2.常用矩阵函数: 1)、d=eig (A) 返回矩阵A的特征值所组成的列向量; [v,d]=eig (A) 返回分别由矩阵A的特征向量和特征值(以其为主对角线元素,其余元素为零)的两个矩阵。 例如执行命令:[v,d]=eig (A) 结果为:
9
v = d = 其中v (:,i) 为d (i,i)所对应的特征向量。 2)、det (A) 计算行列式A的值。例如:det (A) 结果为: ans =
10
3)、expm (A) 对矩阵A求幂。例如:expm (A) 结果为:
ans = 1.0e+006 * 4)、inv (A) 求矩阵A的逆。例如:inv (A) 结果为: Warning: Matrix is close to singular or badly scaled.Results may be inaccurate. RCOND = e-018. ans = e+016 *
11
5)、orth (A) 返回对应于A的正交化矩阵。例如:orth (A) 结果为:
ans = 6)、poly (A) 若A为一矩阵,则返回A的特征多项式。例如:poly (A) 结果为: 若A为一向量,则返回以A的元素为根的特征多项式。例如: r=[1,2,3]; p= poly (r) 结果为: p = 7)、rank (A) 计算矩阵A的秩。例如:r=rank (A) 结果为:r = 2
12
3.矩阵的四则运算符号: 加 “+” 减 “—” 乘 “*” 除 “/” 共轭转置 “’” 非共轭转置 “.’” 例如:b=[1+2i;3+4i] b = i i b' ans = i i b.' i i
13
4.矩阵分解: 1)、[q,r]=qr (A) 将矩阵A做正交化分解,使得A=q*r。q为单位矩阵 (unitary matrix),其范数(norm)为1。r为对角化的上三角矩阵。例如: [q,r]=qr(A) q = r = norm(q) ans =
14
2)、[L,U]=lu (A) 将矩阵A做对角线分解,使得A=L
2)、[L,U]=lu (A) 将矩阵A做对角线分解,使得A=L*U,L为下三角矩阵(lower triangular matrix),U为上三角矩阵(upper triangular matrix)。 例如: [L,U]=lu(A) L = U =
15
二、多项式: 多项式是用向量形式来表示,从最右边算起,第一个为0阶系数,第二个为1阶系数,依次类推。例如一个一元三次多项式:4x^3+3x^2+2x+1 用[ ]来表示。 1.多项式的运算: 1)、乘:conv指令执行多项式的相乘运算,指令格式为:z=conv (x,y) 例如: x=[1 3 5]; y=[2 4 6]; z=conv(x,y) z =
16
如果要对两个以上的多项式进行相乘,可以重复使用conv指令,例如:(x,y同上) conv(conv(x,y),x) ans =
2)、分解:与1)相反,用deconv指令,其指令格式为:[z,r]=deconv (x,y)表示x除以 y商为z,余数为r。例如: [z,r]=deconv(z,x) z = r =
17
3)、求根:roots指令用于求多项式的根。例如:
fx=[1 3 2]; rootoffx=roots(fx) rootoffx = -2 -1 4)、polyval (p,x) 计算多项式p在x出的值,其中x可以是点或向量或矩阵。 例如: p = [ ]; x=1; p1=polyval (p,x) 结果为: p1 = 0 x=[1,2,3]; p2=polyval (p,x) 结果为: p2 =
18
x=A; p3=polyval (p,x) 结果为: p3 = 0 0 0 6 24 60 120 210 336
5)、polyder (p) 求p的微分多项式。 例如: p=[ ]; dp=polyder(p) dp =
19
6)、[r,p,k]=residue (x,y) 求x/y的部分因式分解。若多项式x,y都没有重根,则可把x/y的比值表示为x/y=r1/(s-p1)+r2/ (s-p2)+...+rn/ (s-pn)+ks例如 用residue指令求x/(x^2+3x+2)的部分因式分解: x=[1 0]; y=[1 3 2]; [r,p,k]=residue(x,y) r = 2 -1 p = -2 k = [ ]
20
当输入三个参数 r,p,k 时,该函数又会生成原来的函数。例如:
?[x,y]=residue(r,p,k) x = y =
21
三 符号变量、符号表达式、抽象函数: 函数sym用于生成符号变量和符号表达式,如: x=sym(‘x’) a=sym(‘alpha’)分别创建变量x, alpha f=sym(‘a*x^2+b*x+c’)创建变量表达式f ,但要注意此式并没有自动创建变量a, b, c, x。可以用函数syms对多个变量同时定义,如 : syms a b c x 函数sym也可以用来表示确定的函数,如 f=sym (‘f(x)’) 生成函数f (x) 。
22
四 常见符号计算: 1.微分:diff是求微分最常用的函数。其输入参数既可以是函数表达式,也可以是符号矩阵。Diff (f, x, n)表示对f关于x求n阶导数。例如: 1).下面程序段将生成表达式sin (ax), 并分别对其中的x和a求导。 ?syms a x ?f=sin(a*x); ?df=diff(f,x) df = cos(a*x)*a ?dfa=diff(f,a) dfa = cos(a*x)*x
23
2)、若输入参数为矩阵,将对矩阵中的每个元素求导。
?syms a x ?A=[-sin(a*x),sin(a*x);cos(a*x),cos(a*x)] A = [ -sin(a*x), sin(a*x)] [ cos(a*x), cos(a*x)] ?dy=diff(A,x) dy = [ -cos(a*x)*a, cos(a*x)*a] [ -sin(a*x)*a, -sin(a*x)*a]
24
3)、可用函数jacobian来计算Jacobi矩阵。
?syms r l f ?x=r*cos(l)*cos(f); ?y=r*cos(l)*sin(f); ?z=r*sin(l); ?J=jacobian([x;y;z],[r l f]) J = [ cos(l)*cos(f), -r*sin(l)*cos(f), -r*cos(l)*sin(f)] [ cos(l)*sin(f), -r*sin(l)*sin(f), r*cos(l)*cos(f)] [ sin(l), r*cos(l), ]
25
2.积分:用函数int来求符号表达式的积分。命令格式为:
int (f, r, x0, x1)其中f为所要积分的表达式,r为积分变量,若为定积分,则x0,x1为积分上下限。例: ?sym x; ?sym k real ?f=exp(-(k*x)^2) f = exp(-k^2*x^2) ?int(f,x,-inf,inf) ans = signum(k)/k*pi^(1/2)
26
3.级数求和:函数用于对符号表达式求和。例:
?syms k; ?s1=symsum(1/k^2,1,inf) s1 = 1/6*pi^2
27
4.极限:用函数limit来求表达式的极限。
数学表达式 命令格式 Limit (f ),或limit (f , x ) Limit (f , x , a) , 或 limit (f , a ) Limit (f , x , a , ‘left’) Limit (f , x , a , ‘right’)
28
5.化简: 1)、collect (f ) 将表达式中相同次幂的项合并,也可以再输入一个参数指定以哪个变量的幂次合并。 2)、expand ( f ) 将表达式展开。 3)、horner ( f ) 将表达式转换为嵌套格式。 4)、factor ( f ) 将表达式分解因式,并且分解后的多项式的所有系数都为有理数。 5)、simplify ( f ) 利用函数规则对表达式进行化简。
30
MATLAB的程序设计
31
1 脚本文件和函数文件 M文件有两种形式 :脚本文件(Script File)和函数文件(Function File )。这两种文件的扩展名,均为“ . m” 。 1.1 M脚本文件 对于一些比较简单的问题 ,在指令窗中直接输入指令计算 。 对于复杂计算,采用脚本文件(Script file)最为合适 。 MATLAB只是按文件所写的指令执行 。 M脚本文件的特点是: 脚本文件的构成比较简单,只是一串按用户意图排列而成的(包括控制流向指令在内的)MATLAB指令集合。 脚本文件运行后 ,所产生的所有变量都驻留在 MATLAB基本工作空间(Base workspace)中。只要用户不使用清除指令(clear), MATLAB指令窗不关闭,这些变量将一直保存在基本工作空间中。
32
1 脚本文件和函数文件(续1) 1.2 M函数文件 与脚本文件不同 ,函数文件犹如一个“黑箱”,把一些数据送进并经加工处理,再把结果送出来。
MATLAB提供的函数指令大部分都是由函数文件定义的。 M函数文件的特点是: 从形式上看 ,与脚本文件不同 ,函数文件的笫一行总是以 “function”引导的“函数申明行”。 从运行上看 ,与脚本文件运行不同 ,每当函数文件运行, MATLAB就会专门为它开辟一个临时工作空间,称为函数工作空间( Function workspace) 。当执行文件最后一条指令时 ,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。 MATLAB允许使用比 “标称数目 ”较少的输入输出宗量,实现对函数的调用 。
33
1 脚本文件和函数文件(续2) 1.3 M文件的一般结构
由于从结构上看 ,脚本文件只是比函数文件少一个“函数申明行”,所以只须描述清楚函数文件的结构 。 典型 M函数文件的结构如下 : 函数申明行:位于函数文件的首行,以关键字 functio 开头,函数名以及函数的输入输出宗量都在这一行被定义。 笫一注释行:紧随函数申明行之后以%开头笫一注释行。该行供lookfor关键词查询和 help在线帮助使用 。 在线帮助文本区 :笫一注释行及其之后的连续以%开头的所有注释行构成整个在线帮助文本。 编写和修改记录:与在线帮助文本区相隔一个“空”行,也以%开头,标志编写及修改该M文件的作者和日期等 。 函数体:为清晰起见,它与前面的注释以“空”行相隔。
34
2 函数调用和参数传递 2.1 局部变量和全局变量 局部(Local)变量:它存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身 。 全局(Global)变量:通过 global 指令,MATLAB也允许几个不同的函数空间以及基本工作空间共享同一个变量,这种被共享的变量称为全局变量。 2.2 函数调用 在MATLAB中,调用函数的常用形式是: [输出参数1,输出参数2,…] = 函数名(输入参数1,输入参数2, …) 函数调用可以嵌套,一个函数可以调用别的函数,甚至调用它自己 (递归调用)。
35
2 函数调用和参数传递(续) 2.3 参数传递 MATLAB在函数调用上有一个与众不同之处 :函数所传递的参数具有可调性 。
2 函数调用和参数传递(续) 2.3 参数传递 MATLAB在函数调用上有一个与众不同之处 :函数所传递的参数具有可调性 。 传递参数数目的可调性来源于如下两个MATLAB永久变量: 函数体内的 nargin 给出调用该函数时的输入参数数目。 函数体内的 nargout 给出调用该函数时的输出参数数目。 只要在函数文件中包括这两个变量,就可以知道该函数文件调用时的输入参数和输出参数数目。 (参考 : circle .m,am1.m) 值得注意:nargin、 nargout 本身都是函数,不是变量,所以用户不能赋值,也不能显示。 “变长度”输入输出宗量:varargin 、 varrgout。具有接受 “任意多输入” 、返回“任意多输出”的能力 。 跨空间变量传递:evalin。
36
2.3 MATLAB的程序结构和控制流 2.3.1 程序结构 顺序结构 循环结构: MATLAB提供两种循环方式。
2.3.1 程序结构 顺序结构 循环结构: MATLAB提供两种循环方式。 for—end 循环和while---end循环。 分支结构: if—else—end 。 switch---case 结构。 try---catch 结构。 2.3.2 程序流控制 常用指令:return,echo,input,pause,keyboard,break。 警示指令:error, warning 。
37
2.3 MATLAB的程序结构和控制流(续) 2.3.3 图形用户界面(GUI)编程
现代的主流应用程序已经从命令行的交互方式转变为以图形界面为主的交互方式,这主要是由于它给用户带来了操作和控制的方便与灵活性。(面向对象编程) MATLAB能够以比较简单的方式实现一系列的图形界面功能。通过对控件、菜单属性的设置和 Callback 的编写,就能够满足大多数用户的需求。 控件的 Callback 属性: Callback 属性的取值是字符串,可以是某个M文件名或一小段MATLAB语句。当用户激活控件对象(例如 :在控件对象图标上单击鼠标左键 )时,应用程序就运行 Callback 属性定义的子程序。 菜单的 Callback 属性: Callback 属性的取值是字符串,可以是某个M文件名或一小段MATLAB语句。当用户激活菜单对象时,若没有子菜单就运行 Callback 属性定义的子程序。若有,先运行 Callback 属性定义的子程序,再显示子菜单。
38
2.4 M文件的调试 编写 M文件时,错误(Bug)在所难免。错误有两种:语法(Syntax)错误和运行(Run-time)错误。
语法错误是指变量名、函数名的误写,标点符号的缺、漏等。对于这类错误,通常能在运行时发现,终止执行,并给出相应的错误原因以及所在行号。 运行错误是算法本身引起的,发生在运行过程中。相对语法错误而言,运行错误较难处理 。尤其是M函数文件,它一旦运行停止,其中间变量被删除一空,错误很难查找。 有两种调试方法:直接调试法和工具调试法。
39
2.4 M文件的调试(续1) 直接调试法:可以用下面方法发现某些运行错误。
在M文件中,将某些语句后面的分号去掉, 迫使M文件输出一些中间计算结果,以便发现可能的错误。 在适当的位置,添加显示某些关键变量值的语句(包括使用 disp 在内)。 利用 echo 指令,使运行时在屏幕上逐行显示文件内容。echo on 能显示M脚本文件;echo FunNsme on 能显示名为FunNsme 的M函数文件。 在原M脚本或函数文件的适当位置,增添指令 keyboard 。 keyboard 语句可以设置程序的断点 。 通过将原M函数文件的函数申明行注释掉,可使一个中间变量难于观察的M函数文件变为一个所有变量都保留在基本工作空间中的M脚本文件。
Similar presentations