MATLAB 入门简介

Post on 18-Jan-2016

78 views 6 download

description

MATLAB 入门简介. 概 述. Matlab 是由美国 Mathworks 公司推出的一个科技应用软件. 它的名字是由矩阵( MAT rix )和实验室 ( LAB oratory) 的头三个字母组成。顾名思义,它相当于把矩阵放在实验室里做实验, Matlab 是 以矩阵为单位 进行处理的,也就是它把一切都当作矩阵,即使是一个数也是。. Matlab 是一种高性能的、用于工程计算的编程软件,它把科学计算、结果可视化和编程都集中在一个使用非常方便的环境中。. 概 述(续). - PowerPoint PPT Presentation

Transcript of MATLAB 入门简介

MATLAB 入门简介

概 述

Matlab 是由美国 Mathworks 公司推出的一个科技应用软件 它的名字是由矩阵( MATrix )和实验室 ( LABoratory)的头三个字母组成。顾名思义,它相当于把矩阵放在实验室里做实验, Matlab 是以矩阵为单位进行处理的,也就是它把一切都当作矩阵,即使是一个数也是。

Matlab 是一种高性能的、用于工程计算的编程软件,它把科学计算、结果可视化和编程都集中在一个使用非常方便的环境中。

Matlab 是一种广泛应用于工程计算及数值分析领域的新型高级语言,自 1984 年由美国 MathWorks 公司推向市场以来,历经二十多年的发展与竞争,现已成为国际公认的最优秀的工程应用开发环境。 Matlab 功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。

在欧美各高等院校, Matlab 已经成为线性代数、自动控制理论、数字信号处理、时间序列分析、动态系统仿真、图像处理等课程的基本教学工具,成为大学生、硕士生以及博士生必须掌握的基本技能。

概 述(续)

Matlab 语言的首创人是 C. Moler

Matlab = Matrix Laboratry 矩阵实验室

概 述 (续)

1984 年 The MathWorks 的公司推出了第一个 Matlab 的商业版本,用 C 语言作了完全的改写。 其后又增添了丰富多彩的图形图像处理、多媒体功能、符号运算和它与其他流行软件的接口功能,使得 Matlab 的功能越来越强大。 到九十年代初期,在国际上 30 几个数学类科技应用软件中, Matlab 在数值计算方面独占鳌头,而 Mathematica

和 Maple 则分居符号计算软件的前两名。

Matlab 的发展 1984 年, Matlab 1.0 版 (DOS 版, 182K , 20 来个函数 )

1992 年, Matlab 4.0 版( 93 年推出 Windows 版本) 1994 年, Matlab 4.2 , 1999 年, Matlab 5.3

2000 年, Matlab 6.0 , 2002 年, Matlab 6.5

2004 年, Matlab 7.0 , 2006 年, Matlab2006a

目前, Matlab 已经成为国际上最流行的科学与工程计算的软件工具,它已经不仅仅是一个“矩阵实验室”了,而成为了一种具有广泛应用前景的全新的计算机高级编程语言了 , 有人称它为“第四代”计算机语言。 就影响而言,至今仍然没有一个别的计算软件可与 Matlab 匹敌。

概 述(续)

数值计算功能

Matlab 是一个交互式软件系统 给出一条命令,立即就可以得出该命令的结果

Matlab 的特点与主要功能

Matlab 以矩阵作为基本单位,但无需预先指定维数(动态定维) 按照 IEEE 的数值计算标准进行计算 提供十分丰富的数值计算函数,方便计算,提高效率 Matlab 命令与数学中的符号、公式非常接近,可读性强,容易掌握

符号运算功能和著名的 Maple 相结合,使得 Matlab 具有强大的符号计算功能

绘图功能Matlab 提供了丰富的绘图命令,能实现一系列的可视化操作

Matlab 的特点与主要功能 编程功能

Matlab 具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。

丰富的工具箱( toolbox )Matlab 包含两部分内容:基本部分和根据专门领域中的特殊需要而设计的各种可选工具箱。

Simulink 动态仿真集成环境提供建立系统模型、选择仿真参数和数值算法、启动仿真程序对该系统进行仿真、设置不同的输出方式来观察仿真结果等功能

PDEOptimizationSymbolic Math

Signal processImage ProcessStatistics

Control SystemSystem Identification… …

命令窗口

当前工作目录

当前工作空间

输入命令的历史记录

命令提示符

MATLAB 的联机帮助

MATLAB 具有完善的帮助系统 (1) help / doc 命令

查看指定命令的使用方法

(2) lookfor 命令根据用户提供的关键词,去搜索出一组与之有关的命令

Matlab 语言规则

Matlab 区分大小写,它的命令和函数全是小写的

一行可以输入几个命令,用分号“ ;” 或逗号“ ,”隔开

续行符: “…”(三个点),如果语句很长,可用续行符将一个语句写成多行。续行符的前最好留一个空格。

注释符: “ %” ,其后面的内容为注释,对 Matlab 的计算不产生任何影响

Matlab 变量

Matlab 中变量名是以字母开头,可以由字母、数字或下划线组成,最多 63 个字符( 6.5 版本前为 19 个) 变量赋值: 变量=表达式

赋值号左边必须是变量!

系统预定义变量: eps, pi, Inf, NaN, i, j

who 、 whos 、 clear

save 、 loadsave - 将所有变量存入文件 matlab.mat

save mydat / save mydat.mat -将所有变量存入 mydata.mat

save 文件名 变量名列表

数与算术表达式 Matlab 中的数值表示一般采用十进制,可以带小数点和正负号。

(1) Matlab 中的数默认是双精度实数

(2) 浮点运算的相对精度为 eps , Matlab 中 eps2.22e-016, 即大约保持 16 位有效数字。

(3) Matlab 中数的表示范围为: 10–308 ~ 10308

(4) Matlab 中的虚部单位: i , j z=3+4i (4 与 i 之间无空格 ), z=3+4*i

如: 6, +6, -6.6, 0.006, 6.6e-6, 100e60, -0.06e-012

数据的输入 数据输入 (1) 直接输入: a=[1 2 ; 3, 4]

(2) 冒号 “ :” 运算符:初值 : 步长 : 终值

同一行中各元素之间用“空格”或“ ,” ( 英文状态下 ) 分开;行与行之间用 “ ;” 或“回车”分开

a=[1:5], b=[0:pi/4:pi] (3) 由向量或小矩阵生成: X=[a ; b]

(5) 交互式输入: input n=input('Please input n: ')

(4) 由 数据文件生成

特殊矩阵生成函数 (6) 一些生成特殊矩阵的函数zeros(m,n) 生成一个 m 行 n 列的零矩阵, m=n 时可简写为 zeros(n)

ones(m,n) 生成一个 m 行 n 列的元素全为 1 的矩阵 , m=n 时可写为 ones(n)

eye(m,n) 生成一个主对角线全为 1 的 m 行 n 列矩阵 , m=n 时可简写为 eye(n) ,即为 n 维单位矩阵

diag(X) 若 X 是矩阵,则 diag(X) 为 X 的主对角线向量若 X 是向量, diag(X) 产生以 X 为主对角线的对角矩阵

tril(A) 提取一个矩阵的下三角部分triu(A) 提取一个矩阵的上三角部分rand(m,n) 产生 0~1 之间均匀分布的随机矩阵 m=n 时简写为 rand(n)

randn(m,n) 产生均值为 0 ,方差为 1 的标准正态分布随机矩阵m=n 时简写为 rand(n)

magic, vander, pascal, hilb

矩阵元素的操作

矩阵元素的提取

(1) 单个元素: A ( 2, 3 )

(2) 整行或整列: A ( 2, : ) , A ( :, 3 )

(3) 子矩阵: A ( 2:5, 4:8 ) , A ( [1,3], [2,4] ) , A ( [3,2], [2,4] )

A ( :, : ) 与 A ( : ) 的区别?

(4) 删除矩阵的行列 : A =[] , A ( 3, : )=[] , A ( :, [2,4] )=[]

数据输出格式

Matlab 以双精度执行所有的运算,结果可以在屏幕上输出,同时赋给指定变量,若无指定变量,则系统会自动将结果赋给变量 “ ans”

Matlab 中数据的输出格式可以通过 format 命令指定

format 命令只改变变量的输出格式,但不会影响变量的值

>> format long

>> format rational

>> format compact

特殊矩阵生成函数 格式 解释 例format 短格式(缺省显示格式),同 short 3.1416

format short 短格式(缺省显示格式),只显示 5 位 3.1416

format long 长格式,双精度数 15 位,单精度数 7位

3.14159265358979

format short e 短格式 e 方式(科学计数格式) 3.1416e+000

format long e 长格式 e 方式 3.141592653589793e+000

format short g 短格式 g 方式 3.1416

format long g 长格式 g 方式 3.14159265358979

format compact 压缩格式 / 紧凑格式format loose 自由格式 / 宽松格式format + / format bank / format rat / format hex ( 详情查看联机帮助 )

MATLAB 矩阵运算 矩阵的转置:共轭“ '” ,非共轭“ .'”

矩阵的翻转和旋转: fliplr、 flipud、 rot90

矩阵元素重组: reshape(A, m, n)

查看矩阵的大小: size(A) 、 size(A, 1) 、 size(A, 2)

将 A 排成一个 m n 的矩阵,满足 m n = #A

数组运算(点运算): .*, ./, .\, .^

矩阵算术: +, -, *, /, \, ^

参与 “ +, -, .*, ./ , .\” 运算的对象必须具有相同的形状

MATLAB 矩阵运算

矩阵的 Kronecker 乘法: kron(A,B)

BaBaBa

BaBaBa

BaBaBa

BA

nmnn

m

m

21

22221

11211

MATLAB 函数取值

Matlab 普通函数取值设 x 是变量, f 是一个函数,则

(1) 当 x = a 是标量时, f (x) = f (a)

(2) 当 x 是向量或矩阵时, f 作用在 x 的每个分量上,结果为一个与 x 具有相同形状的向量或矩阵

11 1

1

exp( ) exp( )exp( )

exp( ) exp( )

n

m mn

a aA

a a

Matlab 矩阵函数: expm、 sqrtm、 logm,

funm

funm(A,@cos)

MATLAB 的三角函数

三角函数sin(x) 正弦函数 asin(x) 反正弦函数cos(x) 余弦函数 acos(x) 反余弦函数tan(x) 正切函数 atan(x) 反正切函数cot(x) 余切函数 acot(x) 反余切函数sec(x) 正割函数 asec(x) 反正割函数csc(x) 余割函数 acsc(x) 反余割函数 ... ...

MATLAB 的基本数学函数 基本数学函数abs(x) 绝对值 sum(x) 求和max(x) 最大值 min(x) 最小值sqrt(x) 开平方 exp(x) 以 e 为底的指数log(x) 自然对数 log10(x

)以 10 为底的对数

sign(x) 符号函数 mod(x,y)

两整数相除的余数

conj(x) 求复数的共轭real(x) 取复数的实部 imag(x) 取复数的虚部

取整函数与矩阵相关函数 取整函数

矩阵相关函数

round(x) 四舍五入到最近的整数fix(x) 朝零方向取整ceil(x) 朝正无穷方向取整floor(x) 朝负无穷方向取整

norm(A) 向量或矩阵的范数 rank(A) 矩阵的秩det(A) 矩阵的行列式 trace(A) 矩阵的迹inv(A) 方阵的逆矩阵 eig(A) 特征值及特征向量size(A) 矩阵的阶数 cond(A) 矩阵的条件数lu(A) 矩阵的 LU分解 qr(A) 矩阵的 QR分解

Matlab 程序设计介绍 Matlab 是一种科学计算语言,但同时也具有和 C 、 FORTRAN 等高级语言相类似的语言特征,能方便地实现程序控制。利用 Matlab 的程序控制功能,可以将有关Matlab 命令编成程序存储在一个文件中( M文件),然后运行该文件, Matlab 就会自动依次执行文件中的命令,直到全部命令执行完毕。

在 Matlab 程序设计中,要充分利用 Matlab 数据结构的特点,提供编程效率。

M 文件 用 Matlab 语言编写的程序称为 M文件,以“ .m” 为扩展名

M文件根据调用方式的不同可以分为两类:

M文件是由若干 Matlab 命令组合在一起构成的,它可以完成某些操作,也可以实现某种算法

Script file :命令文件 /脚本文件 Function file :函数文件

事实上, Matlab 提供的内部函数以及各种工具箱,都是利用 Matlab 语言编写的 M 文件 用户也可以结合自己的工作需要,开发自己的程序或工具箱

命令文件没有输入参数,也不返回输出参数; 函数文件可以带输入参数,也可以返回输出参数

命令文件对 Matlab 当前工作空间的变量进行操作,文件中所有命令的执行结果也返回到当前工作空间中; 函数文件中定义的变量为局部变量,当函数执行完后,这些变量被清除

命令文件可以直接运行,在 Matlab 命令窗口中输入文件的名字就会顺序执行文件中的命令; 函数文件不能直接运行,要以函数调用的方式来调用

两类 M 文件的区别

(1) 命令文件:输入以下内容并以文件名 f2cs.m 存盘

)32(9

5 fc

clear ; %清除当前工作空间中的变量f=input('Please input Fahrenheit temperature:');c=5*(f-32)/9;fprintf('The Centigrade Temperature is %g\n', c);

在 Matlab 命令窗口中输入 f2cs ,即可执行该命令文件。不用输入参数,也没有输出参数,执行完后,变量 c 、 f 仍保留在工作空间。(可用 whos查看)

举例(一)例:分别用命令文件和函数文件将华氏温度转化为摄氏温度。

函数文件:建立函数文件 f2cf.m ,内容如下:

function c=f2cf(f) c=5*(f-32)/9;

在 Matlab 命令窗口中输入 >> f2cf(100)

调用该函数时,既有输入参数,又有输出参数;函数调用完后,变量 c 、 f 没有被保留在工作空间。

M 文件的建立与打开

M文件是一个文本文件,可以用任何文本编辑器来建立和编辑,而一般使用 Matlab 自带的文本编辑器。

启动 Matlab文本编辑器有三种方法:

打开已有的 M文件:1 )菜单操作( open)2 )命令操作( edit 文件名)3 )命令按钮(快捷键)4 )双击 M文件

1 )菜单操作( New)2 )命令操作( edit)3 )命令按钮(快捷键)

关系运算 比较运算: 关系操作符

< 小于 <= 小于等于> 大于 >= 大于等于

== 等于 ~= 不等于

比较两个变量的大小,结论是“真”则返回 “ 1” ,结论为“假”则返回 “ 0” 。 “==”与“ =”的区别: == 是比较两个变量, = 是赋值。 关系操作符能用来比较两个同样大小的矩阵,或用来比较一个矩阵和一个标量,在后一种情况,标量和矩阵中的每一个元素相比较。比较结果与矩阵大小一样。

关系运算 逻辑运算:

相关函数:

逻辑运算符& 逻辑与| 逻辑或~ 逻辑非

xor(x,y) :异或运算

若 x 为矩阵,则 any 和 all 按列运算,返回一个 0-1向量

any(x):若向量 x 中存在非零元素,则返回 1 ,否则返回 0all(x): 若向量 x 中所有元素非零,则返回 1 ,否则返回 0

程序控制结构

程序控制结构有三种:顺序结构、选择结构和循环结构;任何复杂的程序都可以由这三种基本结构构成。

按排列顺序依次执行,直到程序的最后一个语句。这是最简单的一种程序结构,一般涉及数据的输入、数据的计算或处理、数据的输出等。

顺序结构

数据的输入: inputA=input(提示信息 );其中提示信息为字符串

A=input(提示信息, 's');允许用户输入字符串name=input('What''s your name?' , 's')

顺序结构(续) 数据的输出: disp

disp(X); 其中 X 是字符串或矩阵

程序的暂停: pausepause(n);

若想强行中止程序的运行,可以使用 Ctrl+c

其中 n 是延迟时间,以秒为单位;也可以直接使用 pause,则将暂停程序,直到用户按任一键后继续。pause off: 屏蔽程序中所有 pause 的作用;pause on: 打开 pause 的作用。

根据给定的条件是否成立而分别执行不同的语句

单分支 if expr (条件) statement (语句组)end

if 语句

选择结构

Matlab 用于实现选择结构的语句有 if 和 switch 语句

双分支 if expr (条件) statement1 (语句组 1 )else statement2 (语句组 2 )end

多分支:if expr1 (条件 1 ) statement1 (语句组 1 )elseif expr2 (条件 2 ) statement2 (语句组 2 ) ... ...elseif exprm (条件 m ) statementm (语句组 m )else statement (语句组)end

IF 语句

elseif 可以出现多个,但 else 只能有一个!

switch 语句根据表达式的取值不同,分别执行不同的语句。

switch expr (表达式) case expr1 (表达式 1 ) statement1 (语句组 1 ) case expr2 (表达式 2 ) statement2 (语句组 2 ) ... ... case exprm (表达式 m ) statementm (语句组 m ) otherwise statement (语句组)end

当任意一个分支的语句执行完后,直接执行 switch 语句后面的语句。

switch 子句后面的表达式可以是一个标量或字符串;case 子句后面的表达式可以是标量或字符串,也可以是一个单元( cell ),此时表达式的值等于该单元中的某个元素时,执行相应的语句组。

switch 语句(续)

循环结构 循环结构是按照给定的条件,重复执行指定的语句

for 语句

for variable = expr statement (循环体语句)end

循环变量

expr 可以是行向量,也可以是矩阵。

Matlab 用于实现循环结构的语句有 for 语句和 while 语句

在 Matlab 编程中,采用循环会降低程序的执行速度,应尽量避免使用,或用其它方式代替,如向量运算等。

while expr (条件) statement (循环体语句)end

break 和 continue 语句break 语句用于终止循环的执行。 continue 语句控制跳过循环体内的某些语句,继续下一次循环。 break 和 continue 一般与 if 语句配合使用。

循环语句可以嵌套使用

while 循环:

while 循环

函数文件

function 输出形参表 = 函数名 ( 输入行参表 )

注释说明部分(可选)函数体语句 ( 必须 )

其中以 function 开始的一行为引导行,表示该 M

文件是函数文件。

特别提示:添加注释是个良好的编程习惯。

函数文件名与函数名一定要统一

函数名的命名规则与变量名相同(必须以字母开头)。当输出行参多于一个时,用方括号括起来

函数文件由 function 语句引导,其基本结构为:

几点说明

return 语句

如果在函数文件中插入了 return 语句,则执行到该语句时就结束函数的执行,程序流程转至调用该函数的位置。函数文件中可以不含 return 语句,这时当被调用函数执行完成后就自动返回。

函数文件内定义的变量仅在函数文件内部起作用, 当函数文件执行完成后,这些内部变量将被清除

函数调用

函数调用的一般格式函数文件编好后,就可以被其它 M文件调用了。

输出实参表 = 函数名 ( 输入实参表 )

函数调用时,实参的顺序、个数必须与函数定义时的形参的顺序、个数一致。

函数可以嵌套调用,即一个函数可以被其它函数调用,甚至可以被它自身调用,此时称为递归调用。

举例(一)

1,)!1(

1,1!

nnn

nn

% 函数文件 factor.mfunction f=factor(n)if (n<=1) f=1;else f=n*factor(n-1);end

% 命令文件 main.m% 计算 s=1!+2!+3!+4!+5!s=0;for i=1:5 s=s+factor(i);endfprintf(‘\n s=%g’,s)

例:利用函数的递归调用计算 n!

局部变量

函数通过输入和输出参数与其它 M 文件进行数据传递。

当函数调用完毕后,该函数文件中定义的所有局部变量都将被释放。

如果在若干个函数中,都把某个变量定义为全局变量,则这些函数将公共使用这一变量。全局变量的作用域是整个 Matlab 工作空间,即全程有效,所有函数都可以对它存取和修改。定义全局变量是函数间传递信息的一种手段。

函数文件中的变量都是局部的,即一个函数文件中定义的变量不能被另一个函数文件或其它 M文件使用。

全局变量

变量名列表中的各个变量用空格隔开,不能用逗号!

全局变量给函数间的数据传递带来了方便,但却破坏了函数对变量的封装,降低了程序的可读性,因而在结构化程序设计中,全局变量是不受欢迎的。特别是当程序较大,子程序较多时,全局变量将个程序调试和维护带来不便,故不提倡使用全局变量。

global 变量名列表

全局变量的定义

猜数游戏首先由计算机随机产生一个 [1, 100] 之间的一个整数,然

后由用户猜测所产生的这个数。根据用户猜测的情况给出不同的提示,如果猜测的数大于产生的数,则显示“ High” ,小于则显示“ Low” ,等于则显示“ You wo

n !”,同时退出游戏。用户最多有 7 次机会。

举例(二)

平面绘图: plot 基本原理:点 线

Matlab 绘图小结

Matlab 绘图小结

例: y=sin(x), 0<x<2*pi

>> x=[0:0.5:2*pi];>> y=sin(x);>> plot(x,y,‘.')

Matlab 绘图小结

例: y=sin(x), 0<x<2*pi

>> x=[0:0.5:2*pi];

>> y=sin(x);>> plot(x,y,‘.-')

Matlab 绘图小结

例: y=sin(x), 0<x<2*pi

>> x=[0:0.1:2*pi];

>> y=sin(x);>> plot(x,y,‘.')

Matlab 绘图小结

例: y=sin(x), 0<x<2*pi

>> x=[0:0.1:2*pi];>> y=sin(x);>> plot(x,y,‘.- ')

Matlab 绘图小结

例: y=sin(x), 0<x<2*pi

>> x=[0:0.1:2*pi];

>> y=sin(x);>> plot(x,y)

平面绘图: plot

基本原理:点 线 基本形式:

plot(x,y,’s’) x,y 是相同类型的向量,且长度相等。 s 用于控制图形的属性,可省略。

Matlab 绘图小结

问题:plot(y) 输出结果是什么?

线型 点标记 颜色- 实线: 虚线-. 点划线-- 间断线

. 点o 小圆圈x 叉子符+ 加号* 星号s 方格d 菱形^ 朝上三角v 朝下三角> 朝右三角< 朝左三角p 五角星h 六角星

y 黄色 m 棕色 c 青色r 红色g 绿色b 蓝色w 白色k 黑色

平面绘图: plot

基本原理:点 线

基本形式: plot(x,y,’s’)

x,y 是相同类型的向量,且长度相等。

plot(x1,y1,’s1’,x2,y2,’s2’,…, xn,yn,’s

n’)

(x1,y1), …,(xn,yn) 分别满足上面的条件。

Matlab 绘图小结

三维空间绘图: 基本原理:点 线 或 点 线 面

Matlab 绘图小结

三维曲线: plot3 plot3(x,y,z,’s’) x,y,z 是相同类型的向量,且长度相等。

plot3(x1,y1,z1,’s1’, …, xn,yn,zn,’sn’) (x1,y1,z1), …,(xn,yn,zn)分别满足上面的条件。

三维曲线方程: x=x(t), y=y(t), z=z(t), a<t<b

t=[a:h:b]; x=x(t); y=y(t); z=z(t); plot3(x,y,z,’s’);

Matlab 绘图小结

y=y(x), z=z(x), a<x<b x=[a:h:b]; y=y(t); z=z(t); plot3(x,y,z,’s’);

两曲面的交线: f(x,y,z)=0, g(x,y,z)=0 ??用 Matlab 绘图时,空间曲线要用参数方程来表示。

例:三维螺线 y=sin(x),z=cos(x), 0<x<20

Matlab 绘图小结

Matlab 绘图小结

>> t=[0:0.5:20];

>> y=sin(t);

>> z=cos(t);

>> plot3(t,y,z,‘.')

Matlab 绘图小结

>> t=[0:0.5:20];

>> y=sin(t);

>> z=cos(t);

>> plot3(t,y,z,‘.-')

Matlab 绘图小结

>> t=[0:0.1:20];

>> y=sin(t);

>> z=cos(t);

>> plot3(t,y,z,‘.-')

三维空间绘图: 基本原理:点 线 或 点 线 面 三维曲线: plot3 空间曲面: mesh 和 surf

mesh(X,Y,Z,C) 或 surf(X,Y,Z,C)

C 用来指定图形的配色,若省略,则取 C=Z。

Matlab 绘图小结

Matlab 绘图小结

mnmm

n

n

xxx

xxx

xxx

X

21

22221

11211

mnmm

n

n

yyy

yyy

yyy

Y

21

22221

11211

mnmm

n

n

zzz

zzz

zzz

Z

21

22221

11211 点 : ),,( ijijij zyxnjmi ,,1,,,1

线 : 分别沿 x方向和 y方向 连接这些点。

矩阵 X,Y,Z 的元素分别为点的 x-坐标, y-坐标和 z-坐标。

矩阵 X,Y 的生成 : meshgrid

Matlab 绘图小结

设曲面方程: dycbxayxzz , ),,(X,Y 需要你给定, Z 由曲面函数计算生成。

x

y

a b

c

d绘图区域

矩阵 X 由这些点的横坐标构成 矩阵 Y 由这些点的纵坐标构成 X , Y 的生成具体方法: meshgrid>> x=[a:h1:b]; % h1 为 x方向步长>> y=[c:h2:d]; % h2 为 y方向步长>> [X,Y]=meshgrid(x,y);

若 x=y,则可简写为:[X,Y]=meshgrid(x);

在 Matlab 中,%是注释符号

“墨西哥帽子” : 22

22sin

yx

yxz

在 -a<x<a, -a<y<a 区域内的曲面图形。例 1. a=8 时的曲面图形:>> x=[-8:0.5:8]; >> y=[-8:0.5:8]; >> [X,Y]=meshgrid(x,y);>> r = sqrt(X.^2 + y.^2) + eps;>> Z = sin(r)./r;>> mesh(Z)

[X,Y]=meshgrid([-8:0.5:8]);

例 1. a=8 时的曲面图形:

例 2. a=20 时的曲面图形:

三维空间绘图: 基本原理:点 线 或 点 线 面 三维曲线: plot3 空间曲面: mesh 和 surf 其它曲面绘图函数: meshc、meshz 、 surfc

Matlab 绘图小结

图形的控制与修饰:

坐标轴的控制: axis axis(xmin,xmax,ymin,ymax,zmin,zmax) axis auto/on/off/equal/square/manual/…

Matlab 绘图小结

图形的控制与修饰:

坐标轴的控制: axis

Matlab 绘图小结

网格: grid /on/off 标注: title、 xlabel、 ylabel、 zlabel、 text

title(‘text’, ‘Property1’, PropertyValue1, ... ) xlable、 ylabel、 zlabel 的用法与 title 相同; text(x,y,z,’text’)

图形的控制与修饰:

坐标轴的控制: axis

Matlab 绘图小结

网格: grid /on/off 标注: title、xlabel、 ylabel、zlabel、 text

配色方案: colormap colormap([r g b]) 或 colormap(‘s’)

find 命令: find (’条件’)

legend 命令: 图例

利用 plot 函数在一个坐标系下绘制以下函数的图形,要求采用不同的颜色、线型、符号标记。

>> x=sin(t);>> y=cos(t);>> z=sin(2*t);>> plot(t,x,'--k*',t,y,'-rs',t,z,':bo')

>> t=0:pi/20:2*pi;

20 ),2sin( ),cos( ),sin( ttztytx

>> legend(‘sin(t)’, ‘cos(t)’, ‘sin(2t)’)

Matlab 绘图小结 绘图举例:

Matlab 绘图小结

Matlab 绘图小结

实验一、特殊函数与特殊图形

>> [X,Y]=meshgrid(-12:0.5:12);

>> R=sqrt(X.^2+Y.^2) + eps;>> Z=sin(R)./R;

>> index=find(R>11);>> Z(index)=NaN;

>> mesh(Z);>> axis squal;>> axis off;

教材 P51 , 2:墨西哥帽子的剪裁

实验一、特殊函数与特殊图形

没有剪裁的墨西哥帽子

实验一、特殊函数与特殊图形

剪裁后的墨西哥帽子

符号函数绘图: 平面曲线: ezplot

Matlab 绘图小结

ezplot( f(x) ) 上的图形绘制 22 在区间 xf(x)f

ezplot( f(x), [a,b] ) 上的图形绘制 在区间 bxaf(x)f

ezplot( f(x,y) )上的图形 22,22 在区间 0),( yxyxf

ezplot( f(x,y) ,[a,b,c,d] )上的图形 , 在区间 0),( dycbxayxf

ezplot( f(x,y) ,[a,b] )上的图形 , 在区间 0),( byabxayxf

例:

Matlab 绘图小结

ezplot( ‘sin(x)’ )上的图形绘制 22 在区间 )(sin xxf

ezplot( ‘sin(x)’, [-pi, pi] )上的图形绘制 在区间 )sin( xxf

ezplot( ‘x^2 + y^2 -9’ )

上的图形 22,22 在区间 0922 yxyx

ezplot(‘x^2 + y^2 -9’ ,[-3,3] )

上的图形 33,33 在区间 0922 yxyx

函数表达式要加单引号。

符号函数绘图: 平面曲线: ezplot 三维曲线: ezplot3

Matlab 绘图小结

ezplot3(x(t),y(t),z(t), [a, b])btatzztyytxx ),(),(),(曲线:

ezplot3(x(t),y(t),z(t))20),(),(),( ttzztyytxx曲线:

需将曲线方程化为参数方程。

例:三维螺线 x=t, y=sin(t), z=cos(t)

Matlab 绘图小结

ezplot3(‘t’, ‘sin(t)’, ‘cos(t)’, [0, 20] )

每个函数表达式都要加单引号。

符号函数绘图: 平面曲线: ezplot 三维曲线: ezplot3 三维曲面: ezmesh、 ezsurf

Matlab 绘图小结

Matlab 绘图小结

ezmesh(z(x,y), [a, b, c, d])dycbxayxzz ,),,(

ezmesh(x(s,t),y(s,t),z(s,t),[a, b, c, d])dtcbsatszztsyytsxx ,),,(),,(),,(

ezmesh(z(x,y), [a, b])

ezmesh(z(x,y))

byxa , 2,2 yx

ezmesh(x(s,t),y(s,t),z(s,t),[a, b])

ezmesh(x(s,t),y(s,t),z(s,t))

btsa ,

2,2 ts

ezsurf 的用法与 ezmesh 相同。

符号函数绘图: 平面曲线: ezplot 三维曲线: ezplot3 三维曲面: ezmesh、 ezsurf

ezmeshc、 ezsurfc

Matlab 绘图小结

绘图子区域的划分: subplot

Matlab 绘图小结

subplot(m, n, p)

该函数将一个图形窗口分割成 m*n 个子区域, p 表示第 p 个绘图子区域。绘图子区域编号 按行 从左至右。

Matlab 符号运算介绍 Matlab符号运算是通过符号数学工具箱( Symb

olic Math Toolbox )来实现的。

Matlab 符号运算

符号对象的建立: sym 和 syms

例: >> syms x y z

>> x=sym(‘x’);>> y=sym(‘y’);>> z=sym(‘z’);

符号对象建立时可以附加属性: real、positive 和 unreal

>> k=sym('k','positive')

>> x=sym('x','real')

>> x=sym('x','unreal')

表明 x 是实的

表明 k 是正的

去掉 x 的附加属性

符号表达式的建立

>> f2=sym(’sin(x)+cos(x)’)

>> syms x>> f1=sin(x)+cos(x)

>> f3=’sin(x)+cos(x)’用这种方法创建的符号表达式对空格很敏感,不要在字符间随意添加空格!

推荐!

符号变量与符号常量>> a=sym(‘a’);>> b=sym(‘5’); >> c=sym(5);

b、 c有区别吗?hint : help sym

相关函数 findsym: 查找符号表达式中的符号变量

findsym(f)按字母顺序列出符号表达式 f 中的所有自由变量 findsym(f,N)列出 f 中距离 x 最近的 N 个自由变量( i , j 除外)

默认自变量=findsym(f,1)

>> a=sym('a');x=sym('x');k=sym('3');>> f=k*x+a;>> findsym(f)

例:

ans=a ,x

相关函数 subs :符号替换

subs(f): 用当前工作空间中存在的变量值,替换 f中所有出现的相同的变量,并进行简化计算。subs(f,x,a) :用 a 替换 f 中的 x ; a 是可以是 数 /数值变量 /表达式 或 符号变量 /表达式。 若 x 与 a 为相同大小的向量或矩阵,则用 a 中相应的元素替换 x 中的元素; 若 f , x 为标量,而 a 是向量或矩阵,则 f 与 x将扩展为与 a 相同形状的向量或矩阵。

例:>> syms x y>> f=2*x+y;>> x=3,y=4;>> subs(f)>> subs(f,x,’a’)

>> syms x y a b>> f=2*x+y;>> subs(f,[x,y],[3,4])>> subs(f,{x,y},{3,4})>> subs(f,x,[1:3])>> subs(f,{x,y},{[1:3],[5:7]})

>> subs(f,{x,y},{a+b,a-b})>> subs(f,{x,y},{x+y,x-y})

ans=10ans=2*x+y

ans=10

ans=[2+y,4+y,6+y]ans=[7 10 13]

yxxf 2)(

ans=3*a+b?

符号矩阵 使用 sym 函数直接生成>> A=sym(’[1+x, sin(x); 5, exp(x)]’)

将数值矩阵转化成符号矩阵>> B=[2/3, sqrt(2); 5.2, log(3)]>> C=sym(B)

符号矩阵中元素的引用和修改>> A=sym(’[1+x, sin(x); 5, exp(x)]’)>> A(1,2)>> A(2,2)=sym(’cos(x)’)

能否用 sym(‘B’)?

符号矩阵的基本运算符号矩阵的基本运算与数值矩阵的基本运算相类似。

1) 基本运算符: + 、 - 、 * 、 \ 、 / 、 ^ 、 .* 、 .\ 、 .

/ 、 .^ 、’ 、 .’2) 三角函数与反三角函数: sin 、 cos 、 tan 、… … 3) 指数、对数函数: sqrt 、 exp 、 log 、… …

4) 复数函数: real 、 imag 、 conj 、 abs

5) 矩阵函数: det 、 inv 、 rank 、 … … (没有 nor

m )6) 矩阵元素的抽取: diag 、 tril 、 triu

六大常见符号运算 因式分解、展开、合并、简化及通分等

因式分解: factor>> syms x>> f=x^6 +1>> s=factor(f)

s =(1+x^2)*(x^4-x^2+1)

factor 也可用于正整数的分解

大整数的分解

展开函数: expand 多项式展开

三角函数展开

该函数经常用于多项式展开,也常用于三角函数、指数函数和对数函数的展开中。

合并同类项: collect

collect(f,v): 按指定变量 v 的次数合并系数;

collect(f): 合并 f 中的默认自变量的各项系数。findsym(f,1)

简化函数: simple 和 simplify simple(f): 对 f 尝试多种不同的算法简化, 返回其中最短的简化形式;

[R,HOW]=simple(f): R为 f的最短简化形式, HOW中记录的为简化过程中使用的主要方法。

f R HOW

2*cos(x)^2-sin(x)^2 3*cos(x)^2-1 simplify

(x+1)*x*(x-1) x^3-x combine(trig)

x^3+3*x^2+3*x+1 (x+1)^3 factor

cos(3*acos(x)) 4*x^3-3*x expand

simple函数示例

simplify(f): 简化函数

注:多次 使用 simple 可以达到最简表达。

例:化简 323 81261)(

xxxxf

分式通分: numden[N,D]=numden(f): N为通分后的分子,D为通分后的分母

horner多项式:嵌套形式的多项式

1))1)1(((

1)( 1

xxxx

xxxxf nn例:

六大常见符号运算 因式分解、展开、合并、简化及通分等

Matlab 符号运算(二)

计算极限 limit(f,x,a): 计算 )(lim xf

ax

limit(f,a): 计算默认自变量趋向于 a时 f的极限 limit(f): 计算 a=0 时的极限 limit(f,x,a,’right’) :右极限

limit(f,x,a,’left’) :左极限

例:求极限

>> syms h n x>> L=limit((log(x+h)-log(x))/h,h,0)

>> M=limit((1-x/n)^n,n,inf)

L=1/x

M=exp(-x)

>> syms x>> L=limit(abs(x)/x,x,0,’left')>> R=limit(abs(x)/x,x,0,’right')

L=-1

M=1

h

xhxL

h

)ln()ln(lim

0

n

n n

xM

1lim

六大常见符号运算 因式分解、展开、合并、简化及通分等 计算极限 计算导数

diff(f): 计算 f 关于默认自变量的导数 diff(f,’v’): 计算 f 关于变量 v 的导数

diff(f,n),diff(f,’v’,n),diff(f,n,’v’): n次求导

例:设 y=sin(ax), 求:

>> syms a x

>> y=sin(a*x)

>> A=diff(y,x)

>> B=diff(y,a)

>> C=diff(y,x,2)

>> D=diff(y,a,2)

A=cos(a*x)*a

B=cos(a*x)*x

C=-sin(a*x)*a^2

D=-sin(a*x)*x^2

2

2

2

2

, , ,da

ydD

dx

ydC

da

dyB

dx

dyA

六大常见符号运算 因式分解、展开、合并、简化及通分等

计算极限

计算导数

计算积分

int(f,v,a,b):计算定积分

int(f,a,b): 计算 f 关于默认自变量 的定积分

int(f,v) :计算不定积分 int(f) :计算 f 关于默认自变量 的不定积分

b

advvf )(

dvvf )(

例:求积分

>> syms x>> f=(x^2+1)/(x^2-2*x+2)^2;>> I=int(f)>> g=cos(x)/(sin(x)+cos(x));>> J=int(g,x,0,pi/2)>> h=exp(-x^2);>> K=int(h,x,0,inf)

,

)22(

122

2

dxxx

xI

2/

0,

cossin

cosdx

xx

xJ dxeK x

0

2

I=3/2*atan(x-1)+1/4*(2*x-6)/(x^2-2*x+2)

J=1/4*pi

K=1/2*pi^(1/2)

六大常见符号运算 因式分解、展开、合并、简化及通分等 计算极限 计算导数 计算积分 符号求和

symsum(f,v,a,b): 求和 symsum(f,a,b): 关于默认自变量 求和。

b

av

vf )(

例:求级数 ,以及其前 10项的部分和。

>> syms n>> S=symsum(1/n^2,n,1,inf)>> S10=symsum(1/n^2,n,1,10)

S=1/6*pi^2

S10=1968329/1270080

1

2

1

n nS

例:求函数级数

1

2n n

xS

>> syms n x>> S=symsum(x/n^2,n,1,inf)

S=1/6*x*pi^2

六大常见符号运算 因式分解、展开、合并、简化及通分等 计算极限 计算导数 计算积分 符号求和 解代数方程和微分方程

其它运算 复合函数计算: compose

compose(f,g): 返回 f(g(y)),其中 f=f(x),g=g(y), x,y 分别是 f 和 g 的默认自变量。

compose(f,g,z): 返回 f(g(z)),其中 x,y 分别是 f,g 的默认自变量,最后用符号变量 z代替 y。

compose(f,g,v,z): 返回 f(g(z)),v为 f中指定的自变量,

令 v=g(z),代入 f=f(v)。 compose(f,g,v,w,z): 返回 f(g(z)),其中 v,w分别为 f,g 的指定自变量,即将 v=g(w)代入 f(v),最后用 z代替w。

例:>> syms x y z u t>> f=cos(x/t); y=sin(y/u);>> compose(f,g)>> compose(g,f)>> compose(f,g,z)>> compose(f,g,x,z)>> compose(f,g,t,z)>> compose(f,g,t,y,z)>> compose(f,g,t,u)>> compose(f,g,t,u,z)

sin(y/u)g ),/cos( txf

ans=cos(sin(y/u)/t)

ans=sin(cos(x/t)/u)

ans=cos(sin(z/u)/t)

ans=cos(x/sin(z/u))

ans=cos(x/sin(y/u))

ans=cos(x/sin(y/z))

其它运算 复合函数计算: compose 计算反函数: finverse

finverse(f): 返回 f关于默认自变量的反函数, 若 f的反函数 g存在,则有 g(f(x))=x。

finverse(f,v): 返回 f关于自变量 v的反函数 g, 即 g(f(v))=v。

例:

>> syms x t>> f=x^2+2*t;

>> finverse(f)>> finverse(f,y)

txf 22

ans=(-2*t+x)^(1/2)

ans=-1/2*x^2+1/2*t

Warning: finverse(x^2+2*t) is not unique

作业:1.化简 xxxf 2sincos)( exp(i*x)?

>> syms a b x X Y>> k=sym(’3’);>> z=sym('c*sqrt(delta)+y*sin(theta)');>> f=a*z*X+(b*x^2+k)*Y;

2. 试写出下面命令的结果 ,上机验证,并说明理由 :

>> findsym(f)>> findsym(f,1)>> findsym(f,2)

>> findsym(f,3)

3. 设 A是一个符号矩阵(定义如下),试指出 findsym(A,1) 的输出结果,并由此得出结论:findsym 确定自由变量时,是对整个矩阵进行的,还是对各个矩阵元素分别进行?

>>syms a b t u v x y;>>A=[a+b*x,sin(t)+u; x*exp(-t),log(y)+v];

4.(1) 设 ),2cos()( ,1

)(2

tyygu

xxf 求复合函数 f(g(z));

(2) 设 ),2cos()( ,1

)(2

tytgu

xuf 求复合函数 f(g(z))。思考:本题除了用 compose函数外,是否有其它方法?

5. 设 a、 b定义如下,试上机输出 factor(a)和 factor(b)的结果,并指出那个结果才是 12345678901234567890的因式分解,为什么?

>> a=sym(‘12345678901234567890’);

>> b=sym(12345678901234567890);

6.替换函数 subs的使用。 (1)试指出下面程序中的 f1、 f2、 f3、 f4、 f5的值。

syms a x;f=a*sin(x)+5;f1=subs(f,'sin(x)',sym('y'))f2=subs(f,{a,x},{2,sym(pi/3)}) f3=subs(f,{a,x},{2,pi/3})f4=subs(subs(f,a,2),x,0:pi/6:pi) f5=subs(f,{a,x},{0:6,0:pi/6:pi})

>> syms x y; f=2*x+y;>> subs(f,{x,y},{x+y,x-y})

(2)试指出下面替换的结果,并说明理由。