Presentation is loading. Please wait.

Presentation is loading. Please wait.

数值计算的工具—MATLAB 电子计算机技术为应用数学解决实际问题创造了物质条件 。

Similar presentations


Presentation on theme: "数值计算的工具—MATLAB 电子计算机技术为应用数学解决实际问题创造了物质条件 。"— Presentation transcript:

1 数值计算的工具—MATLAB 电子计算机技术为应用数学解决实际问题创造了物质条件 。
“今天,在技术科学中最有用的数学研究领域是数值分析和数学建模。” “一切科学与工程技术人员的教育必须包括越来越多的数学和计算科学的内容。数学建模和相伴的计算正成为工程设计中的关键工具。科学家正日益依赖于计算方法以及在解释结果的精度和可靠性方面有充分的经验。”

2 吴文俊: “任何数学都要讲究逻辑推理,但这只是问题的一个方面,更重要的是用数学去解决问题,解决日常生活中,其他科学中出现的数学问题。学校给出的数学题目都是有答案的,已知什么,求证什么,都是很清楚的,题目也是一定做得出的。但是来到了社会上,所面对的问题大多是预先不知道答案的,甚至不知道是否会有答案。这就要求学生培养创造能力,学会处理各种实际数学问题的方法。” 数学软件既是数值计算的工具,也是数值实验的工具。

3 MATLAB—“矩阵实验室” MATLAB基本操作 MATLAB数值计算 MATLAB符号计算 MATLAB图形处理 MATLAB程序设计 MATLAB实际应用

4 §1 MATLAB基本操作 一、MATLAB的开发环境 1、MATLAB系统 的组成 ① MATLAB开发环境 ② MATLAB数学函数库
④ 图形功能 ⑤ 应用程序接口 五个部分。

5 2、MATLAB6.x的开发环境 MATLAB6.x的开发环境包括命令窗口、启动平台窗口、工作空间窗口、命令历史窗口、当前路径窗口、M文件编辑器、在线帮助浏览器等。 启动MATLAB后,将显示包括命令窗口、启动平台窗口、工作空间窗口、命令历史窗口和当前路径窗口等五个窗口和主菜单组成的操作桌面(主窗口)。 操作桌面在缺省状态下显示3个窗口,启动平台和工作空间窗口在同一个位置显示,命令历史窗口和当前目录窗口在同一位置显示。 MATLAB设定了几种特定的窗口布局方式,可以在视图(View)菜单中选择窗口布局(Desktop Layout)设定,其中缺省方式为Default。

6 (1)命令窗口(Command Window)
MATLAB是交互式的语言,输入命令即给出运算结果。而命令窗口则是MATLAB的主要交互窗口,用于输入和编辑命令行等信息,显示结果(图形除外)。 当命令窗口中出现提示符“>>”时,表示MATLAB已经准备好,可以输入命令、变量或运行函数。提示符总是位于行首。 在每个指令行输入后要按回车键,才能使指令被MATLAB执行。

7 (2)启动平台(Launch Pad) 启动平台用于启动和管理系统中安装的MATLAB系统。可以通过双击来启动相应的选项。 启动平台是一个展示MATLAB功能和产品工具箱的平台,可以通过Demos了解MATLAB。

8 (3)工作空间(Workspace) 工作空间用于保存MATLAB变量的信息。 在工作空间可以对变量进行观察、编辑、保存和删除。 保存在工作空间中的自定义变量,直到使用了“clear”命令清除工作空间或关闭了MATLAB系统才被清除。 在命令窗口中键入“whos”命令,可以显示出保存在工作空间中的所有变量的名称、大小、数据类型等信息,如果键入“who”命令,则只显示变量的名称。

9 (4)命令历史窗口(Command History)
命令历史窗口记录用户每一次启动MATLAB的时间以及在命令窗口运行过的所有指令。 命令历史窗口中的指令可以被复制到命令窗口重新运行。 如果要清除掉这些记录,可以选择“Edit”菜单中的“Clear Command History”项。

10 (5)当前路径窗口(Current Directory)
当前路径窗口也称为当前目录窗口。可以显示或改变当前目录。 当前目录指的是MATLAB运行文件时的工作目录。只有在当前目录或搜索路径下的文件及函数可以被运用或调用,如果没有特殊指明,数据文件也将储存在当前目录下。 如果要建立自己的工作目录,在运行文件前必须将该文件所在目录设置为当前目录。

11 二、MATLAB的启动与退出 1、MATLAB系统的启动 (1)在桌面上双击MATLAB快捷方式图标。 (2)在开始菜单中单击MATLAB\MATLAB6.5项。 (3)在MATLAB安装目录\MATLAB6p5中双击MATLAB快捷方式。 (4)在MATLAB安装目录\MATLAB6p5\bin\win32中双击MATLAB.exe图标。 2、MATLAB系统的退出 (1)点击操作桌面的关闭按钮。 (2)执行操作桌面file\Exit MATLAB命令。 (3)在命令窗口中输入命令exit或quit,并回车。 (4)用快捷键Ctrl+Q。

12 ③>>help 帮助主题 %列出指定主题下的函数。例如 >>help elfun %列出所有基本函数。
三、MATLAB的帮助系统 1、帮助命令 帮助命令是查询函数语法的最基本的方法,查询信息直接显示在命令窗口。帮助命令有help、lookfor。 ①>>help %在命令窗口直接输入help,显示主要的在线帮助主题。 ②>>help 函数名 %显示关于某个具体函数的功能、调用格式、及相关函数。 ③>>help 帮助主题 %列出指定主题下的函数。例如 >>help elfun %列出所有基本函数。

13 选择Help菜单中的Demos选项,可以打开演示窗口,观看要查询项的动画演示。
MATLAB的帮助系统(续) ④>>lookfor image %查找有关图像的函数和命令。 2、在线帮助浏览器 MATLAB6.x设计了全新的在线帮助浏览器,当在View菜单中选择了Help选项,或在Help菜单中选择了MATLAB Help选项时,都可以打开帮助浏览器。 3、演示帮助 选择Help菜单中的Demos选项,可以打开演示窗口,观看要查询项的动画演示。

14 四、MATLAB的运行方式 1、命令行运行方式 演算纸式的科学计算语言 在MATLAB的应用中,最基本、最简单的应用,就是在命令窗口中直接输入命令来实现计算或绘图功能。 MATLAB命令行的一般形式为: 变量=表达式 或: 表达式 (赋值语句)

15 ① 使用MATLAB最简单的方式是将MATLAB的命令窗口看作计算器,通过输入数学算式直接计算。 >>1+2+3+4+5↙
命令行运行方式(续) ① 使用MATLAB最简单的方式是将MATLAB的命令窗口看作计算器,通过输入数学算式直接计算。 >>1+2+3+4+5↙ ans= 15 ② 如果在输入的表达式后面跟上分号“;”,那么运行后就不会马上显示运算的结果,必须键入输出变量后才能显示运算结果。用分号关闭不必要的输出会使程序运行速度成倍甚至成百倍地提高。 >>1+2+3+4+5; ↙ 则不会马上显示运算结果,要得到运算结果,必须 >>ans↙ 则显示结果为

16 ③如果在表达式后面跟上逗号“,”或什么都不跟,运行后会马上显示该表达式的运算结果。
命令行运行方式(续) ③如果在表达式后面跟上逗号“,”或什么都不跟,运行后会马上显示该表达式的运算结果。 ④如果一个表达式很长,可以用续行号“…”将其延续到下一行。 >> …↙ %注意加号写在本行。 则输出结果 ans= 55 如果续行号前面是数字,直接使用续行号会出现错误,有三种解决办法,一是设法使续行号前面是一个运算符号,二是先空一格再加续行号,三是再加一个点。

17 ⑤在一行中也可以写几个语句,它们之间用逗号“,”或分号“;”隔开。
命令行运行方式(续) ⑤在一行中也可以写几个语句,它们之间用逗号“,”或分号“;”隔开。 >>A=[1,2,3.3,sin(4)],X=1966/310+1↙ 则输出结果 A= , X= 7.3419。

18 2、m文件运行方式 所谓m文件,就是用MATLAB语言编写的、可以在MATLAB中运行的程序。它是以普通文本格式存放的,故可以用任何文本编辑软件进行编辑。MATLAB提供的m文件编辑器就是程序编辑器。 在File菜单中选择NEW,再选择M-file,或点击新建图标,就可以调出m文件编辑器,用户可以用此编辑器编写m文件。 m文件有两种形式,一种称为命令文件(Script File),另一种称为函数文件(Function File),两种文件的扩展名都是m。

19 (1)命令文件 如果要输入较多的命令,或者要经常对某些命令进行重复的输入,则可以将这些命令按执行顺序存放在一个m文件中,以后只要在MATLAB的命令窗口中输入该文件的文件名,系统就会调入该文件并执行其中的全部命令。这种形式就是MATLAB的命令文件。 命令文件中的语句可以访问MATLAB工作空间的所有变量;而在命令文件执行过程中创建的变量也会一直保留在工作空间中,其他命令或m文件都可以访问这些变量。 命令文件相当于DOS批处理文件。

20 求满足1+2+3+…n<100的最大正整数n的MATLAB程序为: sum=0;n=0; %赋初始值
命令文件(续) 求满足1+2+3+…n<100的最大正整数n的MATLAB程序为: sum=0;n=0; %赋初始值 while sum< %判断当前的和是否小于100 n=n+1; %如果没有超过100,则对n加1 sum=sum+n; %计算最新的和 end sum=sum-n; %当循环结束时有sum>=100,故应 对sum减n n=n-1; %当循环结束时有sum>=100,故 应对n减1 n,sum %显示最大正整数n以及和sum

21 将上述程序存入文件fl.m,然后在命令窗口键入 >>fl↙ 显示结果为 n= 13 sum= 91 指出:
命令文件(续) 将上述程序存入文件fl.m,然后在命令窗口键入 >>fl↙ 显示结果为 n= 13 sum= 91 指出: 程序中由符号“%”开始的文字都是注释文字,用来对程序或程序行行进行注释说明,符号“%”称为注释符,MATLAB在执行时将忽略“%”后的内容。

22 (2)函数文件 函数文件是另一类m文件,可以像库函数一样方便地被调用,MATLAB提供的许多工具箱,是由函数文件组成的。 对于某一类特殊问题,用户可以建立系统的函数文件,形成专用工具箱。 函数文件的第一行有特殊的要求,它必须遵循如下的形式: function<因变量>=<函数名>(<自变量>) 其他各行都是程序运行语句,没有特别要求。 函数文件的文件名必须是<函数名>.m。

23 function y=sgn(x) %这是一个定义符号函数 y=sgn(x)的函数文件。 if x<0 y1=-1;
函数文件(续) 实现符号函数 运算功能的函数m文件为: function y=sgn(x) %这是一个定义符号函数 y=sgn(x)的函数文件。 if x<0 y1=-1; elseif x==0 y1=0; else y1=1; end y=y1;

24 将上述程序存为文件sgn.m,便可以将其作为普通的MATLAB函数来使用: >>x=4/3*pi; ↙
函数文件(续) 将上述程序存为文件sgn.m,便可以将其作为普通的MATLAB函数来使用: >>x=4/3*pi; ↙ y=3*sgn(sin(x)) ↙ 显示结果为: y= -3

25 MATLAB可以通过菜单对工作着的窗口进行操作,也可以通过键盘在命令窗口输入命令进行操作,下面给出几个常用的通用命令。
quit 关闭MATLAB exit 关闭MATLAB clc 清除MATLAB命令窗口中的所有显示内容 clear 清除工作空间中保存的所有变量 其他命令可以在学习应用中逐步熟悉。

26 六、MATLAB的基本运算 加 a+b + 1+2 减 a-b - 5-3 乘 a×b * a*b 2*3 除 a÷ b a/b或b\a 幂
数学表达式 MATLAB运算符 MATLAB表达式 示例 a+b + 1+2 a-b - 5-3 a×b * a*b 2*3 a÷ b /(右除)或\(左除) a/b或b\a 6/2或2\6 a^b ^ 2^3 指出:右除相当于通常的除法。

27 七、MATLAB的变量与函数 1、变量 变量就是在程序的运行过程中,其数值可以变化的量(数据),它可以代表一个或若干个内存单元(变量的地址)中的数据。为了对所有的变量所对应的存储单元进行访问,需要给变量命名。 MATLAB变量命名的规则是: ①以字母开头,后面可以跟字母、数字或下划线。 ②不超过31个字符。 ③字符间不可以留空格。 ④区分大小写。

28 计算机的最小数,和1相加产生比1大的数,在pc机上为2-52。 NaN(nan) 不定量,如0/0 i或j
MATLAB的变量与函数(续) 系统变量 变量名 意义 ans 用于存储计算结果的默认变量 pi 圆周率π inf(Inf) 无穷大∞,例如1/0 eps 计算机的最小数,和1相加产生比1大的数,在pc机上为2-52。 NaN(nan) 不定量,如0/0 i或j 虚数单位,i=j=sqrt(-1)

29 ②在MATLAB中输入的内容直接决定变量的类型。 ③使用who和whos命令可以查看变量。
指出: ①自定义变量名一般不应和系统变量同名。 ②在MATLAB中输入的内容直接决定变量的类型。 ③使用who和whos命令可以查看变量。 ④使用clear命令可以删除所有定义过的变量。如果只是删除其中某些变量,应在clear后面指定要删除的变量名。例如 clear a z ⑤有了变量,就可以组成表达式,也就可以对变量进行赋值。MATLAB的赋值语句有两种形式。 ● 变量名=表达式 ● 表达式 在第一种情况下,MATLAB将右边的表达式的值赋值给左边的变量,在第二种情况,MATLAB将表达式的值赋值给系统变量ans。 ⑥所谓表达式,就是用运算符号把特殊字符、函数名、变量名等有关运算量连接起来的式子,其结果是一个矩阵。

30 2、函数 数学函数 函数名 含义 abs(x) x的绝对值 atant(x) x的反正切 sqrt(x) x的平方根 cot(x) x的余切 exp(x) e的x次方 acot(x) x的反余切 sin(x) x的正弦 log(x) x的自然对数 cos(x) x的余弦 log10(x) x的常用对数 asin(x) x的反正弦 sinh(x) 双曲正弦 acos(x) x的反余弦 cosh(x) 双曲余弦 tan(x) x的正切

31 pause 程序将暂时停在该函数所在位置,击任意键程序继续执行
函数(续) 机器函数 pause 程序将暂时停在该函数所在位置,击任意键程序继续执行 echo on 在命令窗口显示正在执行的程序指令 cputime 给出MATLAB所耗用的总机器时间 clock 给出日期及当前时间 指出 在表达式中,函数一定要出现在等式的右边。 每个函数对其自变量的个数和格式都有一定要求,如三角函数的单位是“弧度”而不是“度”。 函数允许嵌套,如sqrt(sin(10))。 系统函数的函数名小写。注意函数名也是区分大小写的。

32 §2 MATLAB的数值计算 MATLAB运算的基本数据对象是矩阵,标量可以看作是1×1的矩阵,向量可以看作是1×n或n×1的矩阵。因此,可以说MATLAB的数据结构就是矩阵,以矩阵运算为代表的基本运算功能一直是MATLAB引以为自豪的核心与基础。

33 一、矩阵的创建 矩阵是线性代数的基本运算单元。 通常矩阵是指含有m行n列数值的矩形结构。矩阵中的元素可以是实数也可以是复数,由此可以将矩阵划分为实矩阵和复矩阵。 MATLAB支持线性代数所定义的全部矩阵运算。 在MATLAB中创建矩阵应遵循以下原则: ①矩阵的元素必须在方括号“[ ]”中。 ②矩阵的同行元素之间用空格或逗号“,”分隔。 ③矩阵的行与行之间用分号“;”或回车符分隔。 ④矩阵的尺寸不必预先定义。 ⑤矩阵元素可以是数值、变量、表达式或函数。如果矩阵元素是表达式,系统将自动计算出结果。

34 1、直接输入法-在命令窗口按规则输入方式创建矩阵
矩阵的创建(续) 1、直接输入法-在命令窗口按规则输入方式创建矩阵 例1.在命令窗口创建简单的数值矩阵。 >>A=[1 3 2;3 1 0;2 1 5] 回车后在命令窗口显示如下结果 A = 例2.在命令窗口创建带运算表达式的矩阵,不显示结果。 >>y=[sin(pi/3),cos(pi/6);log(20),exp(2)]; 输入“y”回车,在命令窗口显示出来。 >>y↙ 显示出的结果为 y =

35 在矩阵较大时,用分行输入的方式(用回车代替分号区分不同行)比较接近于线性代数中的矩阵,更直观一些。
矩阵的创建(续) 指出: 在矩阵较大时,用分行输入的方式(用回车代替分号区分不同行)比较接近于线性代数中的矩阵,更直观一些。 任何矩阵元素内部不能有空格,否则会被认定是两个元素。

36 2、通过数据文件创建矩阵-导入其他程序创建的数据 例3.用记事本输入一组数据 1 2 3 4 2 3 4 5 4 3 4 5 5 7 6 1
矩阵的创建(续) 2、通过数据文件创建矩阵-导入其他程序创建的数据 例3.用记事本输入一组数据 保存为fort.txt,用load命令读入, >>load fort.txt↙ 输入fort就可以在命令窗口显示创建的矩阵。 >> fort↙ 显示结果为 fort =

37 ②MATLAB对文本形式的数据文件的扩展名并不计较,将上述数据文件换名保存为fort.1,仍然可以如上导入、应用。
矩阵的创建(续) 指出: ①通过load命令导入数据是形成矩阵的重要方法,解决了在工作现场没有MATLAB系统和其他数据管理系统的问题,可以只用基本的文字处理工具完成。 ②MATLAB对文本形式的数据文件的扩展名并不计较,将上述数据文件换名保存为fort.1,仍然可以如上导入、应用。 ③文件名可以定义为m1.txt或m1.1。 ④但是,如果将文件命名为1m.txt,则显示出错信息:“Error: Missing operator(算子), comma(逗号), or semicolon(分号).” ⑤如果文件名命名为3.txt、1.txt、3.1等,则显示的是主文件名所用的数字。 ⑥数据文件保存为word或wps等的文件格式同样可以引用。

38 ⑦如果数据文件中有字母,则不能引用,显示出错信息,即使该字母在前面的指令中已经赋值也不可。
矩阵的创建(续) ⑦如果数据文件中有字母,则不能引用,显示出错信息,即使该字母在前面的指令中已经赋值也不可。 ⑧如果数据文件中有算式,则不能完整显示,算式元素将仅显示第一个运算符(或关系符)前的数字。 ⑨导入其他数据,如图像数据、Excel数据时,可以使用数据导入向导Import Wizard。

39 3、通过m文件创建矩阵-将矩阵建立为m文件
矩阵的创建(续) 3、通过m文件创建矩阵-将矩阵建立为m文件 先将矩阵按创建原则写入一个m文件中,在MATLAB命令窗口或程序中直接运行该m文件(输入该m文件名),即可将矩阵调入工作空间。 4、通过函数创建矩阵 函数 功能 eye(n) 产生n阶单位矩阵 ones(m,n) 产生m×n矩阵,元素都是“1” zeros(m,n) 产生m×n矩阵,元素都是“0”(零矩阵) [] 产生空矩阵

40 ①当某一项操作无结果时,MATLAB将返回一个空矩阵,空矩阵的大小为0,但它确实存在于工作空间,可以通过变量名访问。
矩阵的创建(续) 指出: ①当某一项操作无结果时,MATLAB将返回一个空矩阵,空矩阵的大小为0,但它确实存在于工作空间,可以通过变量名访问。 ②输入后的矩阵将保存在MATLAB工作空间中,并可以随时被访问调用,如果用户不用“clear”命令清除它,或给它重新赋值,该矩阵将一直保存在工作空间直到MATLAB关闭为止。 ③如果矩阵函数中只有一个参数,则为方阵。 ④四种创建矩阵的方法各有优点:直接输入法方便简捷;通过数据文件创建有利于调用其他软件产生的数据;通过m文件创建是用于创建较大尺寸的矩阵并便于修改;通过函数创建可以由MATLAB内部函数创建一些特殊矩阵。

41 5、其他构造矩阵的方法-冒号法 [1]冒号法构造向量 冒号表达式的一般格式为: 向量名=初值:步长:终值。 例4.在窗口输入
矩阵的创建(续) 5、其他构造矩阵的方法-冒号法 [1]冒号法构造向量 冒号表达式的一般格式为: 向量名=初值:步长:终值。 例4.在窗口输入 >> x=0:0.5:2 回车后显示 x = 例5. 在命令窗口输入 >> x=2:-0.5:0

42 ③向量的元素比较多而又有增减规律时,这种方法非常便利。
矩阵的创建(续) 指出: ①步长可以省略,省略步长,则步长为1。 ②步长可以为负,此时初值大于终值。 ③向量的元素比较多而又有增减规律时,这种方法非常便利。 ④冒号法表示向量时,向量的全体成员是从初值开始,以步长为增量,直到不超过终值的所有元素构成的序列。 ⑤冒号法的应用可以避免使用循环,提高程序运行速度。

43 解:>> A(1,:)=1:5 %设置矩阵的第1行 A = 1 2 3 4 5
矩阵的创建(续) [2]冒号法构造矩阵 一般格式为: A(:,j):表示矩阵A的第j列; A(i,:):表示矩阵A的第i行。 例6.建立矩阵 解:>> A(1,:)=1:5 %设置矩阵的第1行 A =

44 >> A(2,:)=6:10 %设置矩阵的第2行 A = 1 2 3 4 5 6 7 8 9 10
矩阵的创建(续) >> A(2,:)=6:10 %设置矩阵的第2行 A = >> A(3,:)=11:15 %设置矩阵的第3行,设置完成

45 在MATLAB中,还可以利用函数linspace产生行向量,其调用格式为: linspace(a,b,n)。
矩阵的创建(续) 指出: 在MATLAB中,还可以利用函数linspace产生行向量,其调用格式为: linspace(a,b,n)。 其中a,b是向量的第一个和最后一个元素,n是元素的个数。这样产生的向量的元素成等差数列。 例如, >> linspace(1,4,5) ans = 函数linspace被称为线性等分函数。

46 矩阵的创建(续) 指出: 冒号法和应用linspace都可以创建具有递增元素序列的向量,但是,用冒号法创建向量时,向量的元素不一定取到终值,而应用linspace则必然会取到,因为b表示的就是最后一个元素。

47 二、矩阵的运算 加 + A+B 减 - A-B 乘 * A*B 除 A/B或B\A 幂 ^ A^p 转置 ‘(单引号) A’
MATLAB对于矩阵与矩阵之间的运算的处理方法与线性代数中的相同 运算 运算符 表达式 + A+B - A-B * A*B /(右除)或\(左除) A/B或B\A ^ A^p 转置 ‘(单引号) A’

48 线性代数没有定义除法运算,MATLAB为了便于计算,定义了矩阵的除法,并有左除和右除之分。 矩阵左除使用“\”运算符,右除使用“/”运算符。
矩阵的计算(续) 说明: 矩阵也可以和一个数之间进行运算。 线性代数没有定义除法运算,MATLAB为了便于计算,定义了矩阵的除法,并有左除和右除之分。 矩阵左除使用“\”运算符,右除使用“/”运算符。 X=A\B是解方程组A*X=B;X=B/A则是解方程组X*A=B。 一般地说,A\B≠B/A。 在算法上,A\B=inv(A)*B,inv是求某一个矩阵的逆矩阵;而B/A=B*inv(A)。 指出:如果A*B=B*A=I(单位矩阵),称A和B互为逆矩阵。 如果矩阵中有复数元素,那么转置后得到它的复数共轭矩阵 。

49 矩阵运算的一个重要的应用是解线性方程组。
矩阵的运算(续) 例7.若创建矩阵 A=[1,0,2;0,1,3;1,0,4],B=[1,2,3;4,5,6;7,8,9],C=[1,2;3,4;5,6] 并计算A+B、A+3、A*C、A2、CT、A-1、A-1B。 指出: A2=A^2; CT=C’; A-1=inv(A) ; A-1B=A\B(或inv(A)*B) 在MATLAB系统中,还有一个数据结构是“数组”。数组在结构上和矩阵是完全一致的,唯一的区别是数组的运算不服从线性代数的规定,而是元素对元素间的运算。数组的加减运算与矩阵加减相同,数组的乘法、左除、右除、幂的运算符号分别是矩阵相应运算符前面加一个小圆点“.”。 矩阵运算的一个重要的应用是解线性方程组。

50 解:解线性方程组,可以使用矩阵的左除“\”,即X=A\B。 >>A=[2,1,-3;3,-2,2;5,-3,-1];
矩阵的运算(续) 例8.求下面方程组的根。 解:解线性方程组,可以使用矩阵的左除“\”,即X=A\B。 >>A=[2,1,-3;3,-2,2;5,-3,-1]; >>B=[5;5;16]; %列向量 >>X=A\B X = 1 -3 -2

51 ②可以看出,同样解线性方程组,不同的算法的效率是有极大差距的,可见优化和选择算法是非常重要的。
矩阵的运算(续) 指出: ①线性方程组A*X=B有两种解法:X=A\B或X=inv(A)*B,但一般用第一种解法,在MATLAB中,第二种解法所用时间是第一种解法的50倍。 ②可以看出,同样解线性方程组,不同的算法的效率是有极大差距的,可见优化和选择算法是非常重要的。 ③求逆运算inv(A)是重要的代数运算。

52 三、矩阵的操作 1、矩阵的大小测度 Size函数用来测试矩阵的大小,对于 矩阵A,size(A)返回一个行向量,它包含了矩阵的行数m和列数n。如果专门显示行数和列数,则可以采用如下格式: 例9.已知矩阵 求矩阵的大小。

53 >> A=[1 1 1 1 1;1 2 3 4 5;1 3 6 10 15] %设A为已知矩阵 A = 1 1 1 1 1
矩阵的操作(续) 解: >> A=[ ; ; ] %设A为已知矩阵 A = >> d=size(A) %测试矩阵A的大小 d = >> d1=size(A,1) %测试矩阵的行数 d1 = 3 >> d2=size(A,2) %测试矩阵的列数 d2 = 5

54 2、矩阵的元素操作 例10.已知矩阵 , 写出矩阵的元素A(2,3),将A(3,5)改为-1。 解:
矩阵的操作(续) 2、矩阵的元素操作 例10.已知矩阵 写出矩阵的元素A(2,3),将A(3,5)改为-1。 解: >> A=[ ; ; ] A =

55 >> A(2,3) ans = 3 >> A(3,5)=-1 A = 1 1 1 1 1 1 2 3 4 5
矩阵的操作(续) >> A(2,3) ans = 3 >> A(3,5)=-1 A =

56 >> U(1,1)=A(1,1)+B(1,1); >> U(1,2)=A(1,2)+B(1,2);
矩阵的操作(续) 例 >> A=[1 3 2;3 1 0;2 1 5] A = >> B=[4 3 6;5 1 4;3 4 6] B = >> U(1,1)=A(1,1)+B(1,1); >> U(1,2)=A(1,2)+B(1,2); >> U(2,1)=A(2,1)-B(2,1); >> U(2,2)=A(2,2)-B(2,2); >> U U =

57 利用冒号表达式对矩阵进行拆分、提取子矩阵是矩阵操作的重要方面。提取的规则是 ①A(:,j)表示取矩阵A的第j列的全部元素;
矩阵的操作(续) 3、矩阵块的操作 利用冒号表达式对矩阵进行拆分、提取子矩阵是矩阵操作的重要方面。提取的规则是 ①A(:,j)表示取矩阵A的第j列的全部元素; ②A(i,:)表示取矩阵A的第i行的全部元素; ③A(i,j)表示取矩阵A的第i行第j列交叉位置的元素; ④A(i:i+m,:)表示取矩阵A的第i~i+m行的全部元素; ⑤A(:,k:k+n)表示取矩阵A的第k~k+n列的全部元素; ⑥A(i:i+m,k:k+n)表示取矩阵A的第i~i+m行内并在第k~k+n列中的全部元素。

58 例12.拆分矩阵的例子。 >> A=[1 1 1 1 1;1 2 3 4 5;1 3 6 10 15] A =
矩阵的操作(续) 例12.拆分矩阵的例子。 >> A=[ ; ; ] A = >> A(2,3) ans = 3 >> A(3,5)=-1

59 矩阵的操作(续) >> A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15;16,17,18,19,20] A = >> A(1,:) ans =

60 矩阵的操作(续) >> A(:,2:4) ans = >> A(2:3,4:5) >> A(2:3,1:2:5)

61 例13.组合矩阵的例子。 >> A=[1,2;3,4] A = 1 2 3 4 >> B=[2,3;4,5] B =
矩阵的操作(续) 例13.组合矩阵的例子。 >> A=[1,2;3,4] A = >> B=[2,3;4,5] B = >> [A,B] ans =

62 矩阵的操作(续) >> [A;B] ans = >> [A;6,7]

63 ①冒号表达式是MATLAB中非常重要的、应用非常广泛、也非常灵活的工具。
矩阵的操作(续) ①冒号表达式是MATLAB中非常重要的、应用非常广泛、也非常灵活的工具。 ②利用冒号表达式比利用循环语句赋值解决同一问题要快得多,所以实际编程时一般应当尽量采用冒号表达式而不是用循环。

64 >> A(end,:) %取A的最后一行 ans =
矩阵的操作(续) 例14. >> A=[ ] A = >> A(end,:) %取A的最后一行 ans =

65 >> A([1,4],3:end) %取A的第1,4两行中第3列到最后一列。 ans = 3 4 5 18 19 20
矩阵的操作(续) >> A([1,4],3:end) %取A的第1,4两行中第3列到最后一列。 ans = >> A([1,4],:) %取A的第1,4两行。 指出: end用来表示矩阵某一维末尾元素。

66 >> d=[c,ones(size(c));zeros(size(c)),eye(size(c))] d =
矩阵的操作(续) 例15. >>c=[3.2,4.5;2.4,4.7]; >> d=[c,ones(size(c));zeros(size(c)),eye(size(c))] d = 指出: 实际上,例15是分块输入矩阵的例子,是将矩阵分4块输入的。注意分块的意义。

67 四、数据的输出格式 format命令的格式为: format 格式符 格式符决定数据输出格式,常见格式及其含义有: short:输出小数点后4位,最多不超过7位有效数字。 对于大于1000的实数,用5位有效数字的科学记数形式输出。 long:15位有效数字形式输出。 short e:5位有效数字的科学记数形式输出。 long e:15位有效数字的科学记数形式输出。 rat:近似有理数形式输出。

68 ①format命令只影响数据的输出格式,而不影响数据的存储和计算。
数据输出格式(续) 指出: ①format命令只影响数据的输出格式,而不影响数据的存储和计算。 ②如果输出的矩阵的每个元素都是整数,则MATLAB就用整数格式显示结果。只要矩阵中有一个元素不是整数,MATLAB就按当前的输出格式显示。 ③默认的输出格式是short。

69 ④注意rat格式。如果在进行运算前执行format rat命令,则可以用分数形式显示运算结果,这样便于核对手算的结果的正确性。 例如,
数据输出格式(续) ④注意rat格式。如果在进行运算前执行format rat命令,则可以用分数形式显示运算结果,这样便于核对手算的结果的正确性。 例如, >> 1/3 ans = 0.3333 >> format rat 1/3 >> ⑤在改变了输出格式后,为了以后还按默认的格式输出,应当再执行format short命令。

70 ⑥即使在默认格式下,0也仅仅是输出0。教材中输出0.0000是不正确的。 ⑦显示格式是非常重要的,要熟悉几种重要的格式。
数据输出格式(续) ⑥即使在默认格式下,0也仅仅是输出0。教材中输出0.0000是不正确的。 ⑦显示格式是非常重要的,要熟悉几种重要的格式。

71 §3 MATLAB的符号运算 数值运算中的变量需要事先赋值,才能出现在表达式中参与运算。但人们经常需要对含有字符的矩阵和函数进行处理和运算,如求函数的微分、积分等等,这就需要进行符号运算。 MATLAB的符号运算利用符号数学工具箱进行,符号工具箱的功能主要包括符号表达式的创建、符号矩阵的运算、符号表达式的化简和替换、符号微积分、符号代数方程、符号微分方程、符号函数绘图等等 。

72 一、符号对象的创建 1、字符串变量的创建 字符串是一种特殊的符号对象,在数据处理、造表和函数求值中,字符串具有重要的应用。 用单引号界定的字符序列称为字符串。 例如 >> s='hello' 回车后,显示 s = hello

73 ①字符串中的字符可以是数字、英文字母、汉字、横线、括号、表达式、方程等。 ②字符串也称字符串数据或字符变量。
符号对象的创建(续) 指出: ①字符串中的字符可以是数字、英文字母、汉字、横线、括号、表达式、方程等。 ②字符串也称字符串数据或字符变量。 ③用赋值符号“=”把字符串赋给某个标识符,例如s,这个标识符称为字符串变量名,简称字符名。

74 MATLAB的符号数学工具箱提供了两个基本函数sym和syms,用来创建符号变量、符号表达式和符号矩阵。
2、符号变量和符号表达式的创建 MATLAB的符号数学工具箱提供了两个基本函数sym和syms,用来创建符号变量、符号表达式和符号矩阵。 ①用函数sym建立符号变量、符号表达式和符号矩阵。 调用格式为: 变量=sym(‘表达式’) >>y=sym(‘2+cos(x)’) 将显示 y = 2+cos(x) 这是一个符号表达式。

75 ②用函数syms建立符号变量、符号表达式和符号矩阵。 调用格式为: Syms var1 var2 var3 … 注意空格。
符号对象的创建(续) ②用函数syms建立符号变量、符号表达式和符号矩阵。 调用格式为: Syms var1 var2 var3 … 注意空格。 >>syms y u >> p=exp(-y/u) >>q=y^2+u^3+u*y 这样就建立了两个符号表达式,分别存放在变量p和q里。 指出:①由于syms函数书写简洁,意义清楚,符合MATLAB的习惯特点,一般提倡使用syms创建符号变量、符号表达式和符号矩阵。

76 ③MATLAB中,在没有规定的情况下,默认最接近x的字母表示自变量。
符号对象的创建(续) ②注意用单引号创建的字符串变量和用函数sym、syms创建的符号变量性质并不完全一样。在符号工具箱中,有些指令的参数既可以用字符串型数据也可以用符号型数据,但也有一些指令的参数必须用符号型数据。 加法、求导等运算对数值形式的字符串和符号变量都按符号变量对待,不加区别,而级数求和命令symsum(s,’n’,h,k)(s是通项表达式,n为级数的项数,h、k分别是求和的起止项数)中的s必须用符号表达式而不能用字符串。 ③MATLAB中,在没有规定的情况下,默认最接近x的字母表示自变量。

77 limit(f,x,a) 求表达式f当x→a时的极限 diff(f) 求表达式f对缺省变量的微分
二、符号微积分 limit(f,x,a) 求表达式f当x→a时的极限 diff(f) 求表达式f对缺省变量的微分 diff(f,n) 求表达式f对缺省变量求n阶微分 diff(f,v) 求表达式f对变量v的微分 diff(f,v,n) 求表达式f对变量v的n阶微分 int(f) 求表达式f对缺省变量的积分 int(f,v) 求表达式f对变量v的积分 int(f,v,a,b) 求表达式f在区间(a,b)上对变量v的定积分

78 例.已知f(x)=ax2 +bx+c,求f(x)的微分和积分。 解:>>syms a b c x
符号微积分(续) 例.已知f(x)=ax2 +bx+c,求f(x)的微分和积分。 解:>>syms a b c x >>f=sym(‘a*x^2+b*x+c’) f = a*x^2+b*x+c >>diff(f,a) ans = x^2 >>int(f) 1/3*a*x^3+1/2*b*x^2+c*x >>int(f,x,0,2) 8/3*a+2*b+2*c

79 §4 MATLAB的图形处理

80 >> [x,y,z]=sphere(30); >> surf(x,y,z),box
MATLAB的图形处理(续) >> [x,y,z]=sphere(30); >> surf(x,y,z),box

81 ③plot(x,y1,x,y2,…) 以公共的x元素为横坐标,以y1,y2,y3,…元素为纵坐标值绘制多条曲线。
二维图形的绘制 一、二维图形的绘制 1、数据绘图命令-plot ①plot(y) 当y为向量时,以y的分量为纵坐标,以元素序号为横坐标,用直线依次连接数据点,绘制曲线。若y为实数矩阵,按列绘制每一列所对应的曲线,图中曲线数等于矩阵的列数。 ②plot(x,y) 若y和x为同维向量,以x为横坐标,以y为纵坐标绘制连线图。若x是向量,y是行数或列数与x的长度相等的矩阵,则绘制多条不同色彩的连线图,x被作为这些曲线的共同坐标。若x和y是同型的矩阵,则以x和y的对应列元素为横纵坐标分别绘制曲线,曲线条数等于矩阵的列数。 ③plot(x,y1,x,y2,…) 以公共的x元素为横坐标,以y1,y2,y3,…元素为纵坐标值绘制多条曲线。

82 例1.以向量y=(1,2,5,4.5,3,6,1)的各个分量为纵坐标,分量序号为横坐标绘制顺序连接线。 解:输入命令
二维图形的绘制(续) 例1.以向量y=(1,2,5,4.5,3,6,1)的各个分量为纵坐标,分量序号为横坐标绘制顺序连接线。 解:输入命令 >> y=[ ]; >> plot(y)

83 二维图形的绘制(续)

84 >>x=0:pi/10:2*pi; %构造向量 >>y1=sin(x); %构造对应的y1坐标
二维图形(续) 例2.画出一条正弦曲线和一条余弦曲线。 >>x=0:pi/10:2*pi; %构造向量 >>y1=sin(x); %构造对应的y1坐标 >>y2=cos(x); %构造对应的y2坐标 >>plot(x,y1,x,y2) %画出一个以x为横坐标,y1, y2为纵坐标的图形 指出: ①构造向量采用了所谓的冒号法,格式为 向量名=初值:步长:终值 %步长为1时可以省略。 ②plot是针对向量或矩阵的列来绘制曲线的,也就是说,使用plot之前必须首先定义好曲线上每一点的x坐标和y坐标。 ③在上述的格式中,x和y都可以是表达式。 ④如果自变量的间隔取得比较大,光滑的曲线就会显示出折线的本来面貌。

85 二维图形(续)

86 fplot(‘fun’,lims,’s’,tol) 其中,
2、函数绘图命令 [1]解析函数绘图命令fplot 使用格式: fplot(‘fun’,lims,’s’,tol) 其中, ①用单引号界定的输入参数fun,是解析函数字符串表达式、内联函数或m-函数文件名。fun可以是一个函数,也可以是元素是函数的向量。 ②输入参数lims规定了绘图区间,lims=[a,b,c,d]表示,自变量x和函数y的取值范围分别是x∈[a,b],y∈[c,d]。通常c,d被省略。 ③输入参数s用于修饰曲线,后面介绍。 ④输入参数tol规定函数取值的相对误差,常省略。默认2e-3。 ⑤fun是函数向量时,绘出的几条曲线的取值区间和线型是相同的。

87 例3.绘制函数f(x)=cos(tan(πx))的曲线。 解:
解析函数绘图命令fplot(续) 例3.绘制函数f(x)=cos(tan(πx))的曲线。 解: >> fplot('cos(tan(pi*x))',[-0.4,1.4]) >>

88 fplot(续)

89 ①输入该命令的函数表达式是解析式,式中不用数组算法符号(与plot命令不同)。
解析函数绘图命令fplot(续) 指出: ①输入该命令的函数表达式是解析式,式中不用数组算法符号(与plot命令不同)。 ②fplot函数用于绘制已定义函数在指定的范围内的图像,虽然它与plot相似,也是用描点法画图,但该函数可以根据函数自身的性质自适应地对函数进行采样,能够自动确定曲线变化率大的区段并在此区段进行密集采样。也就是说,画图时x的取值间隔是随函数的曲率自动调节的,曲率大(曲率半径小)处间隔小,曲率小处间隔大。这种自适应地取值使绘制的曲线光滑、美观、可以减少取点的数目的同时更好地反映函数的变化规律。

90 [2]隐函数绘图命令-ezplot 使用格式: ezplot(‘func’,lims) 其中 ①输入参数’func’可以是字符表达式,内联函数或m-函数文件名。 ②输入参数func为一元函数f(x)时,输出y=f(x)的几何图形。这时命令后面可以不用括号和引号。但函数的第一个符号不得是括号,不能加写输入参数lims,默认绘图范围是[-2π,2π]。 ③输入参数func是二元函数表达式f(x,y)时,输出方程f(x,y)=0的几何图形,即绘制隐函数曲线。变量的范围由输入参数lims规定,lims=[a,b,c,d]表示x和y的取值范围分别是x∈[a,b],y∈[c,d]。省略[c,d]时默认x、y取值区间相同。

91 时,func写成’x(t)’,’y(t)’,按参数方程绘出t∈[a,b]的函数曲线。
隐函数绘图命令-ezplot(续) ④输入参数func是参数方程 时,func写成’x(t)’,’y(t)’,按参数方程绘出t∈[a,b]的函数曲线。 ⑤输入参数lims规定自变量取值范围,默认范围是x∈[-2π,2π]。 ⑥该命令一次只能绘制一条曲线,在绘出函数图形的同时自动在图的上侧加注函数解析式,下侧加注自变量名称,曲线的色型、线型无法控制。

92 例4.绘制三叶玫瑰线r=sin(3t)(极坐标方程)。 解:把极坐标方程r=sin(3t),通过
隐函数绘图命令-ezplot(续) 例4.绘制三叶玫瑰线r=sin(3t)(极坐标方程)。 解:把极坐标方程r=sin(3t),通过 转换成直角坐标方程: 输入命令: >> ezplot('sin(3*t)*cos(t)','sin(3*t)*sin(t)',[0,pi])

93 隐函数绘图命令-ezplot(续)

94 例5.某次考试学生成绩优秀的占8%,良好的占20%,中等的占36%,及格的占24%,不及格的占12%。分别用饼图和条形图表示。
二维图形绘制(续) MATLAB绘制的其它图像的例子: 例5.某次考试学生成绩优秀的占8%,良好的占20%,中等的占36%,及格的占24%,不及格的占12%。分别用饼图和条形图表示。 解: >> x=[ ]; >> subplot(221);pie(x,[ ]); >> title('饼图'); >> subplot(222);bar(x,'grpup'); >> title('垂直条形图'); >> subplot(223);bar(x,'stack'); >> title('累加值为纵坐标的垂直条形图'); >> subplot(224);barh(x,'group'); >> title('水平条形图');

95 fplot(续)

96 3、绘图控制命令 (1)曲线控制命令 颜色控制符表 字符 颜色 b 蓝色 m 紫红色 c 青色 r 红色 g 绿色 w 白色 k 黑色 y
在使用plot等命令绘制曲线时可以指定曲线的颜色、线型和数据点图标。基本的调用格式为 plot(x,y,'color line-style marker') 颜色控制符表 字符 颜色 b 蓝色 m 紫红色 c 青色 r 红色 g 绿色 w 白色 k 黑色 y 黄色

97 绘图控制(续) 线型控制符表 线型格式 实线(默认) 点线 点划线 虚线 符号 - : -. --

98 数据点标记控制符表 标记符号 数据点形式 . 实心圆点 > 大于号 o(字母) 空心圆点 < 小于号 x 叉号 s 正方形 +
绘图控制(续) 数据点标记控制符表 标记符号 数据点形式 . 实心圆点 > 大于号 o(字母) 空心圆点 < 小于号 x 叉号 s 正方形 加号 d 菱形 * 星号 h 六角星 v 向下的三角形 p 五角星 ^ 向上的三角形

99 ①颜色、线型、标记三种属性的符号必须放在同一个字符串内。
绘图控制(续) 指出: ①颜色、线型、标记三种属性的符号必须放在同一个字符串内。 ②属性的先后顺序没有关系,可以只指定一两个属性,也可以全部缺省,但同种属性不能同时指定两个。 ③颜色缺省为蓝色。 ④点、线标识符缺省为实线。 ⑤属性间不用间隔。

100 例6.用红色、点连线、叉号画出正弦曲线。 >>x=0:0.2:8; >>y=sin(x);
绘图控制(续) 例6.用红色、点连线、叉号画出正弦曲线。 >>x=0:0.2:8; >>y=sin(x); >>plot(x,y,'r:x')

101 绘图控制(续)

102 (2)图形的标注命令 图形标注函数 函数 意义 title(‘…’) 给图形添加标题 xlabel(‘…’) 标记横坐标 ylabel(‘…’) 标记纵坐标 text(x,y,’…’) 在x,y所定义的位置标注 gtext(’…’) 该命令提示在鼠标指定位置(光标显示为“+”标注) axis(xmin xmax ymin ymax) 指定显示范围 Grid on(/of) 添加或取消网格线

103 >>xlabel(‘x轴’) %横坐标名 >>ylabel(‘y轴’) %纵坐标名
图形的标注(续) 例7.给例2的图形加入网格和标注。 >>x=0:pi/10:2*pi; >>y1=sin(x); >>y2=cos(x); >>plot(x,y1,x,y2) >>grid on %添加网格 >>xlabel(‘x轴’) %横坐标名 >>ylabel(‘y轴’) %纵坐标名 >>title(‘正弦函数和余弦函数曲线’) %标题 >>text(1.5,0.3,’cos(x)’) %指定位置标注 >>gtext(‘sin(x)’) %用鼠标选择位置标注 >>axis([0 2*pi ]) %设置坐标轴的最大最 小值

104 图形的标注(续)

105 ②标注也可以适当设定字符属性增加文本变化,例如
图形的标注(续) 指出: ①标注文字可以使用汉字。 ②标注也可以适当设定字符属性增加文本变化,例如 >>title(‘弦函数曲线’,‘FontName’,’隶书’,’FontSize’,20)

106 (3)图形的比较显示命令 默认的情况下,MATLAB每一次使用plot函数进行绘图,都将清除原有的图形,但有时候我们希望后面绘制的图形能和前面所绘制的图形进行比较。此时我们有两种方法,一是采用hold on(/of)命令,在同一个图形窗口中绘制新的图形叠加在原有的图形上。二是采用subplot(n,m,k)命令,将图形窗口分割成几个小窗口,在每个窗口中画出一个图形。 ①hold on(/of) 保持绘图命令 ②subplot(n,m,k) 将图形窗口分成n行m列个格子,在 第k个格子绘图,格子按从上到下依行计数。

107 >>plot(x,sin(x),’-’) >>hold on >>plot(x,cos(x),’:’)
图形的比较显示(续) 例8.在同一个窗口中,使用两次plot函数 绘制两条曲线。 >>x=0:0.2:12; >>plot(x,sin(x),’-’) >>hold on >>plot(x,cos(x),’:’)

108 图形的比较显示(续)

109 例9.把当前窗口分割成四个区域,绘制四条函数曲 线。 >>x=0:0.05:8; >>y1=2*sin(x);
图形的比较显示(续) 例9.把当前窗口分割成四个区域,绘制四条函数曲 线。 >>x=0:0.05:8; >>y1=2*sin(x); >>y2=2*cos(x); >>y3=sin(2*x); >>y4=cos(2*x); >>subplot(2,2,1); >>plot(x,y1); >>title(‘2sinx’)

110 >>subplot(2,2,2); >>plot(x,y2); >>title(‘2cosx’)
图形的比较显示(续) >>subplot(2,2,2); >>plot(x,y2); >>title(‘2cosx’) >>subplot(2,2,3); >>plot(x,y3); >>title(‘sin2x’) >>subplot(2,2,4); >>plot(x,y4); >>title(‘cos2x’)

111 图形的比较显示(续)

112 1、和二维图形相对应,MATLAB提供了一个三维曲 线绘制命令plot3,它的应用和plot类似,只是多了z方向的数据。
二、三维图形的绘制 1、和二维图形相对应,MATLAB提供了一个三维曲 线绘制命令plot3,它的应用和plot类似,只是多了z方向的数据。 例10.绘制一条三维曲线。 >>clear >>clc >>z=0:pi/50:10*pi; >>x=sin(z); >>y=cos(z); >>plot3(x,y,z)

113 三维图形(续)

114 peaks称为多峰函数,常用于三维曲面的演示。
三维图形(续) 2、绘制三维曲面的命令则有mesh(x,y,z)或surf(x,y,z)。它们的区别在于,前者绘制出的是一个用网格近似的曲面,后者绘制出的是一个真正表面图。 例11.绘制多峰函数图。 >>z=peaks(40); >>mesh(z); >>surf(z); peaks称为多峰函数,常用于三维曲面的演示。

115 三维图形(续)

116 三维图形(续)

117 xlabel('x');ylabel('y'); zlebel('z');
三、例 例12.画出函数 在区域上的图像。 解:执行下面的程序(pt3d.m): x=-18:0.5:18;y=x'; u=ones(size(y))*x; v=y*ones(size(x)); r=sqrt(u.^2+v.^2)+eps; z=sin(r)./r; mesh(z); xlabel('x');ylabel('y'); zlebel('z');

118

119 %加上eps避免当分母r趋向于0时会无法定义 z=sin(r)./r; %产生z轴数据 surf(x,y,z);
(pt3d2.m) x=-18:0.5:18;y=x; %产生x,y两个向量 [x,y]=meshgrid(x,y); %形成二维网格数据 r=sqrt(x.^2+y.^2)+eps; %加上eps避免当分母r趋向于0时会无法定义 z=sin(r)./r; %产生z轴数据 surf(x,y,z);

120

121 §5 MATLAB程序设计 一、MATLAB运算 1、关系运算 运算符 说明 < 小于 <= 小于或等于 > 大于
第四代编程语言(4GL) 一、MATLAB运算 1、关系运算 运算符 说明 < 小于 <= 小于或等于 > 大于 >= 大于或等于 == 等于 ~= 不等于

122 注意=和==的区别。==用于比较两个变量,当它们相等时返回1,当它们不相等时返回0;而=用于将运算的结果赋值给一个变量。
MATLAB运算(续) 关系运算用来比较两个同样大小的矩阵,或用来比较一个矩阵和一个标量。比较结果是一个0-1矩阵,当相应元素经关系运算结果为真时,对应位置上生成1,否则为0。 例1.已知矩阵A=[ ],找出大于4的元素的 位置。 >>A=[ ]; >>b=A>4 则输出的结果为 b = 注意=和==的区别。==用于比较两个变量,当它们相等时返回1,当它们不相等时返回0;而=用于将运算的结果赋值给一个变量。

123 ①对于数值矩阵,当元素为0时,逻辑上为假;当元素为非0时逻辑上为真。一般地,当表达式逻辑上为假时,赋值0;当表达式逻辑上为真时,赋值1。
MATLAB运算(续) 2、逻辑运算 ①对于数值矩阵,当元素为0时,逻辑上为假;当元素为非0时逻辑上为真。一般地,当表达式逻辑上为假时,赋值0;当表达式逻辑上为真时,赋值1。 ②注意符号输入。“~”使用键盘左上角的上位字符,而“|” 使用“Backspace”下面键的上位字符。 名称 运算符 说明 与运算 & 两个元素都是真时结果为真,否则为假 或运算 | 两个元素同为假时结果为假,否则为真 非运算 ~ 元素为假结果为真,元素为真结果为假

124 例2.建立矩阵A和B,计算A&B、A∣B、~B。 >>A=[1 -3 5;0 1 0];
MATLAB运算(续) 例2.建立矩阵A和B,计算A&B、A∣B、~B。 >>A=[1 -3 5;0 1 0]; >>B=[1 50 0; ]; >>C=A&B >>D=A∣B >>~B 输出结果为 C = D = ans =

125 二、MATLAB控制结构 顺序结构、选择结构、循环结构 1、顺序结构 顺序结构是由两个程序模块串接而成的,一个程序模块可以是一条语句、一段程序、一个函数等。顺序结构的两个程序模块按其在程序中的先后顺序依次执行。 在用MATLAB编写程序时,只要将两个模块按顺序排列组织进程序就实现了顺序结构。 2、选择结构 执行MATLAB结构的基本过程是,首先根据规定条件进行逻辑判断,如果条件成立,执行后续程序模块,否则执行备选程序模块。

126 ①if-else-end语句 格式: if 逻辑表达式 程序模块1; else 程序模块2; end
MATLAB控制结构(续) ①if-else-end语句 格式: if 逻辑表达式 程序模块1; else 程序模块2; end 如果逻辑表达式为真,则执行程序模块1,然后跳出该选择结构,执行end的后续命令;如果逻辑表达式为假,则执行程序模块2,然后跳出该选择结构,执行end的后续命令。

127 如果逻辑表达式为真,则执行if和end之间的程序模块,否则,执行end的后续命令。
MATLAB控制结构(续) ②if-end语句 格式 if 逻辑表达式 程序模块; end 如果逻辑表达式为真,则执行if和end之间的程序模块,否则,执行end的后续命令。

128 ③当有三个或更多的选择时,可采用if结构的下列形式: 格式: if 逻辑表达式1 程序模块1; elseif 逻辑表达式2 程序模块2; …
MATLAB控制结构(续) ③当有三个或更多的选择时,可采用if结构的下列形式: 格式: if 逻辑表达式1 程序模块1; elseif 逻辑表达式2 程序模块2; elseif 逻辑表达式n 程序模块n; else 程序模块n+1; end 如果逻辑表达式j为真,则执行程序模块j,然后跳出该选择结构,执行end的后续命令;如果if和elseif后的所有逻辑表达式都为假,则执行程序模块n+1,然后跳出该选择结构,执行end的后续命令。

129 其中表达式1的值是循环初值,表达式2的值为步长,表达式3的值为循环的终值。如果省略表达式2,则默认步长为1。
MATLAB控制结构(续) 3、循环结构 ①for语句 for x=表达式1:表达式2:表达式3 程序模块 end 其中表达式1的值是循环初值,表达式2的值为步长,表达式3的值为循环的终值。如果省略表达式2,则默认步长为1。 该循环的执行过程是: ⑴将表达式1的值赋给x; ⑵对于正的步长,当x的值大于表达式3的值时,结束循环;对于负的步长,当x的值小于表达式3的值时,结束循环。否则,执行for和end之间的程序模块,然后执行下面的第⑶步; ⑶x加上一个步长后,返回第⑵步继续执行。

130 只要表达式的值为1(真),就执行while和end之间的程序模块,直到表达式的值为0(假)时终止该循环。
MATLAB控制结构(续) ②while语句 while 表达式 程序模块 end 只要表达式的值为1(真),就执行while和end之间的程序模块,直到表达式的值为0(假)时终止该循环。 指出: ①对于逻辑表达式来说,一般地只要表达式的值不是0,就认为表达式为真。 ②在设计while循环时,要注意防止死循环的出现,也就是确保循环一定次数后一定可以退出循环。 ③相对于while循环,for循环更直观、简单,因此大多数程序员更喜欢用for循环。

131 s = 例3.求1+2+3+…+100的和。 用while语句的程序如下: i=0; s=0; while i<=100 s=s+i;
MATLAB控制结构(续) 例3.求1+2+3+…+100的和。 用while语句的程序如下: i=0; s=0; while i<=100 s=s+i; i=i+1; end s 将上述程序保存为m1531运行后可以得到结果 s = 5050

132 用for语句的程序如下: s=0; for i=1:100 s=s+i; end s 将上述程序保存为m1532运行后也可以得到结果 s =
MATLAB控制结构(续) 用for语句的程序如下: s=0; for i=1:100 s=s+i; end s 将上述程序保存为m1532运行后也可以得到结果 s = 5050

133 “明天不熟悉分形的人,将不能认为是科学上的文化人。”
三、分形(Fractal) “明天不熟悉分形的人,将不能认为是科学上的文化人。” 分形学是1980年代起新兴的数学学科,研究具有局部与整体自相似性的所谓分形图形。所谓自相似性,就是说分形图形的任何部分适当放大后,都能得到与原来整个图形相似的图形。 分形学是由曼德勃罗(B.B.Mandelbrot) 于1973年创建的。他1924年生于波兰的一个犹太家庭,后来迁居法国,在巴黎完成大学学业后移居美国,他是美国科学院院士和美国艺术与科学研究院院士,曾获得很多崇高的奖励,法国人称之为美籍法国数学家。 分形几何学是以自然界普遍存在的非规则几何形态为研究对象的几何学,因此分形几何又称为大自然的几何学。分形几何建立以后,很快就引起了许多学科的关注,这是由于它不仅在理论上,而且在实用上都具有重要价值。今天分形学虽然仅仅诞生不过20年,但是它对多种学科的影响是极其巨大的,已经获得了广泛的应用。

134 分形(续) 蕨类植物分形 图

135 1904年瑞典科学家科契(Koch)提出了这样一种曲线:
分形(续) Koch雪花曲线 1904年瑞典科学家科契(Koch)提出了这样一种曲线: 设一正三角形,每一边的长度为1,对各边作3等分,以中间三分之一的一段为边向外作正三角形,则每一边生成四条新的边,原来的三角形也就变成有12条边的六角星形;在三等分六角星形的12条边,同法向外作正三角形,每一条边又变成了4条边,这又就得到了48边形。这样无限做下去,就可以获得美丽的雪花图案。

136 分形(续)

137 a=[cos(pi/3) -sin(pi/3);sin(pi/3) cos(pi/3)] for k=1:5
分形(续) p=[0 0;10 0]; a=[cos(pi/3) -sin(pi/3);sin(pi/3) cos(pi/3)] for k=1:5 n=max(size(p));d=diff(p)/3; q=p(1:n-1,:); p(5:4:4*n-3,:)=p(2:n,:); p(2:4:4*n-6,:)=q+d; p(3:4:4*n-5,:)=p(2:4:4*n-6,:)+d*a'; p(4:4:4*n-4,:)=q+2*d; end plot(p(:,1),p(:,2))

138 分形(续)

139 分形的例子

140 分形的例子

141 分形的例子

142 分形的例子

143 §6 MATLAB实际应用 1、MATLAB编程技巧 2、MATLAB图形用户界面 3、Note-book

144 一、MATLAB编程技巧 1、及时清空工作空间 在每一个程序的开头加上clear命令,以清空内存中的自定义变量。 2、注释
为了增强程序的可读性,程序中要注意编写注释。 3、优化程序 [1]直接使用矩阵与向量,避免使用循环。 [2]不显示不必要的中间结果。 [3]对大型矩阵预先定义维数。 [4]优先使用内部函数。 [5]充分利用其他高级语言。 [6]设置断点调试。 [7]测试程序执行时间 tic用于启动秒表,toc用于停止秒表。 tic和toc返回的是变量elapsed_time。

145 例1.建立一个100×100的魔方矩阵,并测定运行时间。 解:>> tic % 开始计时
MATLAB编程技巧 例1.建立一个100×100的魔方矩阵,并测定运行时间。 解:>> tic % 开始计时 >> A=magic(100); % 运行程序,magic是魔方矩阵函数。 >> toc % 结束计时,显示所耗时间。 在命令窗口观察运行结果为。 elapsed_time = 4、注意格式 5、利用帮助和演示 6、特别提示 ①自定义变量和函数的名称不能和MATLAB命令及内部函数重名。 ②MATLAB不支持汉字,汉字不能出现在变量名和函数名中。 ③MATLAB对大小写敏感。

146 实际应用 二、MATLAB图形用户界面 三、Note-book


Download ppt "数值计算的工具—MATLAB 电子计算机技术为应用数学解决实际问题创造了物质条件 。"

Similar presentations


Ads by Google