1、1,欢迎学习MATLAB,2,MATLAB 程序设计,主讲教师: 王 娟 河南大学计算机与信息工程学院,3,课程介绍,定位:公共基础选修课 目标:了解MATLAB,能够熟练掌握数学(矩阵)运算,简单编程,简单的数据处理及基本图形绘制.,4,教材:自编讲义 特点:完全不必具备其它语言的基础,各年级各专业的同学都可选修。,5,MATLAB课程安排,学时: 32学时 安排:讲课16学时,上机14学时,考试2学时 考核要求:不得缺勤,实验报告必须齐备。 考核方式:待定,6,教学内容,第1讲介绍MATLAB概述与运算基础,第2讲介绍MATLAB程序设计,第3讲MATLAB文件操作,第4讲绘图形功能,第5
2、讲线形代数中的数值计算问题,第6讲数据处理方法与多项式,第7讲MATLAB符号计算,第8讲MATLAB的图形用户界面设计,7,MATLAB概述,matlab语言是由美国的Clever Moler博士于1980年开发的, 设计者的初衷是为解决“线性代数”课程的矩阵运算问题取名MATLAB即Matrix Laboratory 矩阵实验室的意思,一、MATLAB语言的发展:,8,它将一个优秀软件的易用性与可靠性、通用性与专业性 、一般目的的应用与高深的科学技术应用有机的相结合 MATLAB是一种直译式的高级语言,比其它程序设计语言容易,9,MATLAB已经不仅仅是一个“矩阵实验室”了,它集科学计算、
3、图象处理;声音处理于一身,并提供了丰富的Windows图形界面设计方法 MATLAB语言是功能强大的计算机高级语言, 它以超群的风格与性能风靡全世界, 成功地应用于各工程学科的研究领域,10,MATLAB在美国已经作为大学工科学生必修的计算机语言之一 (C, FORTRAN, ASSEMBLER, MATLAB) 近年来,MATLAB语言已在我国推广使用,现在已应用于各学科研究部门和许多高等院校 MATLAB语言不受计算机硬件的影响,286以上的计算机都可以使用,11,二、matlab能在各领域做什麽工业研究与开发数学教学,特别是线性代数数值分析和科学计算方面的教学与研究电子学、控制理论和物理
4、学等工程和科学学科方面的教学与研究经济学、化学和生物学等计算问题的所有其他领域中的教学与研究,12,例、用一个简单命令求解线性系统3x1+ x2 - x3 = 3.6x1+2x2+4x3 = 2.1-x1+4x2+5x3 = -1.4 A=3 1 -1;1 2 4;-1 4 5;b=3.6;2.1;-1.4; x=Ab x =1.4818-0.46060.3848,对于线性系统有Ax=b,13,例、用简短命令计算并绘制在0x6范围内的sin(2x)、sinx2、sin2x。 x=linspace(0,6) y1=sin(2*x),y2=sin(x.2),y3=(sin(x).2; plot(x
5、,y1,x, y2,x, y3),14,15,16,17,18,19,阶梯图,20,用四种方法描述cos(x)*sin(y)图形,21,22,23,24,25,三、MATLAB语言的特点:语言简洁紧凑,语法限制不严,程序设计自由度大,可移植性好运算符、库函数丰富图形功能强大界面友好、编程效率高扩展性强,26,四、MATLAB语言的功能: 强大的数值(矩阵)运算功能 广泛的符号运算功能 计算结果的可视化功能 可靠的容错功能 应用灵活的兼容与接口功能 信息量丰富的联机检索功能,27,1.矩阵运算功能,MATLAB提供了丰富的矩阵运算处理功能,是基于矩阵运算的处理工具。 变量 矩阵,运算 矩阵的运算
6、 例如 C = A + B ,A,B,C都是矩阵,是矩阵的加运算 即使一个常数,Y=5,MATLAB也看做是一个11的矩阵,28,2.符号运算功能 符号运算即用字符串进行数学分析 允许变量不赋值而参与运算 用于解代数方程、微积分、复合导数、积分、二重积分、有理函数、微分方程、泰乐级数展开、寻优等等,可求得解析符号解,29,3.丰富的绘图功能与计算结果的可视化,具有高层绘图功能两维、三维绘图 具有底层绘图功能句柄绘图 使用plot函数可随时将计算结果可视化,30,4.图形化程序编制功能,动态系统进行建模、仿真和分析的软件包 用结构图编程,而不用程序编程 只需拖几个方块、连几条线,即可实现编程功能
7、,31,5.丰富的MATLAB工具箱,MATLAB主工具箱 符号数学工具箱 SIMULINK仿真工具箱 控制系统工具箱 信号处理工具箱 图象处理工具箱 通讯工具箱 系统辨识工具箱 小波分析工具箱 神经元网络工具箱 金融工具箱,32,许多学科,在MATLAB中都有专用工具箱,现已有30多个工具箱,但MATLAB语言的扩展开发还远远没有结束,各学科的相互促进,将使得MATLAB更加强大,33,6.MATLAB的兼容功能可与C语言、FORTURE语言跨平台兼容 用函数CMEX、FMEX实现 此功能不推荐使用,34,7.MATLAB的容错功能 非法操作时,给出提示,并不影响其操作1/0Warning:
8、 Divide by zeroans =Inf,35,8.MATLAB的开放式可扩充结构,matlab 所有函数都是开放的 用户可按自己意愿随意更改 正因为此功能,使得matlab的应用越来越广泛 9.强大的联机检索帮助系统 可随时检索matlab函数 可随时查询matlab函数的使用方法,36,五. MATLAB运算量,37,变量和赋值语句,变量命名规则变量名、函数名由英文字母、数字、下划线构成。变量名、函数名区分字母大小写。A1、a1代表不同含义。变量名第一个字符必须是英文字母。变量名不得包含空格、标点,可以包含下划线。例如:m_array001合法,1_a d,minute不合法。 MA
9、TLAB命令通常是用小写字母书写。MATLAB中变量使用之前,不需要指定变量的数据类型,也不必事先声明变量。,38,MATLAB赋值语句有两种形式:(1) 变量=表达式 (2) 表达式 其中“表达式”是用运算符将有关运算量连接起来的式子,其结果是一个矩阵。 注 第二种语句形式下,将表达式的值赋给MATLAB的永久变量ans。 如果在语句的最后加分号,那么,MATLAB仅仅执行赋值操作,不再显示运算的结果。在一条语句中,如果表达式太复杂,一行写不下,可以加上三个小黑点(续行符)并按下回车键,然后接下去再写。例如 s=1-1/2+1/3-1/4+1/5-1/6+1/7- 1/8+1/9-1/10+
10、1/11-1/12;,39,MATLAB默认的预定义变量,预定义变量在MATLAB启动时由系统自动生成。用户在编写指令和程序时,应尽量避免使用下列预定义变量,以免混淆。,40,运算符和表达式,MATLAB表达式的规则与一般手写算式基本相同。 a) 表达式由变量名、运算符和函数名组成。 b) 表达式按优先级自左向右运算,括号可改变优先级顺序。 c) 优先级顺序由高到底为:指数运算、乘除运算、加减运算。 表达式中赋值符为“=”。,MATLAB用“/” 和 “”代表右除(常用除法)和左除运算。这两种运算的差别如下: 例如:2/5 表示0.4, 25 表示2.5;a/(b+c) 表示a(b+c),a(
11、b+c) 表示(b+c)a。 对于矩阵,A/B 表示AB-1,即A*inv(B);BA 表示B-1A,即inv(B)*A。,41,关系运算符 、=、=、=、= 逻辑运算符 &、|、xor 逻辑函数: all:判断是否所有元素为非零数 any:判断是否有一个向量元素为非零 exist:查看变量或函数是否存在 find:找出向量或矩阵中非零元素的位置标识 isempty:确认矩阵是否为空矩阵 isequal:判断几个对象是否相等,关系运算符、逻辑运算符和逻辑函数,42,复数和复数矩阵,MATLAB可以直接输入复数 a+bi 。MATLAB的矩阵元素可以是复数或复数表达式。例1-3常用复数转换指令
12、real、imag、abs、angle z1=3+4i %输入一个复数z1z1 =3.0000 + 4.0000i a=real(z1) %求复数z1的实部a =3 b=imag(z1) %求复数z1的虚部b =4 r=abs(z1) %求复数z1的模r =5 theta=angle(z1) %求复数z1的相角theta =0.9273,43,指令窗常用控制指令,44,指令行中常用的标点符号,标点在MATLAB指令中的作用极其重要。为了保证指令的正确执行,标点符号必须在英文状态下输入。,45,内存变量的操作,1. 内存变量的查阅、删除 1)who,whos指令查询内存变量who指令获取当前所有
13、内存变量的名称列表。whos指令获取详细的内存变量列表,包含变量类型、大小等信息。 2)clear 指令删除内存变量clear指令清除所有内存变量clear v1 v2清除内存变量v1 v2,被删变量间用空格分隔 3)打开工作空间浏览器( WorkSpace ),可以看到所有内存变量的详细说明,和whos指令效果相同。并且可以通过右键点击变量引出现场菜单,对该变量进行编辑、删除、重命名、保存、绘图等操作。,46,数据文件的存取,1) 利用指令save、load实现数据文件(*.mat)的存取。save/load filename %保存/打开文件filename.matsave/load fi
14、lename v1 v2 %保存/打开变量v1 v22) 打开工作空间浏览器 (WorkSpace),可以在右键现场菜单中选择Save Workspace as保存所有内存变量,或Save Selection as保存指定变量。例 a=1 2 3;4 5 6;7 8 9; %输入一个3*3数组a b=This is a test; %输入一个字符串数组b c=the first line,1 2 3; %输入一个元胞数组c d.d1=Struct; %输入一个结构数组d d.d2=8; d.d3=c;,47, who %得到内存变量清单 Your variables are: a b c d
15、whos %得到内存变量的详细清单Name Size Bytes Classa 3x3 72 double arrayb 1x14 28 char arrayc 1x2 172 cell arrayd 1x1 564 struct array Grand total is 71 elements using 836 bytes save test1 %保存所有内存变量到文件test1.mat clear c %清除内存变量c who %察看内存变量清单 Your variables are: a b d clear %清除所有内存变量 who %察看内存变量清单 load test1 a b
16、%载入所有内存变量到文件test1.mat who %察看内存变量清单 Your variables are: a b,48,六. 矩阵运算,49,矩阵是MATLAB最基本的数据对象,MATLAB的大部分运算或命令都是在矩阵运算的意义下执行的。在MATLAB中,不需对矩阵的维数和类型进行说明,MATLAB会根据用户所输入的内容自动进行配置。 建立矩阵建立矩阵可以用:直接输入法、利用函数建立矩阵和利用M文件建立矩阵。 直接输入法:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。(也可以用回车键代替分号) 例如,键入命令: A=
17、1 2 3;4 5 6;7 8 9 输出结果是: A = 1 2 34 5 67 8 9,50,利用函数建立数值矩阵:MATLAB提供了许多生成和操作矩阵的函数,可以利用它们去建立矩阵。 例如:reshape函数和diag函数等。 reshape函数用于建立数值矩阵。 diag函数用于产生对角阵。,利用M文件建立矩阵:对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。其步骤为: 第一步:使用编辑程序输入文件内容。 第二步:把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。 第三步:在MATLAB命令窗口中输入mymatrix,就会自动建立一个名为AM的矩阵,可供以后显示和调
18、用。,建立矩阵,51,利用M文件建立矩阵:对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。其步骤为:第一步:使用编辑程序输入文件内容。第二步:把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。第三步:在MATLAB命令窗口中输入mymatrix,就会自动建立一个名为AM的矩阵,可供以后显示和调用。,建立矩阵,52,冒号表达式在MATLAB中,冒号是一个重要的运算符。利用它可以产生向量,还可用来拆分矩阵。冒号表达式的一般格式是:e1:e2:e3其中e1为初始值,e2为步长,e3为终止值。冒号表达式可产生一个由e1开始到e3结束,以步长e2自增的行向量。,MATLAB常用数学
19、函数MATLAB提供了许多数学函数,函数的自变量规定为矩阵变量,运算法则是将函数逐项作用于矩阵的元素上,因而运算的结果是一个与自变量同维数的矩阵。 例如: A= 1 2 3;4 5 6 B=fix(pi*A) C=cos(pi*B),53,矩阵的基本运算 ()矩阵转置 ()矩阵加和减 ()矩阵乘法 ()矩阵除法 Ab=inv(A)*b ()矩阵的乘方 a2,54,建立矩阵的函数 常用函数有: eye(size(A) 产生与A矩阵同阶的单位矩阵 zeros(m,n) 产生0矩阵 ones(m,n) 产生幺矩阵rand (m,n) 产生随机元素的矩阵 Size(a) 返回包含两个元素的向量。,数组
20、运算 (1) 数组的加和减 (2) 数组的乘和除 (3) 数组的乘方,55,七应用举例,56,【例1】 求解线性方程组AX=B 1 1.5 2 9 7 3 0 3.6 0.5 -4 4 -4 其中A= 7 10 -3 22 33 , B= 20 3 7 8.5 21 6 5 3 8 0 90 -20 16,57,在MATLAB命令窗口输入命令: a=1,1.5,2,9,7;0,3.6,0.5,-4,4;7,10,-3,22,33;3,7,8.5,21,6;3,8,0,90,-20;b=3;-4;20;5;16;x=ab,得到的结果是:x =3.5653-0.9255-0.26950.14350.0101,58,【例2】 求方程 x4+7x3 +9x-20=0的全部根。在MATLAB命令窗口输入:p=1,7,0,9,-20; %建立多项式系数向量x=roots(p) %求根,得到的结果是:x =-7.2254-0.4286 + 1.5405i-0.4286 - 1.5405i1.0826,