matlab 及程序设计 --matlab 与物理学

221
MATLAB 及及及及及 --MATLAB 及及及及 及及及及 及及及及及 及及及 2321169(661642) [email protected]

Upload: phil

Post on 13-Jan-2016

203 views

Category:

Documents


0 download

DESCRIPTION

MATLAB 及程序设计 --MATLAB 与物理学. 主讲教师 :顾菊观教授 理学院 2321169(661642) [email protected]. MATLAB 及程序设计 --MATLAB 与物理学 课程介绍. 定位:选修课 目标:了解 MATLAB ,能够熟练掌握在数学和物理学的应用,简单计算及编程,简单的数据处理及基本图形绘制. 教材: MATLAB 及其在理工课程中的应用指南 ( 陈怀琛 ) 特点:完全不必具备其它语言的基础,各年级各专业的同学都可选修。. MATLAB 课程安排. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: MATLAB 及程序设计 --MATLAB 与物理学

MATLAB及程序设计--MATLAB与物理学

MATLAB及程序设计--MATLAB与物理学

主讲教师:顾菊观教授 理学院

2321169(661642)

[email protected]

Page 2: MATLAB 及程序设计 --MATLAB 与物理学

MATLAB及程序设计--MATLAB与物理学

课程介绍定位:选修课目标:了解 MATLAB ,能够熟练掌握在数学和物理学的应用,简单计算及编程,简单的数据处理及基本图形绘制 .

Page 3: MATLAB 及程序设计 --MATLAB 与物理学

教材: MATLAB 及其在理工课程中的应用指南 (陈怀琛 )特点:完全不必具备其它语言的基础,各年级各专业的同学都可选修。

Page 4: MATLAB 及程序设计 --MATLAB 与物理学

MATLAB 课程安排教学学时 : 36 学时(基于 matlab7.1 版本 ).

教学安排:讲课 16 学时,上机 18 学时,考试 2 学时 .

考核要求:不得缺勤,实验报告必须交齐。平时占 20% ,专项练习 30% ,期末考查占50% 。

考核方式 : 考查

Page 5: MATLAB 及程序设计 --MATLAB 与物理学

第一章 MATLAB 语言概述

一、 MATLAB 语言的发展 matlab 语言是由美国的 Clever M

oler 博士于 1980 年开发的 , 美国 Mathworks 公司于是 984 年正式推出。

设计者的初衷是为解决“线性代数”课程的矩阵运算问题。

取名 MATLAB 即 Matrix Laboratory 矩阵实验室的意思。

Page 6: MATLAB 及程序设计 --MATLAB 与物理学

它将一个优秀软件的易用性与可靠性、通用性与专业性 、一般目的应用与高深的科学技术应用有机的相结合。MATLAB 是一种直译式的高级语

言,比其它程序设计语言容易。

Page 7: MATLAB 及程序设计 --MATLAB 与物理学

MATLAB 语言与其它语言的关系仿佛和 C 语言与汇编语言的关系一样。

计算机语言的发展:

数值运算 解析运算管理、可视化 智能化

标志着计算机语言向“智能化”方向发展,被称为第四代编程语言。

Page 8: MATLAB 及程序设计 --MATLAB 与物理学

MATLAB 已经不仅仅是一个“矩阵实验室”了,它集科学计算、图象处理、声音处理于一身,并提供了丰富的 Wi

ndows 图形界面设计方法。MATLAB 语言是功能强大的计算机高

级语言 , 它以超群的风格与性能风靡全世界 , 成功地应用于各工程学科的研究领域。

Page 9: MATLAB 及程序设计 --MATLAB 与物理学

MATLAB 在美国已经作为大学理工科学生必修的计算机语言之一 (C, FOR

TRAN, ASSEMBLER, MATLAB) 。近年来, MATLAB 语言已在我国推广

使用,现在已应用于各学科研究部门和许多高等院校。MATLAB 语言不受计算机硬件的影响,

286 以上的计算机都可以使用。

Page 10: MATLAB 及程序设计 --MATLAB 与物理学

二、 matlab 能在各领域做什么 工业研究与开发 数学教学,特别是线性代数 数值分析和科学计算方面的教学与研究 电子学、控制理论和物理学等工程和科学 学科方面的教学与研究 经济学、化学和生物学等计算问题的所有

其他领域中的教学与研究

Page 11: MATLAB 及程序设计 --MATLAB 与物理学

例、用一个简单命令求解线性系统 3x1+ x2 - x3 = 3.6

x1+2x2+4x3 = 2.1

-x1+4x2+5x3 = -1.4A=[3 1 -1;1 2 4;-1 4 5];b=[3.6;2.1;-1.4];x=A\bx = 1.4818 -0.4606 0.3848

对于线性系统有A*x=b

Page 12: MATLAB 及程序设计 --MATLAB 与物理学

0 1 2 3 4 5 6-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

例、用简短命令计算并绘制在 0x6 范围内的 sin(2x) 、 sinx2 、 sin2x 。x=linspace(0,6)

y1=sin(2*x),y2=sin(x.^2),y3=(sin(x)).^2;

plot(x,y1,x, y2,x, y3)

Page 13: MATLAB 及程序设计 --MATLAB 与物理学

三、 MATLAB 语言的特点•1 、起点高

•2 、人机界面适合科技人员•3 、强大而容易的作图功能

•4 、智能化程度高

•5 、功能丰富,可扩展性强

Page 14: MATLAB 及程序设计 --MATLAB 与物理学

四、 MATLAB 语言的功能:•1 、强大的数值(矩阵)运算功能•2 、广泛的符号运算功能•3 、高级与低级兼备的图形功能(计算结果的可视化功能)•4 、可靠的容错功能•5 、应用灵活的兼容与接口功能•6 、信息量丰富的联机检索功能

Page 15: MATLAB 及程序设计 --MATLAB 与物理学

五、 MATLAB 的工作环境

1 、命令窗

由工作空间: Workspace ,历史命令 Command History

当前目录 Current Directory 命令窗 Command Windows

命令窗是用户与 MATLAB 进行人机对话的主要环境。

Page 16: MATLAB 及程序设计 --MATLAB 与物理学

台式电脑:按 PrtSc 键

手提电脑:按住 fn 键 , 再按 prt sc 键

Page 17: MATLAB 及程序设计 --MATLAB 与物理学

>> pi

ans =

3.1416

>> format

>> pi

ans =

3.1416

>> format long

>> pi

ans =

3.14159265358979

>> format short e

>> pi

ans =

3.1416e+000

>> format long e

>> pi

ans =

3.141592653589793e+000

>> format hex

>> pi

ans =

400921fb54442d18

>> format bank

>> pi

ans =

3.14

>> format +

>> pi

ans =

+

Format 命令的应用:

Page 18: MATLAB 及程序设计 --MATLAB 与物理学

>> format rat

>> pi

ans =

355/113

>> format short

>> pi

ans =

3.1416

Page 19: MATLAB 及程序设计 --MATLAB 与物理学

Help 命令的应用:>> help format FORMAT Set output format. FORMAT with no inputs sets the output format to the default appropriate for the class of the variable. For float variables, the default is FORMAT SHORT. FORMAT does not affect how MATLAB computations are done. Computations on float variables, namely single or double, are done in appropriate floating point precision, no matter how those variables are displayed. Computations on integer variables are done natively in integer. Integer variables are always displayed to the appropriate number of digits for the class, for example, 3 digits to display the INT8 range -128:127. FORMAT SHORT and LONG do not affect the display of integer variables.

。。。。。。。。。

Page 20: MATLAB 及程序设计 --MATLAB 与物理学

退出 MATLAB :

1 、 file→Exit matlab

2 、在命令窗口中键入 exit 或 qu

it

3 、单击命令窗右上角 ×图形窗: >>logo

文本编辑窗: file→new→M-file

Page 21: MATLAB 及程序设计 --MATLAB 与物理学

六、演示程序

命令窗中键入: demo

可以通过演示程序,模仿编辑相关程序。

Page 22: MATLAB 及程序设计 --MATLAB 与物理学
Page 23: MATLAB 及程序设计 --MATLAB 与物理学

第二章 基本语法

• 2.1 变量及其赋值

• 2.2 矩阵的初等运算

• 2.3 元素群运算

• 2.4 逻辑判断与流程控制

• 2.5 基本绘图方法

• 2.6 M 文件及程序调试

Page 24: MATLAB 及程序设计 --MATLAB 与物理学

2.1 变量及其赋值

• ( 1 )标识符与数

• ( 2 )矩阵及其元素的赋值

• ( 3 )复数

• ( 4 )变量检查

• ( 5 )基本赋值矩阵

Page 25: MATLAB 及程序设计 --MATLAB 与物理学

一、标识符与数• 标识符:标识符是标志变量名、常量名、函数名和文件名的字符串的总称。

• MATLAB 中的标识符最长允许 19 个字符 ,合法字符是 52 个英文字母(大小写看成不同字符)、 10 个数字和下划线。

• 第一个字符必须是英文字母 .

Page 26: MATLAB 及程序设计 --MATLAB 与物理学

MATLAB 中的数

• MATLAB 中的实数只有一种数据格式,那就是双精度(即 64 位二进制或 8 个字节),它的有效值是十进制 16 位,动态范围是 10 的 ±3

08 次幂。 2.2251×10 –308~1.7977×10+308

数的存储和运算全按同一格式进行,使编程简单,减少差错,改善人机交互,付出代价是内存空间和运行速度,形成 MATLAB 的一大特色。

Page 27: MATLAB 及程序设计 --MATLAB 与物理学

数的八种显示格式

MATLAB 命令 显 示 形 式 说 明

format long 3.14159265358979 16 位十进制数

format short e 3.1416e+000 5 位十进 制 数加指数

format long e 3.14159265358979e+0 16 位十进制加指数

format hox 400921fb54442d18 16 位十六进制数

format bank 3.14 两位小数

format + + 正、负或零

format rat 355 / 113 有理数分数近似

format short ( 默认 )

3.1416 二位整数 , 四位小数

Page 28: MATLAB 及程序设计 --MATLAB 与物理学

二、矩阵及其元素的赋值

• 格式 1 :变量=表达式(或常量) • 格式 2 :表达式表达式中的运算符有:加 (+) 、减 (-) 、乘 (*) 、左除 (\) 、右除 (/) 、指数 (^) 、共軛转置 (‘) 、矩阵 ([]) 等。

表达式的结尾标点:若为分号‘;’,不显示;

若为逗号‘,’或直接回车,显示运算结果。

Page 29: MATLAB 及程序设计 --MATLAB 与物理学

矩阵的输入方法 :

(1) 直接输入>> A=[1 2 3 ;4 5 6 ;6 7 8]

A =

1 2 3

4 5 6

6 7 8

>> A=[1 2 3 ;4 5 6 ;6 7 8];

>> A=[1,2,3 ;4,5,6 ;6,7,8]

A =

1 2 3

4 5 6

6 7 8

>> A=[1 2 33 4 5 6 7 8]

A =

1 2 3 3 4 5 6 7 8

Page 30: MATLAB 及程序设计 --MATLAB 与物理学

( 2 )冒号表达式生成向量基本格式>> A=[1:5;6:10;11:15]

A =

1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

>> B=[1:0.1:2;5:0.1:6]

B =

1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000

1.7000 1.8000 1.9000 2.0000

5.0000 5.1000 5.2000 5.3000 5.4000 5.5000 5.6000

5.7000 5.8000 5.9000 6.0000

Page 31: MATLAB 及程序设计 --MATLAB 与物理学

( 3 )线性等分向量生成

y=linspace(x1,x2) 生成 100 维行向量 y=linspace(x1,x2,n) 生成 n 维行向量

>>a=linspace(1,100,6)

a =

1.0000 20.8000 40.6000 60.4000 80.2000 100.0000

( 4)对数等分向量生成 y=logspace(x1,x2) 生成 50维对数等分向量, y=logspace(x1,x2,n) 生成 n维对数等分向量

>>a=logspace(0,5,6)

a =

1 10 100 1000 10000 100000

Page 32: MATLAB 及程序设计 --MATLAB 与物理学

( 5 )随机数产生矩阵

rand(m,n) 产生 维 , 区间在 [0,1] 之间均匀分布的随机数 , 其均值为 0.5.

randn(m,n) 产生 维 , 均值为 0 标准差为 1 的正态分布 .

>> A=rand(1,6)A = 0.9501 0.2311 0.6068 0.4860 0.8913 0.7621>> B=rand(2,5)B = 0.4565 0.8214 0.6154 0.9218 0.1763 0.0185 0.4447 0.7919 0.7382 0.4057>> C=randn(3,6)C = -0.4326 0.2877 1.1892 0.1746 -0.5883 0.1139 -1.6656 -1.1465 -0.0376 -0.1867 2.1832 1.0668 0.1253 1.1909 0.3273 0.7258 -0.1364 0.0593

mn

行列 mn

Page 33: MATLAB 及程序设计 --MATLAB 与物理学

单位矩阵: eye(m,n); eye(m)

零 矩 阵: zeros(m,n); zeros(m)

一 矩 阵: ones(m,n); ones(m)

对角矩阵: 对角元素向量 V=[a1,a2,…,an] A=diag(V)

随机矩阵: rand(m,n) 产生一个 m×n 的均匀分别的随机 矩阵

( 6 )常用的特殊矩阵

如果已知 A 为方阵,则 V=diag(A) 可以提取 A 的对角元素构成向量 V 。

Page 34: MATLAB 及程序设计 --MATLAB 与物理学

》 eye(2,3)ans= 1 0 0 0 1 0》 zeros(2,3)ans= 0 0 0 0 0 0》 ones(2,3)ans= 1 1 1 1 1 1》 V=[5 7 2]; A=diag(V)A= 5 0 0 0 7 0 0 0 2

》 eye(2)ans= 1 0 0 1》 zeros(2)ans= 0 0 0 0》 ones(2)ans= 1 1 1 1

Page 35: MATLAB 及程序设计 --MATLAB 与物理学

compan 友矩阵函数 magic 魔方矩阵 hankel Hankel 矩阵 rosser 对称特征值测试

矩阵 hilb Hilbert 矩阵 pascal Pascal 矩阵 invhilb 反 Hilbert 矩阵 vander 范德蒙矩阵 … …

( 7 )其他特殊矩阵

Page 36: MATLAB 及程序设计 --MATLAB 与物理学

• 零矩阵 : 所有元素值为零的矩阵称为零矩阵。零矩阵可以用zeros 函数实现。 zeros 是 MATLAB 内部函数,使用格式如下:

zeros(m) :产生 m*m 阶零矩阵; zeros(m,n) :产生 m*n 阶零矩阵,当 m=n 时等同 于 zeros

(m) ; zeros(size(A)) :产生与矩阵 A 同样大小的零矩阵。

( 8 )特殊矩阵的实现• 常见的特殊矩阵有零矩阵、幺矩阵、单位矩阵、三角

形矩阵等,这类特殊矩阵在线性代数中具有通用性;还有一类特殊矩阵在专门学科中有用,如有名的希尔伯特 (Hilbert) 矩阵、范德蒙 (Vandermonde) 矩阵等。

Page 37: MATLAB 及程序设计 --MATLAB 与物理学

• 空矩阵在 MATLAB 里,把行数、列数为零的矩阵定义为空矩阵。

空矩阵在数学意义上讲是空的,但在 MATLAB 里确是很有用的。例如

A=[0.1 0.2 0.3;0.4 0.5 0.6]; B=find(A>1.0) B = [ ]这里 [ ] 是空矩阵的符号, B=find(A>1.0) 表示列出矩阵 A

中值大于 1.0 的元素的序号。当不能满足括号中的条件时,返回空矩阵。另外,也可以将空矩阵赋给一个变量,如:

B=[ ]

Page 38: MATLAB 及程序设计 --MATLAB 与物理学

三、复数• 虚数符号 MATLAB 启动时定为 i,j ,可以不

用乘号,连写在数字后面。• 如果用户在程序中另外給 i,j 赋值,则它们的虚数意义就失效。

• conj(x) 表示共軛,即把 x 的虚部反号。• ‘ 是共軛转置运算符,对实矩阵把行号与列号交换,对复矩阵除行列交换外,还要把矩阵元素取共軛。

Page 39: MATLAB 及程序设计 --MATLAB 与物理学

>> A=3+5.5i

A =

3.0000 + 5.5000i

>> B=5+0.332j

B =

5.0000 + 0.3320i

>> C=[1+2i,3+4i;5+6i,7+8i]

C =

1.0000 + 2.0000i 3.0000 + 4.0000i 5.0000 + 6.0000i 7.0000 + 8.0000i

>> D=[1,2;5 7]+[2 4;6 8]*i

D =

1.0000 + 2.0000i 2.0000 + 4.0000i 5.0000 + 6.0000i 7.0000 + 8.0000i

>> F=sqrt(2+3i)

F =

1.6741 + 0.8960i

>> F*F

ans =

2.0000 + 3.0000i

Page 40: MATLAB 及程序设计 --MATLAB 与物理学

四、变量检查

•变量检查命令 who , whos

•打开工作空间视窗

• 在检查中不显示内部变量

eps , realmax , realmin , pi

i , j , inf , NaN

Page 41: MATLAB 及程序设计 --MATLAB 与物理学

>> x=-2*pi:0.02:2*pi;>> y=sin(x).*cos(x)+sin(3*x).*cos(x).^2;>> plot(x,y)>> who

Your variables are:

x y

>> whos Name Size Bytes Class

x 1x629 5032 double array y 1x629 5032 double array

Grand total is 1258 elements using 10064 bytes

Page 42: MATLAB 及程序设计 --MATLAB 与物理学

-8 -6 -4 -2 0 2 4 6 8-1.5

-1

-0.5

0

0.5

1

1.5

Page 43: MATLAB 及程序设计 --MATLAB 与物理学

五、特殊矩阵赋值函数(表 2-1 )zeros(n,m) 全零矩阵( n×m 阶)

ones(n,m) 全么矩阵( n×m 阶)

rand(n,m) 随机数矩阵( n×m 阶)

randn (n,m) 正态随机数矩阵( n×m 阶)

eye(n) 单位矩阵( n×n 方阵)

linspace(xs,xf,N) 均分向量( 1×N 阶数组)

Page 44: MATLAB 及程序设计 --MATLAB 与物理学

矩阵组合与显示

• 大矩阵可由若干个小矩阵组成,但必须其行列数正确,恰好填满全部元素。

• 一个矩阵中所有元素用同一显示格式。有一个是小数则都用小数;

• 当矩阵中的最大元素小于 0.001 ,或其最小元素大于 1000 时, MATLAB 会把其公因子提出来 。

• 元素大小差别很大时,不宜用矩阵显示。

Page 45: MATLAB 及程序设计 --MATLAB 与物理学

2.2 矩阵的初等运算

• ( 1 )矩阵数值的表示方法(前面已讲);

• ( 2 )矩阵的加减乘法;

• ( 3 )矩阵的除法和线性方程解;

• ( 4 )矩阵的乘方和超越函数;

Page 46: MATLAB 及程序设计 --MATLAB 与物理学

一、矩阵的加减法• 两矩阵进行加减的条件是其行数和列数相同,

简称阶次相同,矩阵的加减即其对应元素的加减。

size(A)=size(B)

如果其中一个变量是标量,则会自动扩展成各元素均取此标量值的同阶次矩阵。

Page 47: MATLAB 及程序设计 --MATLAB 与物理学

>> A=rand(2,3)

A =

0.9355 0.4103 0.0579

0.9169 0.8936 0.3529

>> B=rand(5,6)

B =

0.8132 0.6038 0.4451 0.5252 0.6813 0.4289

0.0099 0.2722 0.9318 0.2026 0.3795 0.3046

0.1389 0.1988 0.4660 0.6721 0.8318 0.1897

0.2028 0.0153 0.4186 0.8381 0.5028 0.1934

0.1987 0.7468 0.8462 0.0196 0.7095 0.6822

>> size(A)

ans =

2 3

>> size(B)

ans =

5 6

>> A=[1 2;3 4]

A =

1 2

3 4

>> B=[5 6 ;7 8]

B =

5 6

7 8

>> C=A+B

C =

6 8

10 12

>> D=A-B

D =

-4 -4

-4 -4

Page 48: MATLAB 及程序设计 --MATLAB 与物理学

二、矩阵的乘法

c(i,j)=a(i,1)*b(1,j) + a(i,2)*b(2,j) + … + a(i,p)*b(p,j) = ∑pa(i,k)*b(k,j)

(1,1) (1, )(1,1) (1, ) (1, )

(1,1) (1, )(2, )

( , ) ( ,1) ( , 2) ( , ) *

( ,1) ( , )( ,1) ( , ) ( , )

( ,1) ( , )

a a pb b j b m

c c mb j

c i j a i a i a i p

c n c n mb p b p j b p m

a n a n p

Page 49: MATLAB 及程序设计 --MATLAB 与物理学

矩阵的乘法• 两矩阵相乘 C=A*B 的条件是 A 的列数等于

B 的行数,简称内阶数相同。设矩阵 A 为 n

×p 阶,矩阵 B 为 p×m 阶,则 C 是 n×m

阶。内阶数不同的矩阵不能相乘。• 不符合交换律: A*B≠B*A ,左乘不等于右

乘;• 若一个变量是标量,则按标量乘法。

Page 50: MATLAB 及程序设计 --MATLAB 与物理学

>> A=[1 2;3 4]A = 1 2 3 4>> B=[5 6 ;7 8]B = 5 6 7 8>> C=A*BC = 19 22 43 50>> D=B*AD = 23 34 31 46

>> A=[1 2;3 4;5 6]%3 行 2 列A = 1 2 3 4 5 6>> B=[1 2 3 4;5 6 7 8]%2 行 4 列B = 1 2 3 4 5 6 7 8>> C=A*B %3 行 4 列C = 11 14 17 20 23 30 37 44 35 46 57 6>> CC=B*A % 矩阵的内阶数不同不能相乘??? Error using ==> mtimesInner matrix dimensions must agree.

Page 51: MATLAB 及程序设计 --MATLAB 与物理学

三、矩阵‘除法’

线性方程组 D*X=B ,如果 D 非奇异,即它的逆矩阵 inv(D) 存在;

则其解用 MATLAB 表为 :

X=inv(D)*B=D\B

符号‘ \’ 称为左除,即分母放在左边。

左除的条件: B 的行数等于 D 的阶数 (D 的行数和列数相同,简称阶数)

Page 52: MATLAB 及程序设计 --MATLAB 与物理学

>> D=[1 2 3;4 5 6;7 8 9]D = 1 2 3 4 5 6 7 8 9>> B=[1 2;3 4;5 6]B = 1 2 3 4 5 6>> D\Bans = -0.1410 -0.4671 1.2821 0.9342 -0.4744 0.1996

Page 53: MATLAB 及程序设计 --MATLAB 与物理学

四、矩阵右除若方程组表为为 X*D1=B1 , D1 非奇异,即它的逆

阵 inv(D1) 存在。则其解为X=B1*inv(D1)=B1/D1符号‘ /’ 称为右除。右除的条件: B1 的列数等于 D 的阶数 (D 的行数和

列数相同,简称阶数)

Page 54: MATLAB 及程序设计 --MATLAB 与物理学

>> D=[1 2 3;4 5 6;7 8 9]D = 1 2 3 4 5 6 7 8 9>> B=[1 2 3;4 5 6]B = 1 2 3 4 5 6>> D/Bans = 1.0000 0.0000 -0.0000 1.0000 -1.0000 2.0000

Page 55: MATLAB 及程序设计 --MATLAB 与物理学

五、线性方程组表为矩阵相乘 x1 + 2 x2 + 3 x3 = 2

3 x1- 5 x2 + 4 x3 = 0

7 x1 + 8 x2 + 9 x3 = 2可以表为

故有 X=[x1;x2;x3]=A\b

1

2

3

1 2 3 2

* 3 5 4 0

7 8 9 2

x

A X x b

x

>> A=[1 2 3;3 -5

4;7 8 9];

>> b=[2;0;-2];

>> x=A\b

x =

-1.9608

-0.0784

1.3725

Page 56: MATLAB 及程序设计 --MATLAB 与物理学

六、用矩阵除法解线性方程组

解方程组 6 x1 + 3 x2 + 4 x3 = 3

-2 x1 + 5 x2 + 7 x3 = -4

8 x1 - 4 x2 - 3 x3 = -7

的程序为: A = [6,3,4; -2,5,7; 8,-4,-3];

B = [3;-4;-7];

X = A\B

X =

0.6000 7.0000 -5.4000

Page 57: MATLAB 及程序设计 --MATLAB 与物理学

七、矩阵整体的幂次运算

• MATLAB 的乘幂函数” ^” 、指数函数 exp

m 、对数函数 logm 、和开方函数 sqrtm 是对矩阵进行的,另外,还有矩阵乘法和除法也是把矩阵作为一个整体来运算。

• 除此之外,其他 MATLAB 函数都是对矩阵中的元素分别进行 .

Page 58: MATLAB 及程序设计 --MATLAB 与物理学

>> C=[1,2;3 4]

C =

1 2

3 4

>> C^2

ans =

7 10

15 22

>> expm(C)

ans =

51.9690 74.7366

112.1048 164.0738\

>> logm(C)

ns =

-0.3504 + 2.3911i 0.9294 - 1.0938i

1.3940 - 1.6406i 1.0436 + 0.7505i

>> sqrtm(C)

ans =

0.5537 + 0.4644i 0.8070 - 0.2124i

1.2104 - 0.3186i 1.7641 + 0.1458i

>>C.^2

ans =

1 4

9 16

>> exp(C)

ans =

2.7183 7.3891

20.0855 54.5982

>> log(C)

ans =

0 0.6931

1.0986 1.3863

>> sqrt(C)

ans =

1.0000 1.4142

1.7321 2.0000

Page 59: MATLAB 及程序设计 --MATLAB 与物理学

2.3 元素群运算

• 数组及其赋值• 元素群的四则运算• 元素群的幂次运算• 元素群的函数

元素群运算能大大简化编程,提高运算的效率,是 MATLAB 优于其他许多语言的一个特色。

Page 60: MATLAB 及程序设计 --MATLAB 与物理学

MATLAB 的矩阵和数组运算 矩阵和数组是 MATLAB 中的基本单位

矩阵运算

数组运算

+ 加 - 减 * 乘 ^ 幂 \ 左除 / 右除 ’转置

.+ 加 .- 减 .* 乘 .^ 幂 .\ 左除 ./ 右除 .’转置

以矩阵运算法则进行运算

以相应位置元素进行运算

Page 61: MATLAB 及程序设计 --MATLAB 与物理学

一、数组及其赋值• 数组通常是指单行或单列的矩阵,也称为向量。• 其赋值方法:

– ( 1 ) x=[ 初值:增量:终值 ]

– ( 2 ) 线性分割函数 x=linspace (起点 , 终点 , 点数)

– ( 3 ) 对数分割函数logspace( 起点对数 , 终点对数 , 点数 )

Page 62: MATLAB 及程序设计 --MATLAB 与物理学

二、元素群的四则和幂次运算

• 元素群运算:就是把两矩阵按逐个元素进行运算。为了与矩阵作为整体的运算符号相区别,要在运算符“ * 、/、\、 ^” 前加一点符号“.” 。

元素群运算的英文原文是‘数组运算’ (Array Algorithm), 实际上它适用于任何阶的矩阵,故取名‘元素群运算’更为确切。

Page 63: MATLAB 及程序设计 --MATLAB 与物理学

三、元素群的函数运算

• 所有的 MATLAB 函数都适用于作元素群运算,只有专门说明的几个除外。就是 * 、 / 、 \ 、 ^ 运算符和 sqrtm 、 expm 、logm 三个函数。

• 实例,做一个三角函数表:x=[0:0.1:pi/4]';

[x,sin(x),cos(x),tan(x)]

Page 64: MATLAB 及程序设计 --MATLAB 与物理学

x=[0:0.1:pi/4]';

disp(' x sin(x) cos(x)

tan(x)')

[x,sin(x),cos(x),tan(x)]

x sin(x) cos(x) tan(x)

ans =

0 0 1.0000 0

0.1000 0.0998 0.9950 0.1003

0.2000 0.1987 0.9801 0.2027

0.3000 0.2955 0.9553 0.3093

0.4000 0.3894 0.9211 0.4228

0.5000 0.4794 0.8776 0.5463

0.6000 0.5646 0.8253 0.6841

0.7000 0.6442 0.7648 0.8423

>> disp([x,sin(x),cos(x),tan(x)]) 0 0 1.0000 0 0.1000 0.0998 0.9950 0.1003 0.2000 0.1987 0.9801 0.2027 0.3000 0.2955 0.9553 0.3093 0.4000 0.3894 0.9211 0.4228 0.5000 0.4794 0.8776 0.5463 0.6000 0.5646 0.8253 0.6841 0.7000 0.6442 0.7648 0.8423

>> disp([x sin(x) cos(x) tan(x)]) 0 0 1.0000 0 0.1000 0.0998 0.9950 0.1003 0.2000 0.1987 0.9801 0.2027 0.3000 0.2955 0.9553 0.3093 0.4000 0.3894 0.9211 0.4228 0.5000 0.4794 0.8776 0.5463 0.6000 0.5646 0.8253 0.6841 0.7000 0.6442 0.7648 0.8423

Page 65: MATLAB 及程序设计 --MATLAB 与物理学

关系与逻辑运算 关系运算符

逻辑运算符

< > <= >= == ~=

& 与 | 或 ~ 非 xor异或 函数

all (x) 检查列向量中元素是否全为非零

any(x) 检查列向量中有无非零元素

2.4 逻辑判断及流程控制

小于 大于 小于等于 大于等于 等于 不等于

Page 66: MATLAB 及程序设计 --MATLAB 与物理学

关系运算例子:>> A=2+3==4

A =

0

>> A=2+3==5

A =

1

>> A=2+3>=5

A =

1

>> A=2+3~=9

A =

1

逻辑运算例子:>> A=1;>> B=0;>> A&Bans = 0>> A|Bans = 1>> ~Aans = 0>> xor(A,B)ans = 1

Page 67: MATLAB 及程序设计 --MATLAB 与物理学

>> A=[1 1 0;1 1 1;0 0 0;0 1 0]

A =

1 1 0 1 1 1 0 0 0 0 1 0

>> all(A)

ans =

0 0 0

>> any(A)

ans =

1 1 1

Page 68: MATLAB 及程序设计 --MATLAB 与物理学

流程控制语句

if A1 % 表达式 1

B1 % 命令 1

elseif A2 % 表达式 2

B2 % 命令 2

else

B3 % 命令 3

end

If 语句

Page 69: MATLAB 及程序设计 --MATLAB 与物理学

表达式

A语句组

if

end

表达式

A语句组

else假真

B语句组

if

end

1表达式

A语句组

elseif假

B语句组

if

end

else假

C语句组

2表达式

)10( 113

)101( 12

)1(

xx

xx

xx

y例:计算下列函数的值

Page 70: MATLAB 及程序设计 --MATLAB 与物理学

expif.m

clear %清除变量

x=input(‘请输入一个值 x=’) % 任意输入一个值

if x<1 %判断条件 1 是否满足

y=x, % 满足条件 1 的结果

elseif x>=1&x<10 %判断条件 2 是否满足

y=2*x-1, % 满足条件 2 的结果

else % 其他情况 , 即条件 3

y=3*x-11, % 满足条件 3 的结果

end % 程序结束

请输入一个值 x=-9

x =

-9

y =

-9

Page 71: MATLAB 及程序设计 --MATLAB 与物理学

保存文件 yx.m

function y=yx(x);

if x<1

y=x,

elseif x>1&x<10

y=2*x-1,

else

y=3*x-11,

end

主窗口中输入 :>> yx(5)

y =

9

ans =

9

>> yx(8);

y =

15

Page 72: MATLAB 及程序设计 --MATLAB 与物理学

switch 语句

switch a % 读入一个语句

case A1 % 情形 1

B1 % 命令 1

case A2 % 情形 2

B2 % 命令 2

case …

otherwise

Bn % 最后一个命令

Page 73: MATLAB 及程序设计 --MATLAB 与物理学

判断输入数 n 的奇、偶、空的程序:clear%switchm.m

n=input('n=');

switch mod(n,2)

case 1

A=‘奇 '

case 0

A=‘偶 '

otherwise

A=‘ 空 '

end

n=13

A =

n=46

A =

n=45.6

A =

Page 74: MATLAB 及程序设计 --MATLAB 与物理学

try 语句组 1catch 语句组 2end

trytry 语句语句

trytry 语句先试探性执行语句组语句先试探性执行语句组 11 ,如果语句组,如果语句组 11 在执行在执行

过程中出现错误,则将错误信息赋给保留的过程中出现错误,则将错误信息赋给保留的 lasterrlasterr 变量,变量,

并转去执行语句组并转去执行语句组 22 。。

Page 75: MATLAB 及程序设计 --MATLAB 与物理学

循环结构 for 语句

for 变量 = 表达式

命令 1

命令 2

end

while 语句

for 用于循环次数已知

while 表达式

命令

end

while 用于循环次数未知

break 语句用来跳出循环 , 继续执行循环语句的下一语句。continue 语句跳过循环体中所有剩下的语句,继续下一次循环。

Page 76: MATLAB 及程序设计 --MATLAB 与物理学

计算阶乘的程序 (prdn.m):

clear

prd=1; %放置乘积的变量 ,且设置初值为1

n=10; % 设置循环的次数for k=1:n %循环语句prd=prd*k; % 计算阶乘end

prd % 输出结果

主窗口输出结果 :prd =

3628800

也可用 factorial(n) 来计算:>> factorial(10)

ans =

3628800

Page 77: MATLAB 及程序设计 --MATLAB 与物理学

求和的程序 ( 一 ): 求 1到 20 的阶乘和clear%sumn.m

sum=0;

for i=1:20

prd=1;

for k=1:i

prd=prd*k;

end

sum=sum+prd;

end

Sum

主窗口输出结果 :sum =

2.5613e+018

求和的程序 ( 二 ): 求 1到 100 的和clear%sumw.m

sum=0;

i=1;

while i<=100

sum=sum+i;

i=i+1;

end

sum

主窗口输出结果 :sum =

5050

Page 78: MATLAB 及程序设计 --MATLAB 与物理学

例:小猴吃桃问题。设第 k天的桃子数为 ,则桃子数的变化规律为:

12

11 kk pp

kp

给定 k, ,可算出第一天的桃子数。

kp

p(10)=1;

for k=10:-1:2;

p(k-1)=2*(p(k)+1);

end

p(1)

ans =1534

例:小猴吃桃问题。设第 k天的桃子数为 ,则桃子数的变化规律为:

12

11 kk pp

kp

给定 k, ,可算出第一天的桃子数。

kp

p(10)=1;

for k=10:-1:2;

p(k-1)=2*(p(k)+1);

end

p(1)

ans =1534

Page 79: MATLAB 及程序设计 --MATLAB 与物理学

例 -- 平面简谐波:

x=-0.25:0.001:0.25;% 设定 x 的取值范围

for i=0:2% 用循环语句令 i 分别取 0,1,2

t=0.0025*i;

y=0.002*cos(pi*5*x-200*pi*t);% 此为时刻 t 的波函数

if i==0;% 用选择语句分别用不同的颜色线型画不同时刻的波形图

plot(x,y,'k-')% 用黑色实线画 t=0 时刻的波形图

hold on%保存图形的命令,否则后一幅图会覆盖前一幅

grid on% 绘制网格

elseif i==1; plot(x,y,'r--')% 用红色虚线画 t=0.0025 时刻的波形图

elseif i==2; plot(x,y,'b-.')% 用蓝色虚点线画 t=0.005 时刻的波形图

end% 结束 if 语句

end% 结束 for 语句

Page 80: MATLAB 及程序设计 --MATLAB 与物理学
Page 81: MATLAB 及程序设计 --MATLAB 与物理学

2.5 基本绘图方法

• 直角坐标中的两维曲线• 多条曲线的绘制• 其他坐标二维绘图• 屏幕控制• 三维曲线和曲面

Page 82: MATLAB 及程序设计 --MATLAB 与物理学

一、直角坐标中的两维曲线(一) plot —— 最基本的二维图形指令• plot 命令的基本格式

– plot(Y) = plot(n,Y)

– plot(t,Y)

– plot(t,Y,’:w’)

最后一个变元前一个符号为线型(点型)后一个字母表示颜色

Page 83: MATLAB 及程序设计 --MATLAB 与物理学

线型、点型和颜色表 2 - 11 线型、点型和颜色标志符 颜色 标志符 线型和点型y 黄 . 点m 品红 o 圆圈c 青 x x 号r 红 + + 号g 绿 - 实线b 兰 * 星号w 白 : 虚线k 黑 -. 点划线 -- 长划线

Page 84: MATLAB 及程序设计 --MATLAB 与物理学

1. 单窗口单曲线绘图例 1 : x=[0, 0.48,0.84,1,0.91,0.6,0.14]

[ x1, x2, x3, x4, x5, x6, x7,]

plot (x)

Page 85: MATLAB 及程序设计 --MATLAB 与物理学

-10 -8 -6 -4 -2 0 2 4 6 8 10-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

例如 :>> x=-10:0.01:10;>>y=sin(3*x)+cos(5*x);>> plot(x,y,'-r')

Page 86: MATLAB 及程序设计 --MATLAB 与物理学

-10 -8 -6 -4 -2 0 2 4 6 8 10-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

x

y

>> x=-10:0.01:10;

>> y=sin(3*x)+cos(5*x);

>> plot(x,y,'-r','linewidth',2)

>> xlabel('x')

>> ylabel('y')

Page 87: MATLAB 及程序设计 --MATLAB 与物理学

-10 -5 0 5 10

-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

x

y

>> x=-10:0.01:10;

>> y=sin(3*x)+cos(5*x);

>> plot(x,y,'-r','linewidth',2)

>>xlabel('\fontsize{14}x'),ylabel('\

fontsize{14}y')

在图片窗口中双击坐标 , 可改变坐标字体的大小 .

Page 88: MATLAB 及程序设计 --MATLAB 与物理学

0 1 2 3 4 5 6 7-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

2. 单窗口多曲线绘图例 2 : t=0:pi/100:2*pi;

y=sin(t);y1=sin(t+0.25);y2=sin(t+0.5);

plot(t,y,t,y1,t,y2)

Page 89: MATLAB 及程序设计 --MATLAB 与物理学

例 3 : t=0:pi/100:2*pi;y=sin(t);y1=sin(t+0.25);y2=sin(t+0.5);y3=cos(t);y4=cos(t+0.25);y5=cos(t+0.5);plot(t,y,t,y1,t,y2,t,y3,t,y4,t,y5)

0 1 2 3 4 5 6 7-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Page 90: MATLAB 及程序设计 --MATLAB 与物理学

例 4:(1)x=peaks;plot(x)(2)x=1:length(peaks);y=peaks;plot(x,y)图形是一样的 .

0 5 10 15 20 25 30 35 40 45 50-8

-6

-4

-2

0

2

4

6

8

10

Page 91: MATLAB 及程序设计 --MATLAB 与物理学

3. 单窗口多曲线分图绘图

subplot —— 子图分割命令

调用格式:

subplot(m,n,p) —— 按从左至右,

从上至下排列

行 列 绘图序号

Page 92: MATLAB 及程序设计 --MATLAB 与物理学

t=0:pi/100:2*pi;

y=sin(t);

y2=sin(t+0.5);

y3=cos(t);

subplot(1,3,1);

plot(t,y)

subplot(1,3,2);

plot(t,y3)

subplot(1,3,3);

plot(t,y2)

Page 93: MATLAB 及程序设计 --MATLAB 与物理学
Page 94: MATLAB 及程序设计 --MATLAB 与物理学

t=0:pi/100:2*pi;

y=sin(t);

y2=sin(t+0.5);

y3=cos(t);

subplot(3,1,1);

plot(t,y)

subplot(3,1,2);

plot(t,y3)

subplot(3,1,3);

plot(t,y2)

Page 95: MATLAB 及程序设计 --MATLAB 与物理学

t=0:pi/100:2*pi;

y=sin(t);

y2=sin(t+0.5);

y3=cos(t);

subplot(2,2,1);

plot(t,y)

Subplot(2,2,2);

plot(t,y3)

subplot(2,1,2);

plot(t,y2)

Page 96: MATLAB 及程序设计 --MATLAB 与物理学

4. 多窗口绘图 figure(n) —— 创建窗口函数, n 为

窗 口顺序号。t=0:pi/100:2*pi;y=sin(t);y1=sin(t+0.25);y2=sin(t+0.5);plot(t,y) % 自动出现第一个窗口figure(2)plot(t,y1) % 在第二窗口绘图figure(3)plot(t,y2) % 在第三窗口绘图

Page 97: MATLAB 及程序设计 --MATLAB 与物理学

图 1 图 2 图 3

Page 98: MATLAB 及程序设计 --MATLAB 与物理学

5. 可任意设置颜色与线型例 5 : t=0:pi/100:2*pi;

y=sin(t);y1=sin(t+0.25);y2=sin(t+0.5);

plot(t,y,'r-',t,y1,'g:',t,y2,'b*')

Page 99: MATLAB 及程序设计 --MATLAB 与物理学

6. 图形加注功能将标题、坐标轴标记、网格线及文字注释加注到图形上,这些函数为: title —— 给图形加标题 xlable —— 给 x轴加标注 ylable —— 给 y轴加标注 text —— 在图形指定位置加标注 gtext —— 将标注加到图形任意位置 grid on(off) —— 打开、关闭坐标网格

线 legend —— 添加图例 axis —— 控制坐标轴的刻度

Page 100: MATLAB 及程序设计 --MATLAB 与物理学

例: t=0:0.1:10y1=sin(t);y2=cos(t);plot(t,y1,'r',t,y2,'b--');x=[1.7*pi;1.6*pi];y=[-0.3;0.8];s=['sin(t)';'cos(t)'];text(x,y,s);title(' 正弦和余弦曲线 ');legend(' 正弦 ','余弦 ')xlabel(' 时间 t'),ylabel(' 正弦、余弦 ')grid

axis square

Page 101: MATLAB 及程序设计 --MATLAB 与物理学
Page 102: MATLAB 及程序设计 --MATLAB 与物理学

axis 的用法还有: axis([xmin xmax ymin ymax]) —— 用行向量中 给出的值设定坐标轴的最大和最小值。 如 axis ([-2 2 0 5])

axis(equal) —— 将两坐标轴设为相等 axis on(off) —— 显示和关闭坐标轴的标 记、标志 axis auto —— 将坐标轴设置返回自动缺 省值

Page 103: MATLAB 及程序设计 --MATLAB 与物理学

7.fplot —— 绘制函数图函数

fplot 的调用格式 :

fplot(fun,lims) — 绘制函数 fun 在 x 区间 lims=[xmin xmax] 的函数图。

fplot(fun,lims,'corline') — 以指定线形绘图。[x,y]=fplot(fun,lims) — 只返回绘图点的值 ,

而不绘图。用 plot(x,y) 来绘图。

Page 104: MATLAB 及程序设计 --MATLAB 与物理学

例 6:fplot(‘[sin(x),tan(x),cos(x)]’,2*pi*[-1 1 -1 1])例 7:fplot('humps',[0 1],'rp')

-6 -4 -2 0 2 4 6

-6

-4

-2

0

2

4

6

Page 105: MATLAB 及程序设计 --MATLAB 与物理学

8.ezplot —— 符号函数的简易绘图函数

ezplot 的调用格式:ezplot(f) — 这里 f 为包含单个符号变量 x 的符号表达式,在 x轴的默认范围

[-2*pi 2*pi] 内绘制 f(x) 的函数图ezplot(f,xmin,xmax) — 给定区间ezplot(f,[xmin,xmax],figure(n)) — 指定绘图窗口

绘图。

Page 106: MATLAB 及程序设计 --MATLAB 与物理学

例 9:ezplot(‘sin(x)’)例 10:ezplot('sin(x)','cos(y)',[-4*pi 4*pi],figure(2))

-6 -4 -2 0 2 4 6

-1

-0.5

0

0.5

1

x

sin(x)

-1 -0.5 0 0.5 1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

x

y

x = sin(x), y = cos(y)

Page 107: MATLAB 及程序设计 --MATLAB 与物理学

(二) fill –––– 基本二维绘图函数 fill 的功能:• 绘制二维多边形并填充颜色例 11 : x=[1 2 3 4 5];y=[4 1 5 1 4];

fill(x,y,'r')

Page 108: MATLAB 及程序设计 --MATLAB 与物理学

(三)特殊二维绘图函数

bar –––– 绘制直方图 polar –––– 绘制极坐标图 hist –––– 绘制统计直方图 stairs –––– 绘制阶梯图 stem –––– 绘制火柴杆图 rose –––– 绘制统计扇形图 comet –––– 绘制彗星曲线

Page 109: MATLAB 及程序设计 --MATLAB 与物理学

errorbar –––– 绘制误差棒图 compass –––– 复数向量图 (罗盘图 )

feather –––– 复数向量投影图 (羽毛图 )

quiver –––– 向量场图 area –––– 区域图 pie –––– 饼图 convhull –––– 凸壳图 scatter –––– 离散点图

Page 110: MATLAB 及程序设计 --MATLAB 与物理学

例 12 :绘制阶梯曲线x=0:pi/20:2*pi;y=sin(x);stairs(x,y)

0 1 2 3 4 5 6 7-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Page 111: MATLAB 及程序设计 --MATLAB 与物理学

例 13 :阶梯绘图h2=[1 1;1 -1];h4=[h2 h2;h2 -h2];h8=[h4 h4;h4 -h4];t=1:8;subplot(8,1,1);stairs(t,h8(1,:));axis('off')subplot(8,1,2);stairs(t,h8(2,:));axis('off')subplot(8,1,3);stairs(t,h8(3,:));axis('off')subplot(8,1,4);stairs(t,h8(4,:));axis('off')subplot(8,1,5);stairs(t,h8(5,:));axis('off')subplot(8,1,6);stairs(t,h8(6,:));axis('off')subplot(8,1,7);stairs(t,h8(7,:));axis('off')subplot(8,1,8);stairs(t,h8(8,:));axis('off')h2=[1 1;1 -1];h4=[h2 h2;h2 -h2];h8=[h4 h4;h4 -h4];t=1:8;for i=1:8subplot(8,1,i);stairs(t,h8(i,:))axis('off')end

Page 112: MATLAB 及程序设计 --MATLAB 与物理学
Page 113: MATLAB 及程序设计 --MATLAB 与物理学

例 14 :绘制极坐标绘图t=0:2*pi/90:2*pi;y=cos(4*t);polar(t,y)

0.2

0.4

0.6

0.8

1

30

210

60

240

90

270

120

300

150

330

180 0

Page 114: MATLAB 及程序设计 --MATLAB 与物理学

例 15 :绘制火柴杆绘图 t=0:0.2:2*pi; y=cos(t); stem(y)

0 5 10 15 20 25 30 35-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Page 115: MATLAB 及程序设计 --MATLAB 与物理学

例 16 :绘制直方图 t=0:0.2:2*pi; y=cos(t); bar(y)

0 5 10 15 20 25 30 35-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Page 116: MATLAB 及程序设计 --MATLAB 与物理学

例 17 :绘制彗星曲线图 t= -pi:pi/500:pi;

y=tan(sin(t))-sin(tan(t)); comet(t,y)

-3 -2 -1 0 1 2 3-2.5

-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

2.5

Page 117: MATLAB 及程序设计 --MATLAB 与物理学

区域图,例 18:x=magic(6);area(x)

1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 60

20

40

60

80

100

120

Page 118: MATLAB 及程序设计 --MATLAB 与物理学

饼图,例 19:x = [1 3 0.5 2.5 2];y = [0 1 0 0 0];pie(x,y)

Page 119: MATLAB 及程序设计 --MATLAB 与物理学

饼图,例 20:x = [1 3 0.5 2.5 2];y = [0 1 0 0 0];pie3(x,y)

Page 120: MATLAB 及程序设计 --MATLAB 与物理学

pie([2 4 3 5],{'North','South','East','West'})

Page 121: MATLAB 及程序设计 --MATLAB 与物理学

先输入 :load seamount 再输入 :scatter(x,y,5,z)

210.8 210.9 211 211.1 211.2 211.3 211.4 211.5 211.6 211.7 211.8-48.45

-48.4

-48.35

-48.3

-48.25

-48.2

-48.15

-48.1

-48.05

-48

-47.95

Page 122: MATLAB 及程序设计 --MATLAB 与物理学

[x,y,z] = sphere(16);

X = [x(:)*.5 x(:)*.75 x(:)];

Y = [y(:)*.5 y(:)*.75 y(:)];

Z = [z(:)*.5 z(:)*.75 z(:)];

S = repmat([1 .75 .5]*10,numel(x),1);

C = repmat([1 2 3],numel(x),1);

scatter3(X(:),Y(:),Z(:),S(:),C(:),'filled'), view(-60,60)

Page 123: MATLAB 及程序设计 --MATLAB 与物理学

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

a=rand(200,1);b=rand(200,1);c=rand(200,1);scatter(a,b,100,c,'p')

Page 124: MATLAB 及程序设计 --MATLAB 与物理学

二、三维绘图三维绘图的主要功能:• 绘制三维线图• 绘制等高线图• 绘制伪彩色图• 绘制三维网线图• 绘制三维曲面图、柱面图和球面图• 绘制三维多面体并填充颜色

Page 125: MATLAB 及程序设计 --MATLAB 与物理学

(一)三维线图

• plot3 —— 基本的三维图形指令

调用格式:

plot3(x,y,z) —— x,y,z 是长度相同的向量

plot3(X,Y,Z) —— X,Y,Z 是维数相同的矩阵

plot3(x,y,z,s) —— 带开关量

plot3(x1,y1,z1,'s1', x2,y2,z2,'s2', …)

Page 126: MATLAB 及程序设计 --MATLAB 与物理学

• 二维图形的所有基本特性对三维图形全都适用。定义三维坐标轴

• 大小

axis([xmin xmax ymin ymax zmin zmax ])

• grid on(off) 绘制三维网格

• text(x,y,z,‘string’) 三维图形标注

• 子图和多窗口也可以用到三维图形中

Page 127: MATLAB 及程序设计 --MATLAB 与物理学

例 21 :绘制三维线图t=0:pi/50:10*pi;plot3(t,sin(t),cos(t),'r:')

010

2030

40

-1-0.5

00.5

1-1

-0.5

0

0.5

1

Page 128: MATLAB 及程序设计 --MATLAB 与物理学

( 二 ) 三维饼图pie3([4 3 6 8 9])

27%

30%

20%

13%

10%

Page 129: MATLAB 及程序设计 --MATLAB 与物理学

(三)三维多边形

• fill3 = fill —— 三维多边形的绘制和填色与二维多边形完全相同

• 调用格式: fill3(x,y,z,‘s’) —— 与二维相同

Page 130: MATLAB 及程序设计 --MATLAB 与物理学

例 22 : 用随机顶点坐标画出 5 个粉色的三角形,并用黄色的○表示顶点

y1=rand(3,5);y2=rand(3,5);y3=rand(3,5);

fill3(y1,y2,y3,'m');hold on;plot3(y1,y2,y3,'yo')

Page 131: MATLAB 及程序设计 --MATLAB 与物理学

(四)三维网格图

• mesh —— 三维网线绘图函数• 调用格式: mesh(z) —— z 为 n×m 的矩阵, x 与 y

坐标为元素的下标 mesh(x,y,z) —— x,,y,z 分别为三维空 间的坐标位置

Page 132: MATLAB 及程序设计 --MATLAB 与物理学

例23,矩阵的三维网线图z=rand(6); 0.8808 0.0729 0.4168 0.7694 0.3775 0.4776

0.3381 0.7101 0.0964 0.6352 0.3826 0.7086 0.1895 0.8791 0.6747 0.8965 0.6876 0.2380 0.7431 0.3594 0.5626 0.8784 0.1217 0.3910 0.7189 0.0899 0.8130 0.4865 0.0768 0.9759 0.8792 0.1610 0.8782 0.1131 0.1433 0.6288

z=round(z) 1 0 0 1 0 0 0 1 0 1 0 1 0 1 1 1 1 0 1 0 1 1 0 0 1 0 1 0 0 1 1 0 1 0 0 1

mesh(z);

Page 133: MATLAB 及程序设计 --MATLAB 与物理学

mesh(z)

02

46

0

2

4

60

0.2

0.4

0.6

0.8

1

Page 134: MATLAB 及程序设计 --MATLAB 与物理学

例 24 : 8 阶 hadamard 矩阵的网线图

h2=[1 1;1 -1];h4=[h2 h2;h2 -h2]

h8=[h4 h4;h4 -h4] 1 1 1 1 1 1 1 1 1 -1 1 -1 1 -1 1 -1 1 1 -1 -1 1 1 -1 -1 1 -1 -1 1 1 -1 -1 1 1 1 1 1 -1 -1 -1 -1 1 -1 1 -1 -1 1 -1 1 1 1 -1 -1 -1 -1 1 1 1 -1 -1 1 -1 1 1 -1

mesh(h8)

Page 135: MATLAB 及程序设计 --MATLAB 与物理学

02

46

8

02

46

8-1

-0.5

0

0.5

1

Page 136: MATLAB 及程序设计 --MATLAB 与物理学

三维网线图作图要领

• 生成坐标 —— [X,Y]=meshgrid(x,y)

• 表达式点运算 —— Z=X.^2+Y.^2

X , Y 是 n×m 的矩阵,维数可任定X— n

Y— m

Z—

默认方位角: 37 。 5º ,俯角 30º 。n×m 维

Page 137: MATLAB 及程序设计 --MATLAB 与物理学

meshgrid—— 网线坐标值计算函数 z=f(x,y) — 根据 x,y坐标找出 z 的高度例:绘制 z=x2+y2 的三维网线图形 x=-5:5; y=x;

[X,Y]=meshgrid(x,y)

Z=X.^2+Y.^2;

mesh(X,Y,Z)

坐标矩阵 坐标向量

纵坐标矩阵绘图函数

Page 138: MATLAB 及程序设计 --MATLAB 与物理学

-5

0

5

-5

0

50

10

20

30

40

50

Page 139: MATLAB 及程序设计 --MATLAB 与物理学

• colormap( [R,G,B])—— 色图设定函数

• matlab 的颜色数据集合为红、绿、兰三颜色矩阵 [R , G , B] ,维数 m×3

• r,g,b 在 [0 1] 区间连续取值,理论上颜色种类可达无穷多种

• matlab 使用三维向量表示一种颜色,常用颜色数据见下表

Page 140: MATLAB 及程序设计 --MATLAB 与物理学

饱和色 [0 0 0] — 黑色 [0 0 1] — 兰色 [0 1 0] — 绿色 [0 1 1] — 浅兰 [1 0 0] — 红色 [1 0 1] — 粉红 [1 1 0] — 黄色 [1 1 1] — 白色

调和色

[0.5 0.5 05] — 灰色

[0.5 0 0] — 暗红色

[1 0.62 0.4] — 铜色

[0.49 1 0.8] — 浅绿

[0.49 1 0.83] —宝石兰

Page 141: MATLAB 及程序设计 --MATLAB 与物理学

(五)三维曲面图

• surf —— 三维曲面绘图函数,与网格图 看起来一样与三维网线图的区别:网线图:线条有颜色,空挡是黑色的(无颜色)曲面图:线条是黑色的,空挡有颜色(把线条之间的空挡填充颜色,沿 z轴按每一网

格变化

Page 142: MATLAB 及程序设计 --MATLAB 与物理学

• 调用格式: surf(x,y,z) —— 绘制三维曲面图, x,y,z

为图形坐标向量例 25 :[X,Y,Z]=peaks(30)%peaks 为 matlab自动生成的三维测

试图形surf(X,Y,Z)

-20

2

-2

0

2

-5

0

5

xy

Peaks

Page 143: MATLAB 及程序设计 --MATLAB 与物理学

-4-2

02

4

-4-2

02

4-10

-5

0

5

10

surfc(X,Y,Z) — 带等高线的曲面图 [X,Y,Z]=peaks(30);surfc(X,Y,Z)

Page 144: MATLAB 及程序设计 --MATLAB 与物理学

-4

-20

24

-4-2

02

4-10

-5

0

5

10

surfl(X,Y,Z) —— 被光照射带阴影 的曲面图[X,Y,Z]=peaks(30);surfl(X,Y,Z)

Page 145: MATLAB 及程序设计 --MATLAB 与物理学

cylinde(r,n) — 三维柱面绘图函数

r 为半径; n 为柱面圆周等分数例 26 :绘制三维陀螺锥面t1=0:0.1:0.9;

t2=1:0.1:2;

r=[t1 -t2+2];

[x,y,z]=cylinder(r,30);

surf(x,y,z);

grid-1

-0.50

0.51

-1-0.5

00.5

10

0.2

0.4

0.6

0.8

1

Page 146: MATLAB 及程序设计 --MATLAB 与物理学

-1

-0.50

0.51

-1-0.5

00.5

1-1

-0.5

0

0.5

1

为球面等分数,缺省为 20

例 27 :绘制三维球面[x,y,z]=sphere(30);surf(x,y,z);

Page 147: MATLAB 及程序设计 --MATLAB 与物理学

(六) 图形修饰方法

图形颜色的修饰• matlab 有极好的颜色表现功能,其颜色

数据又构成了一维新的数据集合,也可称为四维图形

• colormap(MAP) —— 色图设定函数, M

AP 为 m×3 维色图矩阵• 图形颜色可根据需要任意生成,也可用

matlab配备的色图函数

Page 148: MATLAB 及程序设计 --MATLAB 与物理学

matlab 的色图函数: hsv —— 饱和值色图 gray —— 线性灰度色图 hot —— 暖色色图 cool —— 冷色色图 bone —— 兰色调灰色图 copper —— 铜色色图 pink —— 粉红色图 prism —— 光谱色图 jet ——饱和值色图 II

flag —— 红、白、蓝交替色图

Page 149: MATLAB 及程序设计 --MATLAB 与物理学

[X,Y,Z]=peaks(30)%peaks 为 matlab自动生成的三维测试图形

surf(X,Y,Z)shading faceted % 网格修饰,缺省方式

Page 150: MATLAB 及程序设计 --MATLAB 与物理学

• shading flat —— 去掉黑色线条,根据小方块的值确定颜色

Page 151: MATLAB 及程序设计 --MATLAB 与物理学

• shading interp —— 颜色整体改变,根据小方块四角的值差补过度点的值确定颜色

Page 152: MATLAB 及程序设计 --MATLAB 与物理学

peaks(30);shading interp;colormap(hot)

Page 153: MATLAB 及程序设计 --MATLAB 与物理学

[X,Y,Z]=peaks(30);surfl(X,Y,Z)shading interp;colormap(cool);axis off

Page 154: MATLAB 及程序设计 --MATLAB 与物理学

peaks(30);colormap(hot);colorbar('horiz')

Page 155: MATLAB 及程序设计 --MATLAB 与物理学

图形效果修饰

• 透视与消隐—— 用于网线图• 裁剪修饰 ——用于网线图、曲面图• 视角修饰 —— 观察不同角度的三维视图• 其它修饰: a. 水线修饰 b. 等高线修饰

Page 156: MATLAB 及程序设计 --MATLAB 与物理学

• 透视与消隐p=peaks(30);mesh(p) ;hidden on

Page 157: MATLAB 及程序设计 --MATLAB 与物理学

p=peaks(30);mesh(p);hidden off

Page 158: MATLAB 及程序设计 --MATLAB 与物理学

0

2040

60

0

20

40

60-10

-5

0

5

10

• 裁减修饰p=peaks;p(30:40,20:30)=nan*p(30:40,20:30);surf(p)

Page 159: MATLAB 及程序设计 --MATLAB 与物理学

p=peaks;

p(30:40,20:30)=nan*p(30:40,20:30);

mesh(peaks,p)

Page 160: MATLAB 及程序设计 --MATLAB 与物理学

• 视角修饰 ( 函数 view(az,el))

az ---- 方位角; el ---- 俯视角 省缺值为: az=-37.5; el=30

例。观察不同视角的波峰图形

z=peaks(40);

subplot(2,2,1);mesh(z);

subplot(2,2,2);mesh(z);view(-15,60);

subplot(2,2,3);mesh(z);view(-90,0);

subplot(2,2,4);mesh(z);view(-7,-10);

Page 161: MATLAB 及程序设计 --MATLAB 与物理学

020

40

020

40-10

0

10

az=-37.5,el=30

020

400

20

40-10

0

10

az=-15,el=60

02040-10

-5

0

5

10az=-90,el=0

0 20 40

020

40-10

0

10

az=-7,el=-10

Page 162: MATLAB 及程序设计 --MATLAB 与物理学

010

2030

0

10

20

30-10

-5

0

5

10

• 其它修饰: a. 水线修饰( waterfall)

waterfall(peaks(30))

Page 163: MATLAB 及程序设计 --MATLAB 与物理学

b. 等高线修饰• 二维contour(Z,n)-------- 绘制 n 条等高线C= contourc(Z,n)------ 计算 n 条等高线的坐标

Clable(c)------ 给等高线加标注例、在二维平面上绘制 peaks 函数的 10

条等高线

Page 164: MATLAB 及程序设计 --MATLAB 与物理学

contour(peaks,10);

Page 165: MATLAB 及程序设计 --MATLAB 与物理学

contour(peaks,10);

C=contourc(peaks,10);

clabel(C)

Page 166: MATLAB 及程序设计 --MATLAB 与物理学

contour3(peaks,20)

Page 167: MATLAB 及程序设计 --MATLAB 与物理学

(七)、伪彩色图• pcolor —— 常用于以二维平面图表现三维图形的效果,用颜色表示三维图形的高度。

z=peaks(30)

pcolor(z)

Page 168: MATLAB 及程序设计 --MATLAB 与物理学

(八)动画效果

• 动画生成的步骤

1. 创建帧矩阵 ————— moviein

2. 对动画中的每一帧生成图形,并把它们放到帧矩阵中 ———— getframe

3. 从帧矩阵中回放动画

Page 169: MATLAB 及程序设计 --MATLAB 与物理学

• moviein 函数• 函数 m=moviein(n) 用来建立一个足够大的

n 列的矩阵 m ,用来保存 n幅画面的数据,以备播放。

• movie 函数• movie(m,n) 以每秒 n幅图形的速度播放由

矩阵 m 的列向量所组成的画面。

Page 170: MATLAB 及程序设计 --MATLAB 与物理学

• 【例 28】 播放一个不断变化的眼球程序段。• m=moviein(20); % 建立一个 20 个列向量组成的矩阵

• for j=1:20• plot(fft(eye(j+10))) % 绘制出每一幅眼球图并保存到 m 矩阵

• m(:,j)=getframe;• end• movie(m,5);% 以每秒 5幅的速度播放画面

Page 171: MATLAB 及程序设计 --MATLAB 与物理学
Page 172: MATLAB 及程序设计 --MATLAB 与物理学

•再如下述程序段播放一个直径不断变化的球体。•n=30;•[x,y,z]=sphere;•m=moviein(n);•for j=1:n• surf(j*x,j*y,j*z)• m(:,j)=getframe;•end•movie(m,5);

Page 173: MATLAB 及程序设计 --MATLAB 与物理学
Page 174: MATLAB 及程序设计 --MATLAB 与物理学

(九)、低层图形屏幕控制功能 P46 页

Page 175: MATLAB 及程序设计 --MATLAB 与物理学

2.6 M 文件及程序调试• 一、 m 文件1 、 m 文件模式将 matlab 语句构成的程序存储成以 m 为扩展名

的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。

程序文件不能在指令窗口下建立,因为指令窗口只允许一次执行一行上的一个或几个语句。

Page 176: MATLAB 及程序设计 --MATLAB 与物理学

2 、 m 文件的创建和保存• m 文件的类型是普通的文本文件,我们可以使

用系统认可的文本文件编辑器来建立m 文件。如 dos 下的 edit , windows 的记事本和 word 等。

• 具体的创建方法:( 1 )在 matlab 命令窗 口点击 file 菜单 new m-file

Page 177: MATLAB 及程序设计 --MATLAB 与物理学
Page 178: MATLAB 及程序设计 --MATLAB 与物理学

( 2 )点击 file — Save Workspace As将工作空间中的内容存入文件。( 3 ) matlab 命令窗口中输入 !edit ——

用 dos 下 edit 编辑器编制 m 文件( 4 ) matlab 命令窗口中输入 edit —— 用

matlab自带的编辑器编制 m 文件。( 5 ) word —— 用 word 编辑 m 文件。

Page 179: MATLAB 及程序设计 --MATLAB 与物理学

M 文件的保存方法:

1 、文件名长度不要超过八个字符。

2 、不允许有汉字。

3 、首字必须是字母。

4 、不能出现特殊字符等。

5 、保存在自己确定的子目录中。

Page 180: MATLAB 及程序设计 --MATLAB 与物理学

3 、 matlab 文件的类型( 1 )数据文件 .mat

• mat 文件是 matlab 以标准二进制格式保存的数据文件,可将工作空间中有用的数据变量保存下来。

• mat 文件的生成和调用是由函数 save 和 load完成的。

例如: load gatlin

image(X)

Page 181: MATLAB 及程序设计 --MATLAB 与物理学
Page 182: MATLAB 及程序设计 --MATLAB 与物理学

colormap(gray);axis equal; axis('off')

Page 183: MATLAB 及程序设计 --MATLAB 与物理学

4. m 文件 m 文件的语法类似于 c 语言,但又有其自身

特点。它只是一个简单的 ASCII码文本文件,执行程序时逐行解释运行程序, matlab 是解释性的编程语言。

m 文件有两类独立的 m 文件 — 称命令文件 可调用 m 文件 — 称函数文件(1). 命令文件 — 简单的 m 文件 命令文件实际上是一串指令的集合,与在命

令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。

Page 184: MATLAB 及程序设计 --MATLAB 与物理学

• 命令文件包括两部分:注释文件和程序文件平面简谐波:%plane.m

clear

x=-0.25:0.001:0.25;% 设定 x 的取值范围for i=0:2% 用循环语句令 i 分别取 0,1,2

t=0.0025*i;

y=0.002*cos(pi*5*x-200*pi*t);% 此为时刻 t 的波函数if i==0;% 用选择语句分别用不同的颜色线型画不同时刻的波形图plot(x,y,'k-')% 用黑色实线画 t=0 时刻的波形图hold on%保存图形的命令,否则后一幅图会覆盖前一幅grid on% 绘制网格elseif i==1; plot(x,y,'r--')% 用红色虚线画 t=0.0025 时刻的波形图elseif i==2; plot(x,y,'b-.')% 用蓝色虚点线画 t=0.005 时刻的波形图 end% 结束 if 语句end% 结束 for 语句

Page 185: MATLAB 及程序设计 --MATLAB 与物理学

命令窗口中输入: plane ,就得到平面波图形

Page 186: MATLAB 及程序设计 --MATLAB 与物理学

(2).matlab 内置函数文件 matlab自定义的函数文件称内置函数文件 调用内置函数的方法:使用函数名并给出相

应的入口、出口参数即可。 例如: sin.m 函数——用 type sin 查不到。 调用格式: y=sin(2*x)

实际应用中: x=0:2*pi/180:2*pi;

y=sin(2*x)

plot(x,y)0 1 2 3 4 5 6 7

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Page 187: MATLAB 及程序设计 --MATLAB 与物理学

又如 sqrt(x) —— 求 x 的平方根 abs(x)—— 求 x 的绝对值 det(a)—— 求行列式的值 等等。 matlab拥有大量的内置数学函数,供我们在

数值运算和符号运算中调用。

(3). 函数 m 文件— 需要输入变量,返回输出变量

• matlab 用户可以根据需要编辑自己的 m 文件,它们可以像库函数一样方便的调用,从而极大地扩展了matlab 的能力。

Page 188: MATLAB 及程序设计 --MATLAB 与物理学

• 对于某一类特殊问题,如创建了许多m 函数文件,则可形成新的工具箱。

• 这种用 matlab 语言创建定义新的 matlab 函数的功能,正体现了 matlab 语言强大的扩展功能。

Page 189: MATLAB 及程序设计 --MATLAB 与物理学

函数 m 文件的格式: function 返回变量 = 函数名(输入变量) 注释说明语句段 程序语句段特定规则:函数 m 文件第一行必须以单词 function 作为引导词,必须遵循如下形式:

function < 因变量 >=< 函数名 >(<自变量 >)

m 文件的文件名必须是 < 函数名 > .m 。程序中的变量均为局部变量,不保存在工作空间

中。 其变量只在函数运行期间有效。

Page 190: MATLAB 及程序设计 --MATLAB 与物理学

(4). 函数句柄 函数句柄是 matlab6 以上特有的语言结构,其

优点:• 方便地实现函数间互相调用• 兼容函数加载的所有方式• 拓宽子函数包括局部函数的使用范围• 提高函数调用的可靠性• 减少程序设计中的冗余• 提高重复执行的效率• 数组、结构数组、细胞型数组结合定义数据

Page 191: MATLAB 及程序设计 --MATLAB 与物理学

函数句柄的创建和显示 定义函数句柄的定义只需在提示符 @ 后添加相应函数的函数名

f_h=@plot得: f_h = @plot 函数句柄的内容通过 functions 显示 functions(f_h)得: ans = function: 'plot' type: 'overloaded' file: 'MATLAB built-in function'

Page 192: MATLAB 及程序设计 --MATLAB 与物理学

matlab 的函数类型

simple —— 未加载的内部函数、 m 文件

overloaded —— 加载的内部函数、 m 文件

subfunction —— 子函数

constructor —— matlab 类的创建函数

private —— 局部函数

Page 193: MATLAB 及程序设计 --MATLAB 与物理学

函数句柄的调用和操作可通过函数 feval 进行函数句柄的调用 feval( 函数句柄): f_h1=@peaks

feval(f_h1)% 得 peaks 函数,并作图 feval( 函数句柄,参数列表): f_h=@plot

feval(f_h,0:10,0:10)% 作二维图形

Page 194: MATLAB 及程序设计 --MATLAB 与物理学

得: f_h1 =

@peaks

z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...

- 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...

- 1/3*exp(-(x+1).^2 - y.^2)

Page 195: MATLAB 及程序设计 --MATLAB 与物理学
Page 196: MATLAB 及程序设计 --MATLAB 与物理学

函数句柄与函数名字符串转换 func2str —— 函数名字符串转换函数句柄 funh=str2func('det')

funh =

@det

str2func —— 函数句柄转换函数名字符串 func2str(funh)

ans =

det

Page 197: MATLAB 及程序设计 --MATLAB 与物理学

四、 matlab 的程序结构 matlab 语言的程序结构与其它高级语言是一致的,

分为顺序结构,循环结构,分支结构。(1).顺序结构 —— 依次顺序执行程序的各条语句(2).循环结构 —— 被重复执行的一组语句,循环是计

算机解决问题的主要手段。 循环语句主要有: for — end

Page 198: MATLAB 及程序设计 --MATLAB 与物理学

语法为: for i = 表达式 (表达式为一个向量) 可执行语句 end

例:利用 for循环求 1! +2! +3! + +5!的值 sum=0; for i=1:5 pdr=1; for k=1:i pdr=pdr*k; end sum=sum+pdr; end

sum =

153

Page 199: MATLAB 及程序设计 --MATLAB 与物理学

例:小猴吃桃问题。设第 k天的桃子数为 ,则桃子数的变化规律为:

12

11 kk pp

kp

给定 k, ,可算出第一天的桃子数。

kp

p(10)=1;

for k=10:-1:2;

p(k-1)=2*(p(k)+1);

end

p(1)

ans =1534

例:小猴吃桃问题。设第 k天的桃子数为 ,则桃子数的变化规律为:

12

11 kk pp

kp

给定 k, ,可算出第一天的桃子数。

kp

p(10)=1;

for k=10:-1:2;

p(k-1)=2*(p(k)+1);

end

p(1)

ans =1534

Page 200: MATLAB 及程序设计 --MATLAB 与物理学

while — end 循环 while循环将循环体中的语句循环执行不定次数。

语法为: while 表达式 循环体语句 end

表达式一般是由逻辑运算和关系运算以及一般运算组成的,以判断循环的进行和停止;只要表达式的值 非 0 ,继续循环;直到表达式值为 0 ,循环停止。

Page 201: MATLAB 及程序设计 --MATLAB 与物理学

例:用 while循环求 1~100 间整数的和 sum=0; i=1; while i<=100 sum=sum+i; i=i+1; end sum sum = 5050

Page 202: MATLAB 及程序设计 --MATLAB 与物理学

例;求阶乘 !ns

n=10;

s=1;

i=1;

while(i<n)

i=i+1;

s=s*i;

end

s

s =

3628800

Page 203: MATLAB 及程序设计 --MATLAB 与物理学

(3). 分支结构——根据一定条件来执行的各条语 句。 if — else — end 语句有 3 种形式 if 表达式 执行语句 end

if 表达式 ——— 是 语句 1

else ———— 否 语句 2

end

Page 204: MATLAB 及程序设计 --MATLAB 与物理学

if 表达式 1 ——— 多分支 语句 1

elseif 表达式 2

语句 2

elseif 表达式 3

语句 3 · · ·

else

语句 n

end

这种结构实现了一种多路选择,比较复杂。可替代一般高级语言中的switch-case-end 语句

Page 205: MATLAB 及程序设计 --MATLAB 与物理学

平面简谐波:

x=-0.25:0.001:0.25;% 设定 x 的取值范围

for i=0:2% 用循环语句令 i 分别取 0,1,2

t=0.0025*i;

y=0.002*cos(pi*5*x-200*pi*t);% 此为时刻 t 的波函数

if i==0;% 用选择语句分别用不同的颜色线型画不同时刻的波形图

plot(x,y,'k-')% 用黑色实线画 t=0 时刻的波形图

hold on%保存图形的命令,否则后一幅图会覆盖前一幅

grid on% 绘制网格

elseif i==1; plot(x,y,'r--')% 用红色虚线画 t=0.0025 时刻的波形图

elseif i==2; plot(x,y,'b-.')% 用蓝色虚点线画 t=0.005 时刻的波形图

end% 结束 if 语句

end% 结束 for 语句

Page 206: MATLAB 及程序设计 --MATLAB 与物理学
Page 207: MATLAB 及程序设计 --MATLAB 与物理学

• 在条件表达式中,通常都是由 关系操作符 >, < ,<=, >=, = =, ~= 等 逻辑操作符 & , | , ~ 等 逻辑函数: isequal —— 若是相等则为真 isempty —— 若是空矩阵则为真 isstr —— 若是字符串则为真

Page 208: MATLAB 及程序设计 --MATLAB 与物理学

五、 matlab 程序流的控制 matlab 的控制语句同 c 语言有相似之处 , 但没

有 c 语言复杂、灵活和多变。因而语法比较简单,容易掌握。

• echo 指令— 用来控制 m 文件在执行过程中是否

显示 echo on — 打开所有命令文件的显示方式 echo off — 关闭所有命令文件的显示方式 echo — 在以上两者间切换

Page 209: MATLAB 及程序设计 --MATLAB 与物理学

• echo 对于命令文件和函数文件有所不同,命令文件用法简单,函数对所有命令起作用;函数文件用法较复杂,具体请 help 查询。

echo file on — 打开 file函数文件的显示方式

echo file off — 关闭 file函数文件的显示方式

echo file — 切换 file函数文件的显示方式

echo on all — 打开所有函数文件的显示方式

echo off all —关闭所有函数文件的显示方式

Page 210: MATLAB 及程序设计 --MATLAB 与物理学

• input —— 提示用户从键盘输入数值、字符串、表达式。

例: n=input('How many apples= ')How many apples= 5n = 5• pause —— 暂停,等待用户响应 可令 m 文件执行暂停,并在继续执行前按任一个键 。

Page 211: MATLAB 及程序设计 --MATLAB 与物理学

• keyboard —— 与 input 类似,功能更强

keyboard 调用键盘与调用 m 文件一样,当 keybo

ard 在 m 文件中出现时,它停止文件的执行,并在

命令窗口出现 K>> ,把程序的执行和输入权交给用

户(键盘),用于修改程序。如要继续运行,只需

在命令窗口中输入 return 即可。

• break —— 中断

break 中断 for, while循环语句的执行,在嵌套循

环结构中, break从最里层循环推出。

Page 212: MATLAB 及程序设计 --MATLAB 与物理学

menu —— 产生一个用户可选择输入的菜单 格式: k=menu( ‘ 标题’,‘菜单 1’ ,‘菜单 2’ … )K = menu('Choose a color','Red','Blue','Green')

Ctrl C--- 强行停止程序执行的命令。在发现程序运行有错或运行时间太长时,可用此方法中途终止。

uicontrol图形界面控制调用格式 :

h=uicontrol('property',value)

property/value 确定控制类型。h = uicontrol('Style', 'pushbutton', 'String', 'Clear',...

'Position', [20 150 100 70], 'Callback', 'cla');

Page 213: MATLAB 及程序设计 --MATLAB 与物理学

uimenu创建用户界面菜单调用格式 :

h=uimenu('property',value)

property/value 确定菜单形式。

f = uimenu('Label','Workspace');

uimenu(f,'Label','New Figure','Callback','figure');

uimenu(f,'Label','Save','Callback','save');

uimenu(f,'Label','Quit','Callback','exit',...

'Separator','on','Accelerator','Q');

Page 214: MATLAB 及程序设计 --MATLAB 与物理学

六、内联函数和匿名函数

内联函数 ---inline 函数,可以免去M 文件。用于较简单的函数。

fun=inline(‘ 函数内容’ ,自变量列表 )

例:23),( xyxyxf

>> fun=inline('x^3+x*y^2','x','y')

fun =

Inline function:

fun(x,y) = x^3+x*y^2

Page 215: MATLAB 及程序设计 --MATLAB 与物理学

匿名函数的格式: fun=@ (自变量列表)函数内容。例:>> fun=@(x,y)'x.^3+x*y.^2'

fun =

@(x,y)'x.^3+x*y.^2'

>> fun=@(x,y)x.^3+x*y.^2

fun =

@(x,y)x.^3+x*y.^2

>> fun=@(x,y,a,b)a*x.^3+b*x*y.^2

fun =

@(x,y,a,b)a*x.^3+b*x*y.^2

Page 216: MATLAB 及程序设计 --MATLAB 与物理学

第三章 MATLAB 的开发环境和工具

一、 MATLAB 与其他软件的接口关系

1 、变量的存储和下载:

见 P : 53 通用命令函数库

2 、工作日志的记录: P53

3 、日期和时间: P : 54 表

Page 217: MATLAB 及程序设计 --MATLAB 与物理学

二、与文字处理系统 WINWORD 的关系

1 、利用剪贴板进行交互

通常选 [Metafile](矢量模式 ) ,建议在 MATLAB 中先把图形比例取到大体合适,避免到WORD 中做大幅度的缩放调整。

2 、 M 文件编辑器

三、图形文件的保存

可选择多种保存。

Page 218: MATLAB 及程序设计 --MATLAB 与物理学

四、低层输入 / 输出函数库

1. 打开和关闭文件( fopen, fclose)

格式: fid=fopen(‘ 数据文件’,‘ r’)

‘r’ —— 读 ‘w’ —— 写 ‘a’ —— 附加 ‘rt’ —— 读写

Page 219: MATLAB 及程序设计 --MATLAB 与物理学

• 文件一旦打开,即可进行读写操作。 sta=fclose(fid) —— 关闭上述打开文件 sta=fclose(all) —— 关闭所有打开的文件• 与 save,load 类似,是 matlab 专用数据文件读写工具( *.mat) 。

2. 读写二进制数据文件 fread, fwrite —— 可读写数据文件,文本文件。例: fid=fopen(‘user.dat’,’r’)

a=fread(fid,50)

sta=fclose(fid)

Page 220: MATLAB 及程序设计 --MATLAB 与物理学

五、应用程序接口 应用程序接口——是 matlaab 的附加组件。是一个由相关函数组成的接口函数库,可实现与外部程序的交互。• MEX 文件:是 matlab 环境下调用 C 、 FORTRAN

语言编写的应用程序模块。• matlab 计算引擎:在使用 C 、 FORTRAN 编程时 可调用 matlab 函数库进行计算。• MAT 文件:实现 matlab 与 C 、 FORTRAN 语言程序间的

数据交换

Page 221: MATLAB 及程序设计 --MATLAB 与物理学

第四章 MATLAB 的其他函数库4-1 数据分析和傅里叶变换函数库

4-2 矩阵的分解与变换函数库

4-3 多项式函数库

4-4 函数功能和数值分析函数库

4-5 字符串函数库

4-6 符号数学函数库

4-7 系统仿真函数库

这一章属函数库,请同学自己学习,以后用到时返回来看就可以。