2.21k likes | 2.5k Views
MATLAB 及程序设计 --MATLAB 与物理学. 主讲教师 :顾菊观教授 理学院 2321169(661642) gjg@hutc.zj.cn. MATLAB 及程序设计 --MATLAB 与物理学 课程介绍. 定位:选修课 目标:了解 MATLAB ,能够熟练掌握在数学和物理学的应用,简单计算及编程,简单的数据处理及基本图形绘制. 教材: MATLAB 及其在理工课程中的应用指南 ( 陈怀琛 ) 特点:完全不必具备其它语言的基础,各年级各专业的同学都可选修。. MATLAB 课程安排.
E N D
MATLAB及程序设计--MATLAB与物理学 主讲教师:顾菊观教授 理学院 2321169(661642) gjg@hutc.zj.cn
MATLAB及程序设计--MATLAB与物理学课程介绍 • 定位:选修课 • 目标:了解MATLAB,能够熟练掌握在数学和物理学的应用,简单计算及编程,简单的数据处理及基本图形绘制.
教材:MATLAB及其在理工课程中的应用指南(陈怀琛)教材:MATLAB及其在理工课程中的应用指南(陈怀琛) • 特点:完全不必具备其它语言的基础,各年级各专业的同学都可选修。
MATLAB课程安排 • 教学学时: 36学时(基于matlab7.1版本). • 教学安排:讲课16学时,上机18学时,考试2学时. • 考核要求:不得缺勤,实验报告必须交齐。平时占20%,专项练习30%,期末考查占50%。 • 考核方式: 考查
第一章 MATLAB语言概述 一、MATLAB语言的发展 matlab语言是由美国的Clever Moler博士于1980年开发的,美国Mathworks公司于是984年正式推出。 设计者的初衷是为解决“线性代数”课程的矩阵运算问题。 取名MATLAB即Matrix Laboratory 矩阵实验室的意思。
它将一个优秀软件的易用性与可靠性、通用性与专业性 、一般目的应用与高深的科学技术应用有机的相结合。 • MATLAB是一种直译式的高级语言,比其它程序设计语言容易。
管理、可视化 智能化 数值运算 解析运算 • MATLAB语言与其它语言的关系仿佛和C语言与汇编语言的关系一样。 计算机语言的发展: 标志着计算机语言向“智能化”方向发展,被称为第四代编程语言。
MATLAB已经不仅仅是一个“矩阵实验室”了,它集科学计算、图象处理、声音处理于一身,并提供了丰富的Windows图形界面设计方法。MATLAB已经不仅仅是一个“矩阵实验室”了,它集科学计算、图象处理、声音处理于一身,并提供了丰富的Windows图形界面设计方法。 • MATLAB语言是功能强大的计算机高级语言, 它以超群的风格与性能风靡全世界, 成功地应用于各工程学科的研究领域。
MATLAB在美国已经作为大学理工科学生必修的计算机语言之一 (C, FORTRAN, ASSEMBLER, MATLAB)。 • 近年来,MATLAB语言已在我国推广使用,现在已应用于各学科研究部门和许多高等院校。 • MATLAB语言不受计算机硬件的影响,286以上的计算机都可以使用。
二、matlab能在各领域做什么 • 工业研究与开发 • 数学教学,特别是线性代数 • 数值分析和科学计算方面的教学与研究 • 电子学、控制理论和物理学等工程和科学 学科方面的教学与研究 • 经济学、化学和生物学等计算问题的所有其他领域中的教学与研究
例、用一个简单命令求解线性系统 3x1+ x2 - x3 = 3.6 x1+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=A\b x = 1.4818 -0.4606 0.3848 对于线性系统有A*x=b
例、用简短命令计算并绘制在0x6范围内的sin(2x)、sinx2、sin2x。例、用简短命令计算并绘制在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)
三、MATLAB语言的特点 • 1、起点高 • 2、人机界面适合科技人员 • 3、强大而容易的作图功能 • 4、智能化程度高 • 5、功能丰富,可扩展性强
四、MATLAB语言的功能: • 1、强大的数值(矩阵)运算功能 • 2、广泛的符号运算功能 • 3、高级与低级兼备的图形功能(计算结果的可视化功能) • 4、可靠的容错功能 • 5、应用灵活的兼容与接口功能 • 6、信息量丰富的联机检索功能
五、MATLAB的工作环境 1、命令窗 由工作空间:Workspace,历史命令Command History, 当前目录Current Directory 命令窗Command Windows。 命令窗是用户与MATLAB进行人机对话的主要环境。
台式电脑:按PrtSc键 手提电脑:按住fn键,再按prt sc键
Format命令的应用: >> 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 rat >> pi ans = 355/113 >> format short >> pi ans = 3.1416
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. 。。。。。。。。。
退出MATLAB: 1、file→Exit matlab 2、在命令窗口中键入exit或 quit 3、单击命令窗右上角× 图形窗:>>logo 文本编辑窗:file→new→M-file
六、演示程序 命令窗中键入:demo 可以通过演示程序,模仿编辑相关程序。
第二章 基本语法 • 2.1 变量及其赋值 • 2.2 矩阵的初等运算 • 2.3 元素群运算 • 2.4 逻辑判断与流程控制 • 2.5 基本绘图方法 • 2.6 M文件及程序调试
2.1变量及其赋值 • (1)标识符与数 • (2)矩阵及其元素的赋值 • (3)复数 • (4)变量检查 • (5)基本赋值矩阵
一、标识符与数 • 标识符:标识符是标志变量名、常量名、函数名和文件名的字符串的总称。 • MATLAB中的标识符最长允许19个字符 ,合法字符是52个英文字母(大小写看成不同字符)、10个数字和下划线。 • 第一个字符必须是英文字母.
MATLAB中的数 • MATLAB中的实数只有一种数据格式,那就是双精度(即64位二进制或8个字节),它的有效值是十进制16位,动态范围是10的±308次幂。 2.2251×10 –308~1.7977×10+308 数的存储和运算全按同一格式进行,使编程简单,减少差错,改善人机交互,付出代价是内存空间和运行速度,形成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 二位整数, 四位小数 数的八种显示格式
二、矩阵及其元素的赋值 • 格式1:变量=表达式(或常量) • 格式2:表达式 表达式中的运算符有:加(+)、减(-) 、乘(*) 、左除(\) 、右除(/) 、指数(^) 、共軛转置(‘)、矩阵([])等。 表达式的结尾标点:若为分号‘;’,不显示; 若为逗号‘,’或直接回车,显示运算结果。
矩阵的输入方法: (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 3 3 4 5 6 7 8] A = 1 2 3 3 4 5 6 7 8
(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
(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
(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
(6)常用的特殊矩阵 单位矩阵: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的均匀分别的随机 矩阵 如果已知A为方阵,则V=diag(A)可以提取A的对角元素构成向量V。
》eye(2) ans= 1 0 0 1 》zeros(2) ans= 0 0 0 0 》ones(2) ans= 1 1 1 1 》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
(7)其他特殊矩阵 compan 友矩阵函数 magic 魔方矩阵 hankel Hankel矩阵 rosser 对称特征值测试矩阵 hilb Hilbert矩阵 pascal Pascal矩阵 invhilb 反Hilbert矩阵 vander 范德蒙矩阵 … …
(8)特殊矩阵的实现 • 常见的特殊矩阵有零矩阵、幺矩阵、单位矩阵、三角形矩阵等,这类特殊矩阵在线性代数中具有通用性;还有一类特殊矩阵在专门学科中有用,如有名的希尔伯特(Hilbert)矩阵、范德蒙(Vandermonde) 矩阵等。 • 零矩阵:所有元素值为零的矩阵称为零矩阵。零矩阵可以用zeros函数实现。zeros是MATLAB内部函数,使用格式如下: zeros(m):产生m*m阶零矩阵; zeros(m,n):产生m*n阶零矩阵,当m=n时等同 于zeros(m); zeros(size(A)):产生与矩阵A同样大小的零矩阵。
空矩阵 在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=[ ]
三、复数 • 虚数符号MATLAB启动时定为i,j,可以不用乘号,连写在数字后面。 • 如果用户在程序中另外給i,j赋值,则它们的虚数意义就失效。 • conj(x)表示共軛,即把x的虚部反号。 • ‘ 是共軛转置运算符,对实矩阵把行号与列号交换,对复矩阵除行列交换外,还要把矩阵元素取共軛。
>> 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 >> 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
四、变量检查 • 变量检查命令who,whos • 打开工作空间视窗 • 在检查中不显示内部变量 eps,realmax,realmin,pi i,j,inf,NaN
>> 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
矩阵组合与显示 • 大矩阵可由若干个小矩阵组成,但必须其行列数正确,恰好填满全部元素。 • 一个矩阵中所有元素用同一显示格式。有一个是小数则都用小数; • 当矩阵中的最大元素小于0.001,或其最小元素大于1000时,MATLAB会把其公因子提出来 。 • 元素大小差别很大时,不宜用矩阵显示。
2.2 矩阵的初等运算 • (1)矩阵数值的表示方法(前面已讲); • (2)矩阵的加减乘法; • (3)矩阵的除法和线性方程解; • (4)矩阵的乘方和超越函数;
一、矩阵的加减法 • 两矩阵进行加减的条件是其行数和列数相同,简称阶次相同,矩阵的加减即其对应元素的加减。 size(A)=size(B) 如果其中一个变量是标量,则会自动扩展成各元素均取此标量值的同阶次矩阵。
>> 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 >> 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
二、矩阵的乘法 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)
矩阵的乘法 • 两矩阵相乘C=A*B的条件是A的列数等于B的行数,简称内阶数相同。设矩阵A 为n×p阶,矩阵B为p×m阶,则C是n×m阶。内阶数不同的矩阵不能相乘。 • 不符合交换律:A*B≠B*A,左乘不等于右乘; • 若一个变量是标量,则按标量乘法。
>> A=[1 2;3 4] A = 1 2 3 4 >> B=[5 6 ;7 8] B = 5 6 7 8 >> C=A*B C = 19 22 43 50 >> D=B*A D = 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 ==> mtimes Inner matrix dimensions must agree.