Matlab讲义
MATLAB入门讲义

MATLAB讲稿目录1 MATLAB简介 (2)1.1 MATLAB的特点 (2)1.2 窗口 (2)1.3 联机查询与演示 (3)2 数值计算 (4)2.1 数字及其运算 (4)2.2 常用数学符号及函数: (4)2.3 向量、数组及其运算 (5)2.4 矩阵及其运算 (7)2.5 多项式及其运算 (9)3 符号运算 (10)3.1 定义符号表达式 (10)3.2 符号表达式运算 (10)3.3 符号表达式的因式分解、展开与化简 (11)3.4 符号微积分 (11)3.5 符号方程求解 (12)3.6 调用函数计算器:funtool (13)3.7 级数 (13)3.8 Maple接口 (13)4 绘图 (13)一、绘图命令 (13)二、绘图参数(点标、线型、颜色) (14)三、图形标注处理 (14)四、图形控制 (14)5 程序设计 (16)一、M文件 (16)二、控制语句 (16)三、一些数学问题............................................ 错误!未定义书签。
6 在最优化问题中的应用..................................... 错误!未定义书签。
一、线性优化lp ............................................... 错误!未定义书签。
二、二次优化qp............................................... 错误!未定义书签。
三、非线性无约束优化问题............................ 错误!未定义书签。
四、最小二乘优化问题.................................... 错误!未定义书签。
五、强约束问题................................................ 错误!未定义书签。
MATLAB经典教程(全)PPT课件

MATLAB的优势
易于学习、使用灵活、高效的数值计 算和可视化功能、强大的工具箱支持。
发展历程
从最初的数值计算工具,逐渐发展成 为一款功能强大的科学计算软件,广 泛应用于工程、科学、经济等领域。
MATLAB工作环境与界面
MATLAB工作环境
包括命令窗口、工作空间、命令历史窗口、当 前文件夹窗口等。
界面介绍
详细讲解MATLAB界面的各个组成部分,如菜 单栏、工具栏、编辑器窗口等。
基本操作
介绍如何在MATLAB环境中创建、保存、运行脚本和函数,以及如何进行基本 的文件操作。
基本数据类型与运算
矩阵大小
使用`size`函数获取矩阵的行数 和列数。
矩阵元素访问
通过下标访问矩阵元素,如 `A(i,j)`表示访问矩阵A的第i行第j 列元素。
矩阵基本操作
包括矩阵的加、减、数乘、转置 等操作。
矩阵运算及性质
矩阵乘法 满足乘法交换律和结合律,但不满足 乘法交换律。
矩阵的逆
对于方阵,若存在一矩阵B,使得 AB=BA=I(I为单位矩阵),则称B 为A的逆矩阵。
Hale Waihona Puke 03 数据分析与可视化数据导入、导出及预处理
数据导入
介绍如何使用MATLAB导入各种格式的数据文件, 如.csv、.txt、.xlsx等。
数据导出
讲解如何将MATLAB中的数据导出为常见的数据文件格式,以 便于数据共享和交换。
数据预处理
阐述数据清洗、数据变换、数据规约等预处理技术,为后续的数 据分析和可视化奠定基础。
01
02
MATLAB数学实验讲义-经典

例1. 发射角为450的抛射曲线绘制
v0=515;alpha=45*pi/180; T=2*v0*sin(alpha)/9.8; t= T(0:16) /16;
%计算飞行时间 %飞行时刻
x=v0 *t *cos(alpha);
%计算航点
y=v0 *t *sin(alpha) -0.5*9.8*t.^2;
例14.汽车紧急刹车问题数据拟合实验
V 20 25 30 35 40 45 50 55 60 65 70
T 20 28 41 53 72 93 118 149 182 221 266
V表示刹车时汽车行驶速度(英里/小时),T表示刹车 后汽车滑行距离(英尺)
v=[20 25 30 35 40 45 50 55 60 65 70]*1.609; T=[20 28 41 53 72 93 118 149 182 221 266]*.3048; P2=polyfit(v,T,2);T2=polyval(P2,v); R2=sum((T-T2).^2) figure(2),plot(v,T,'*',v,T2) P3=polyfit(v,T,3);T3=polyval(P3,v); R3=sum((T-T3).^2) figure(3),plot(v,T,'*',v,T3)
f=inline('exp(-0.2*x).*sin(0.5*x)'); t=(0:20)*pi/10; theta=t;r=f(t); x=t'*ones(size(t)); y=r'*cos(theta); z=r'*sin(theta); mesh(x,y,z) colormap([0 0 0]) axis off view(-17,54)
MATLAB软件基础知识讲义

MATLAB软件基础知识讲义§1MATLAB 概述MATLAB 是MATrix LABoratory〔〝矩阵实验室〞〕的缩写,是由美国MathWorks 公司开发的集数值运算、符号运算和图形可视化三大差不多功能于一体的,功能强大、操作简单的语言。
是国际公认的优秀数学应用软件之一。
20世纪80年代初期,Cleve Moler与John Little等利用C语言开发了新一代的MATLAB语言,现在的MATLAB语言已同时具备了数值运算功能和简单的图形处理功能。
1984年,Cleve Moler与John Little等正式成立了Mathworks公司,把MA TLAB 语言推向市场,并开始了对MATLAB工具箱等的开发设计。
1993年,Mathworks公司推出了基于个人运算机的MATLAB 4.0版本,到了1997年又推出了MATLAB 5.X版本〔Release 11〕,并在2000年又推出了最新的MATLAB 6版本〔Release 12〕。
现在,MATLAB差不多进展成为适合多学科的大型软件,在世界各高校,MATLAB差不多成为线性代数、数值分析、数理统计、优化方法、自动操纵、数字信号处理、动态系统仿真等高级课程的差不多教学工具。
专门是最近几年,MATLAB在我国大学生数学建模竞赛中的应用,为参赛者在有限的时刻内准确、有效的解决问题提供了有力的保证。
概括地讲,整个MATLAB系统由两部分组成,即MATLAB 内核及辅助工具箱,两者的调用构成了MATLAB的强大功能。
MATLAB语言以数组为差不多数据单位,包括操纵流语句、函数、数据结构、输入输出及面向对象等特点的高级语言,它具有以下要紧特点:1〕运算符和库函数极其丰富,语言简洁,编程效率高,MATLAB 除了提供和C语言一样的运算符号外,还提供广泛的矩阵和向量运算符。
利用其运算符号和库函数可使其程序相当简短,两三行语句就可实现几十行甚至几百行C或FORTRAN的程序功能。
《信号与系统》MATLAB仿真实验讲义

《信号与系统》MATLAB仿真实验讲义(第二版)肖尚辉编写宜宾学院电信系电子信息教研室《信号与系统》课程2004年3月 宜宾使用对象:电子专业02级3/4班(本科)实验一 产生信号波形的仿真实验一、实验目的:熟悉MATLAB软件的使用,并学会信号的表示和以及用MATLAB来产生信号并实现信号的可视化。
二、实验时数:3学时+3学时(即两次实验内容)三、实验内容:信号按照自变量的取值是否连续可分为连续时间信号和离散时间信号。
对信号进行时域分析,首先需要将信号随时间变化的规律用二维曲线表示出来。
对于简单信号可以通过手工绘制其波形,但对于复杂的信号,手工绘制信号波形显得十分困难,且难以绘制精确的曲线。
在MATLAB中通常用三种方法来产生并表示信号,即(1)用MATLAB软件的funtool符合计算方法(图示化函数计算器)来产生并表示信号;(2)用MATLAB软件的信号处理工具箱(Signal Processing Toolbox)来产生并表示信号;(3)用MATLAB软件的仿真工具箱Simulink中的信号源模块。
(一) 用MATLAB软件的funtool符合计算方法(图示化函数计算器)来产生并表示信号在MATLAB环境下输入指令funtool,则回产生三个视窗。
即figure No.1:可轮流激活,显示figure No.3的计算结果。
figure No.2:可轮流激活,显示figure No.3的计算结果。
figure No.3:函数运算器,其功能有:f,g可输入函数表达式;x是自变量,在缺省时在[-2pi,2pi]的范围内;自由参数是a;在分别输入完毕后,按下面四排的任一运算操作键,则可在figure No.1或figure No.2产生相应的波形。
学生实验内容:产生以下信号波形3sin(x)、5exp(-x)、sin(x)/x、1-2abs(x)/a、sqrt(a*x)(二) 用MATLAB软件的信号处理工具箱(Signal Processing Toolbox)来产生并表示信号一种是用向量来表示信号,另一种则是用符合运算的方法来表示信号。
matlab讲义9

>> n=20; >> [long,lat] = meshgrid(-pi: 2*pi/n :pi, -pi/2: pi/n :pi/2);
These latitude and longitude values are then mapped to the X and Y spherical coordinates.
The Program:
% This is a program to visualize 4D functions
% First create a mesh in the xyz plane [X,Y,Z]=meshgrid(-2:0.1:2, -2:0.1:2, -2:0.1:2);
% Then compute the function V on (X,Y,Z) V=sqrt(sin(X).^2 + cos(Y).^2 +Z.^2); % Then color the function for different values % on three planes: x=0, y=0, z=-2 and z=2 slice(X,Y,Z,V,[0],[0],[-2 2]) % Use color bar to illustrate value of V colorbar
plot normal vectors
>> shading interp;
surface is shaded by interpolation
>> view(10,60);
view from different angle
>> colorbar
bar gives height
>> colormap(hot);
MATLAB基础知识讲义

h
2
MATLAB语言的主要特点
MATLAB基础
(1)具有丰富的数学功能
包括矩阵各种运算。如:正交变换、三角分解、特征值、常见的特殊矩 阵等。
包括各种特殊函数。如:贝塞尔函数、勒让德函数、伽码函数、贝塔函 数、椭圆函数等。
包括各种数学运算功能. 如: 数值微分, 数值积分, 插值, 求极值,方程求根, 常微分方程的数值解, 符号运算, 极限问题、积分问题等。
h
5
MATLAB基础
h
6
MATLAB基础
一、变量、数值与函数
1、变量
MATLAB中变量的命名规则 (1) 变量名必须是不含空格的单个词; (2) 变量名区分大小写; (3) 变量名最多不超过63个字符; (4) 变量名必须以字母打头,之后可以是任意字母、数字 或下划线,变量名中不允许使用标点符号。
h
7
特殊变量表
MATLAB基础
特殊变量 取 值
ans
用于结果的缺省变量名
pi eps flops
圆周率 计算机的最小数,当和 1 相加就产生一个比 1 大的数 浮点运算数
inf NaN i,j
无穷大,如 1/0 不定量,如 0/0 i=j= 1
nargin
所用函数的输入变量数目
nargout 所用函数的输出变量数目
cumsum
求元素累积和
length size
MATLAB基础
MATLAB基础
h
1
MATLAB基础
MATLAB的发展史
MATLAB名字由MATrix和 LABoratory 两词的前三个字母组合而成。 那是20世纪七十年代,时任美国新墨西哥大学计算机科学系主任的Cleve Moler出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK 和 EISPACK 矩 阵 软 件 工 具 包 库 程 序 的 的 “ 通 俗 易 用 ” 的 接 口 , 此 即 用 FORTRAN编写的萌芽状态的MATLAB。
MATLAB实验讲义

MATLAB实验讲义目录实验大纲 (2)实验一/二 MATLAB的基础操作 (3)实验三 MATLAB运算基础(一) (3)实验四 MATLAB运算基础(二) (4)实验五循环结构程序设计(一) (5)实验六循环结构程序设计(二) (5)实验七 MATLAB的绘图操作(一) (6)实验八 MATLAB的绘图操作(二) (7)实验九函数和文件(一) (7)实验十函数和文件(二) (7)实验十一线性代数中的数值计算问题 (8)实验十二 MATLAB函数库的运用(一) (9)实验十三 MATLAB函数库的运用(二) (10)《MATLAB》课程实验教学大纲课程名称:MATLAB(MATLAB)课程编号:16072327课程性质:选修实验总学时:27实验室名称:电子设计自动化一、课程简介:本课程是电气工程及其自动化、自动化、电力工程与管理专业本科生的学科基础选修课,它在线性代数、信号分析和处理、控制系统设计和仿真等方面有着广泛的应用。
主要是学习MATLAB的语法规则、基本命令和使用环境,使学生掌握MATLAB的基本命令和基本程序设计方法,提高使用该语言的应用能力,具有使用MATLAB语言编程和调试的能力,以便为后续多门课程使用该语言奠定必要的基础。
二、课程实验目的与要求:1.基本掌握MATLAB在线帮助功能的使用、熟悉MATLAB运行环境和MATLAB语言的主要特点,掌握MATLAB语言的基本语法规则及基本操作命令的使用,学会M文件的建立和使用方法以及应用MATLAB实现二维和三维图形的绘制方法,具有使用MATLAB语言编程和调试的能力。
2.初步掌握MATLAB在电路和信号与系统中的应用。
3.能根据需要选学参考书,查阅手册,通过独立思考,深入钻研有关问题,学会自己独立分析问题、解决问题,具有一定的创新能力。
三、主要仪器设备及台(套)数:计算机50台、MATLAB软件五、主要参考书目:1.《MATLAB及在电子信息课程中的应用》陈怀琛、杨吉斌编著,电子工业出版社,2002年1版2.《MATLAB7.0编程基础》王家文、王皓、刘海等;机械工业出版社,2005年7月3.《MATLAB教程——基于6.x版本》张志涌、徐彦琴等;北京航空航天大学出版,2001年4月出版实验一/二 MATLAB的基础操作一、实验目的1、掌握MATLAB的启动和退出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
非线性力学初步与数值计算(数学软件Matlab 在理论力学中的应用)§1 Matlab 入门这是供同学自学的内容.老师不一定是专家,韩愈说过:“师不必贤于弟子,弟子未必不如师.”玩计算机,正是年轻人的特长.这里有超越老师的机会.计算机是玩会的,拿出玩电子游戏的热情与专注,很快就会成功.Matlab 在科研和工程设计中被广泛使用,它几乎可以做你想做的所有事,学会了可以终生受益.不要学了再做,要在做中去学.装上软件,边看书边实践;先按书输入程序,让它能运行;再模仿它,做一点点修改……发挥你的创造性,做你想做的事……这里只是入门,入门后有很多书可看.遇到问题,最快捷的方法是向会做的人请教. Matlab 设有帮助系统(见本节之六),但它是英文界面,开始看不懂是有情可原的.Matlab 是Matrix Laboratory 的缩写,是一种功能强、效率高、便于进行科学和工程计算的交互式软件包. 由于使用Matlab 编程运算与人进行科学计算的思路和表达方式完全一致,所以不象学习其它高级语言那样难于掌握.实践证明,读者可在短短几个小时的学习和使用中就能初步掌握Matlab 的基础知识,从而使读者能够进行高效率和富有创造性的计算.Matlab 对于学习者的编程语言基础要求不高,库函数和编程语句丰富多样且简单易学,在数据可视化上也有独特的优势.学习者不需要投入太多的时间在学习编程语言知识上,直接利用软件提供的丰富的函数,就可用编写较简单的程序来学习理论力学了.一、Matlab 使用介绍在Windows 窗口中用鼠标双击Matlab 图标即可进入Matlab 的命令窗口(Command Window ,也称工作窗口),如图1所示.没有图标可利用Matlab\bin 目录下的Matlab.exe 文件在桌面上建立一个快捷方式.退出Matlab 的方法有三种:单击命令窗口右上角的关闭按钮;用菜单“File Exit ”命令;或者直接在命令窗口中输入quit 后回车.命令窗口是标准的Windows 窗口形式,用户在命令窗口中输入各种指令,进行运算;在左侧的变量窗口中监控当前所创立的所有变量.图1 图2Current Directory 是系统的当前工作路径,Matlab 对函数或文件等进行搜索,用户每次文件的创建和保存都在这个路径下进行.启动Matlab 时系统的默认工作路径是Matlab 目录下的Work 子目录,如果要改变当前的工作路径,可单击如图2所示的路径栏右侧的,在弹出的路径选择对话框内选择想要设置的路径.二、使用Matlab 的三个简单例子先给出使用Matlab 学习物理学的三个的例子,意在引导读者对Matlab 的功能特点及语句编程有一个最初步了解. 1.绘制简谐振动的振动曲线 介绍二维绘图的语句. 简谐振动的运动学方程是sin()x A t ωϕ=+,可以根据这个方程利用Matlab 的绘图语句画出简谐振动的位移曲线.在命令窗口中输入命令如图3,运行结果如图4所示.图3图4在这个例子中,a是振幅A,omiga是圆频率ω,phi是初相位ϕ,t是自变量,开始时为这些参量以及自变量赋值.可以看出,Matlab不像其它编程语言那样必须进行变量的预定义,创建变量和为变量赋值是同时完成的.另外,对时间t的赋值是一组数据,即从0到4π每隔0.05π取一个值,形成一个数组:t=[0 0.1571 0.3142…12.2522 12.4093 12.5664 ] (数组中的数用空格或逗号分开),共有81个元素. 语句中的pi是Matlab默认的常数π.x=a*sin(omiga*t+phi)是建立表达式并运算,sin( )函数是Matlab的内置函数,直接调用即可;由此得出对应每一个t值的质点的位移x,x是一个与t所含元素个数相同的数组.最后的plot(t,x)是二维绘图语句,表示以t为横坐标,x为纵坐标绘图,得出的就是正弦曲线.如果对各个参量取不同的值,得出的曲线形状也就不一样,读者不妨试一试.对于数组t的赋值,一般格式为t=t0:tstep:tend.t0为数组中第一个元素的值,tend为最后一个元素的值,tstep为取值的间隔.Matlab会根据计算结果自动调整坐标轴范围,当然也可以通过语句对坐标轴进行控制.2.计算并图示等量异号点电荷的电势分布介绍二维网格和三维曲面绘图的语句.物理情景是Oxy平面上在2x=和0y=处有一正电荷,2x=-和0y=处有一负电荷,根据4qUrπε=,22)()(yyxxr-+-=计算两点电荷电场的电势分布.在命令窗口中输入命令如图5,运行结果如图6所示.图5 图6选定一系列的x和y后,就组成了平面上的网格点,再计算对应每一点上的z值.-5:0.2:5,-4:0.2:4分别是选取横坐标与纵坐标的一系列数值.meshgrid是生成数据网格的命令,[x,y]是Oxy平面上的坐标网格点.z=1./sqrt((x-2).^2+y.^2+0.01)-1./sqrt((x+2).^2+y.^2+0.01)是场点(,)x y的电势,sqrt( )是Matlab默认的函数—求变量的平方根.在电荷处会出现分母为零的情况,因此加了小量0.01,这样既可以完成计算,又不会对结果造成太大影响.注意表达式中的“./”和“.^”是对数组运算的算符,含义与数值运算中的“/”和“^”相同;差别是后者只对单个数值变量进行运算,前者对数组变量中的所有元素同时进行运算.mesh 是三维网格作图命令,mesh(x,y,z)画出了每一个格点(x, y )上对应的z 值(电势). 3.logistic 叠代图()n n n x x x -=+11λ是一个著名的非线性方程,称为logistic 方程,给定初值0x (001x <<)和系数λ(04λ<<)后,进行n 次叠代,研究n x 的变化趋势.在命令窗口中输入命令如图7,运行结果如图8所示.图7 图8第一条语句是取初值x 0,为了保证随机数x 0在[0,1]内,使用了x0= abs(sin(randn)).其中abs( )是求绝对值,randn 是生成一个随机数.程序中用了for 循环结构,循环变量为n .for 循环结构的形式为 for n=N0:Nstep:Nend 循环体 endfor n=1:150,就是从n=1开始,把x0代入公式,对得到的结果x1描点;然后令x0=x1,再作为初值代入公式进行计算,直到n=150结束.这里的Nstep 是取值间隔,默认为1,也可以取其它整数.hold on 是作图控制,即在图上绘出新的点时,保留上一次已经绘出来的点.如果没有这一句,图上只会留下最后一次叠代结果对应的点.三、数据表示 运算符和表达式 1.数据格式及表示Matlab 使用常规的十进制表示法,小数位数不限,可以用加号和减号表示正负数.10的幂用e 加上数字表示.虚数单位是i 和j ,数字后直接加上i 或j 表示虚数,中间不要有空格或者乘号;但表达式中要在变量名和虚数单位间加上*号.以下都是合法的数值表示法:2880.3219.6892 1.02e 6 6.02e853i 3.242i 3e5i --+-2.运算符和操作符(1)一般运算符.单个数据的运算有加,减,乘,除,幂和括号.所用的算符分别是:*/^()+-(2)操作符①冒号“:”.此符号在矩阵(数组)的构造和运算中非常有用,可以用来产生矢量(数组),其基本用法有:j:k等价于[j,j+1,……,k],若j>k 则返回空值.j:i:k 等价于[j,j+i,j+2*i,……,k],i>0则要求j<k ,i<0则要求j>k ,否则返回空值.此外,冒号还可以用作矩阵的下标,以及部分的选择矩阵的元素,执行循环操作等,后面几节中会陆续介绍. ②百分号“%”.表示注释,即在一行中百分号后面的语句都被忽略而不被执行.③连续点“…”.如一条命令很长,一行容不下,可用3个点加在此行的末尾,表示此行未完,在下一行继续.例如在建立等量异号点电荷电场中电势的表达式时,可以这样写:z=1./sqrt((x-2).^2+y.^2+0.01)…-1./sqrt((x+2).^2+y.^2+0.01);这样虽然占了两行,但Matlab仍然认为这是一条语句,不会出现错误.④分号“;”.分号用在每行命令的结尾,要求执行命令但不显示计算结果.(3)关系运算符.关系运算符主要用于在数与数,矩阵与矩阵之间进行比较.(4)逻辑运算符.Matlab中包含与“&”,或“|”,非“~”,异或“xor”4种逻辑运算符.3.变量与表达式用运算符把数字、变量和函数组合在一起,就建立了一个表达式.例如前面例子中的x0=abs(sin(randn)),x=a*sin(omiga*t+phi)等.在Matlab中,一个变量可以通过给它分配一个数值或表达式来定义,如下所示:variable =expression变量的值可以通过输入它的名字 值(或表达式),并按回车键获得,Matlab以显示这个变量的名字和值作为回答.若这个变量不存在,就显示一个错误信息,如图9所示.在expreesion之后可以加分号后按回车键,也可以直接按回车键.没有结尾分号的每个命令在屏幕上显示出其结果;若结尾带分号,就只执行计算,计算结果并不显示.图9若不指定变量而直接输入expression项,则Matlab用ans(answer的缩写)显示这个值.4.管理变量使用以下命令了解当前工作窗口中的变量信息,清除不再需要的变量:who(列出当前工作窗口的变量),whos (列出变量,含矩阵尺寸等),clear(从内存中清除变量和函数).5.基本数学函数(可直接调用)①三角函数与双曲函数②对数函数③复数函数④统计函数四、矩阵与数组1.定义矩阵Matlab 中数据的基本格式是矩阵.2维矩阵是一个以行和列排列的元素矩形表,如果有m 行n 列,这个矩阵的大小就是m n ⨯.矩阵的元素,即数ij a ,指第i 行第j 列的数.矩阵仅由一行组成,就是一个行矢量.如果矩阵仅有一列,就是一个列矢量.矢量中元素的数量就是矢量的长度.如果矩阵的维数是1,它是一个标量,就是一个数.二维矩阵的建立可有多种方法,最简单的方法是由方括号[ ]包围,逐行给定元素.相同行中的元素用空格“ ”或逗号“,”分隔;不同行由分号“;”或回车键分隔.如图10所示.如果定义一个标量,则方括号就不需要了.2.矩阵元素的标识与修改 图10一个矩阵A (或矢量A )的指定元素用A(i,j)来表示,例如A(2,3)就表示矩阵A 的第二行第三列的元素,如图10所示.可以单独引用某个矩阵元素,并且对其直接赋值或建立表达式进行修改.3.一些特殊矩阵的生成指令建立1矩阵使用ones 命令,这种矩阵的元素全部都是1.建立0矩阵使用zeros 命令,这种矩阵的元素全部都是0.单位矩阵的对角线元素全部是1,而其他元素全部是0,建立它使用eye 命令.如:(以ones 为例,zeros 和eye 的用法是一样的)ones(n)建立一个n n ⨯的1矩阵.ones(size(A))建立一个和矩阵A 同样大小的1矩阵.4.数组与数组运算对于一个矩阵A ,Matlab 既可以进行矩阵运算,也可以进行数组运算.所谓矩阵运算,就是线性代数中规定的矩阵所特有的运算,如矩阵的乘法、求矩阵的逆、特征值等等.而数组运算,则是把参与运算的二维矩阵看作二维的数组,对矩阵中的对应元素进行相同的运算,运算结果到一个新的矩阵,新矩阵和原矩阵中的元素一一对应.这种数组运算使得对大量数据进行相同的运算变得十分方便快捷.数组运算的一般运算符与单个数值运算的一般运算符相似,相应的有.*./.^()+-含义与数值运算的算符相同.图11 图12 图13 图14 比较图11 和图12,可见“.*”和“*”的两种算符得出的结果是不一样的.写表达式时一定要分清要做的是哪种运算.参与运算的矩阵的维数必须相同,否则就会报错,如图13所示.在Matlab中预定义的数学函数是基于矩阵的数组运算.也就是说函数f对于矩阵A,有f (A)ij=f (A ij),矩阵的维数没有改变,如图14所示.五、编程Matlab输入命令的方式有两种,一种就是像前面所说的直接在命令窗口中输入简单的语句,这种方式适应于命令比较简单,处理的问题没有普遍应用性,差错处理比较简单的场合.但是在进行大量重复性的计算时,或者语句结构比较复杂需要进行流程控制时,这种方式就显得不好了,如果输入错误则很不好改正,因此就要用另一种工作方式,即M文件的编程工作方式了.M文件是一个简单的文本文件,语法比一般的高级语言都要简单,程序容易调试,交互性强;而且可以像一般文本文件那样在任何文本编辑器中进行编辑、存储、修改和读取.注意:输入时用英文,不可用中文标点,注意空格.1.创建并编辑M文件尽管M文件可以用任何文本编辑器(如记事本,写字板等程序)创建和编辑,Matlab还是提供了一个方便实用的M文件编辑器,利用这个编辑器可以完成程序的创建、编辑、调试、存储和运行等工作.图15在Matlab命令窗口中输入“edit”并回车,就调出了如图15所示的M文件编辑器(编辑窗口).在M文件编辑器的菜单栏里选择“File→New→M-file”命令,或单击工具栏上最左端的按钮,可以创建一个新的M文件;选择“File→Open”命令,或者单击工具栏上的按钮,可以打开工作路径上的已有的M文件;当编辑完M文件后,在菜单栏里选择“File→Save”命令,或者单击工具栏上的按钮,可以保存文件.此外,在Matlab主窗口中的菜单栏和工具栏上,也有相应的命令和按钮来创建和编辑M文件.例1将二中的logistic叠代图的语句编辑成M文件并运行.启动M文件编辑器,创建一个新的M文件,在编辑窗口中输入语句,如图16所示,输入完毕后保存文件为lg.m,放在当前的工作目录下.在Matlab的命令窗口中输入“lg”并回车,则运行此程序,显示的结果与前文相同.可以随时更改M文件内容并重新运行,例如将“lamda=0.8”改为“lamda=3.5”,保存文件,再次运行此程序,则所得结果如图17所示.图16 图17读者可以将前面所举示例改为以M文件的形式来完成.2.脚本文件与函数文件M文件有两种形式,即命令文件(也称脚本文件)和函数文件.脚本文件就是前面所举例中的M文件形式,是命令和语句的简单叠加,Matlab会自动按顺序执行文件中的命令.函数文件主要用以解决参量传递和函数调用的问题,它的第一句以function语句为引导.需要注意的是命令文件在运行过程中可以调用Matlab工作域内所有的数据,而且所产生的所有变量均为全局变量.也就是说,这些变量一旦生成,就一直保存在内存空间中,直到用户执行“clear ”命令或退出Matlab 时才会被清除.而函数文件中所有变量除特殊声明外,均为局部变量,即只在调用函数时存在,一旦函数调用结束,这些变量立即被清除.按下“F5”键或单击如图16工具栏上最右侧的按钮,可以运行命令文件.例2 将解logistic 方程以函数文件形式完成.在编辑窗口输入语句如图18所示,保存文件名为logistic.m ,在命令窗口中输入logistic(3.5,150),所得结果与图17相同.在本例中,第一行语句必须以function 开头,f 是函数的返回值(可以是空值),logistic 是函数名,lamda 和N 是参量,在调用此函数文件时由用户键入.之后的语句与前面例子相同,只是不再在程序中对lamda 和循环次数N 赋值了. 图18调用函数文件的命令是logsitic(3.5,150),即向函数传递两个参量(λ和N ),表示当 3.5λ=时叠代150次.写成函数文件的好处是不需要对M 文件本身进行修改,只需要在调用函数文件时键入参量的不同值,从而得到不同情况下的结果,十分方便.3.流程控制语句对于比较复杂的任务,需要设计一定的算法,运用流程控制语句才能完成.程序一般分为顺序结构,循环结构,分支结构3种.在理论上,只要有以上三种结构就可以构造功能强大的程序.下面只介绍顺序结构和for 循环结构. (1)顺序结构顺序结构就是依顺序执行程序的各条语句.语句在程序文件中的物理位置就反映了程序的执行顺序,例如图3和图5所示就是典型的顺序结构. (2)for 循环结构循环是数值计算解决问题的重要手段,许多问题都包含有规律性的重复计算和对某些语句的重复执行.for 循环将循环体中的语句重复执行给定的次数,循环的次数一般情况下是已知的.在前面介绍logistic 叠代的例子时就已经接触到for 循环了,其结构为:for i=表达式 可执行语句1 …… 可执行语句n end表达式是一个数组,可以为m:s:n ,s 为步长,数组中的元素被逐一赋值给i ,对于每个i 的不同取值都要执行一次循环体内的语句.表达式也可为m:n ,此时默认的步长为1.for 循环的循环体中,可以多次嵌套for 和其他的结构体. 例3 利用for 循环求1!2!20!+++ 的值.编写M 文件如图19所示,当前工作路径下保存文件名为jc.m ;在命令窗口键入jc 并回车,则显示出计算结果182.561310s =⨯,如图20所示.图19 图20循环的嵌套类似于时钟的运行,外层循环变量i 是时针,内层循环变量k 是分针,当分针k 完成一轮循环时,时针i 只完成了一步循环.在前面的程序中,用omiga 表示ω,phi 表示ϕ,好处是意义比较明确;现在用s 代表sum ,好处是比较简单;笔者喜好简单的方式,读者可按自己喜好处理. (3)其他指令还有其它一些用于流程控制的命令,它们的名称和功能如下表所示:六、Matlab 的帮助系统选择菜单栏中“Help Matlab Help ”命令;或在命令窗口键入Demo (Helpdesk )并回车,即可调出Help 窗口(Demo 演示窗口).然后,比如想了解二维作图指令,可在其左侧窗口选择Demos-MATLAB-Graphics-2D plots ,就可以演示各种二维作图指令.§2 常用的几种指令一 、 解方程 1.解一元函数方程()0f x =即利用指令fzero( )来求一元函数()y f x =的零点. 语句格式及各项符号为: x=fzero(fun,x0) [x,fval]= fzero(fun,x0)x=fzero(fun, x0,[ ],p1,p2,…) [x,fval]= fzero(fun, x0,[ ],p1,p2,…)例4 求方程0cos sin 3cos sin =-+x x x x x 的根.建立M 函数文件,如图21,在当前工作路径下保存文件为fx.m .在命令窗口中输入“[x,y]=fzero('fx',-3)”并回车,则显示出计算结果,如图22.这种方法只能在猜测值附近找到一个零点,如果函数有多个零点,则有可能遗漏.所以要想找到函数的所有零点,最好用函数绘图语句fplot( )画出图像以判断搜寻范围.在命令窗口中输入fplot('qx',[-9 9]),画出此函数在区间[-9 9]的图像,如图23,可见在此区间的-6、-3、3、6附近均存在零点,可分别以这几个值作为猜测值代入指令,求出较为精确的解.图21 图22 图232.解线性方程组对形式为Ax B =的线性方程组,这里A 是m m ⨯的矩阵,B 是已知矢量,x 是未知矢量.用Matlab 求解时使用矩阵左除的方法,即\x A B =.例5 利用Matlab 求下方程组的数值解.⎪⎩⎪⎨⎧=-+=+-=-+9231435428762z y x z y x z y x 在命令窗口键入并计算,如图24.程序中的x 是未知数x ,y ,z 所组成的解的矢量.它的三个元素x(1),x(2),x(3)分别代表未知数x ,y ,z .读者不妨试试矩阵的其它运算,也很简单.二、解常微分方程 图24Matlab 解常微分方程组的能力很强而且很方便,在理论力学中遇到的大多数动力学方程都可以用命令ode45求解.(有问题时可以试用一下ode15s .)Matlab 只能解一阶的常微分方程组,高阶的常微分方程需要转化成一阶方程组才能求解.对于二阶常微分方程(,,,)0F x x x t = ,首先需要化成显式形式(,,)xf x x t = ,然后令x y =)1(,x y =)2(,则二阶常微分方程化为两个一阶常微分方程组成的方程组(1)(2)yy = 和(2)((1),(2),)yf y y t = 例6 质点在有心力(万有引力)作用下的运动.以万有引力的固定不动的施力质点0m 所在位置为坐标原点O ,建立直角坐标系Oxy ,质点的运动微分方程的分量方程为0222212()Gm xx x y x y =-++ 和0222212()Gm yy x y x y =-++ 定义解矢量为y ,令(1)y x =,(2)y x= ,(3)y y =,(4)y y = ,将方程组化为 (1)(2)yy = ,2230(2)(1)((1)(3))y Gm y y y =-+ (3)(4)yy = ,22320(4)(3)((1)(3))y Gm y y y =-+ 编写微分方程组函数M 文件如图25,在当前工作路径下保存文件为yxlcfun.m ;编写解微分方程的主程序M 文件如图26,在当前工作路径下保存文件为yxlc.m ;在命令窗口键入yxlc 并回车,计算结果如图27所示.图25图26 图27通过上面的例子,初步了解了Matlab解常微分方程的一般过程.建立微分方程组函数M文件的格式如下:fuction ydot=filename(t,y, flag,p1,p2,…)ydot=[关于t,y的表达式];求解的微分方程命令ode45的调用格式为:[t,y]=od e45(‘fun’,tspan,y0,[ ],p1,p2,…)其中含义为:三、作图Matlab有完善与强大的作图可视化功能.1.Matlab的图形窗口当使用绘图语句时,Matlab就自动打开一个图形窗口;如果已经有图形窗口存在,作图命令便会使用已存在的图形窗口.若使用命令figure,就会打开一个新的图形窗口.每一个图形窗口的标题栏都会有一个编号n,打开第n个图形窗口的指令是figure(n);在已有图形上继续作图的指令是hold on;取消这种功能的指令是hold off.图形窗口如图28所示.图28在图28中,上端是菜单栏,选择tools菜单中Show Toolbar命令可以显示工具栏的图标.各图标的含义分别是:(由左至右)新建,打开,保存和打印文件;编辑图形,加注文字,画箭头和画直线;放大,缩小和旋转图形.比如,按下工具栏上的(放大)后,用鼠标单击图上某点,则图形以此点为中心放大;按下工具栏上的(旋转)后,用鼠标可拖动图形旋转.2.二维图形(1)plot语句二维图形绘图命令中最基本的指令就是plot,它有不同的形式,与输入的量有关.对于矢量y,plot(y)产生一个折线图,纵轴为y的元素,横轴为y的元素指标.如果输入两个矢量x,y,plot(x,y)产生的是y相对于x的图形,如最开始列举的绘制振动曲线的例子.一个plot命令可以同时画多个图形.Matlab会自动用不同颜色区分每组数据的图形,颜色是预先设置好的,但可以改动.指定颜色,线型和数据点标志的plot命令格式如下:plot(x1,y1,’color style marker’,x2,y2,’color style marker’,…)例如plot(x,y,’y:+’)画出的是黄色点状线,在每个数据点有加号标志.如果指定了数据点而不指定线型,则只在各个数据点画出标志符号.颜色,线型和数据点标志的可选项有:例7:在同一窗口中画多个函数图像.编写M文件如图29,在当前工作路径下保存文件为tx.m;在命令窗口键入tx并回车,计算结果如图30所示.图29 图30 图31(2)fplot语句当已知函数关系的时候,采用fplot语句可以更加快速精确地绘制出指定区间上的函数图像.fplot绘图的数据点是自适应产生的,即在函数变化小的地方取较少的点,在函数变化剧烈的地方取较多的点.如直接画出在[0.01 0.1]区间上函数sin(1/x)的曲线,误差为10-3,如图31所示.读者可试将例7的各函数用fplot语句画出来,fplot的格式和用法类似于fzero语句.(3)二维特殊图形下面再列举了一些画二维图的指令:(4)坐标轴控制和文字标注坐标轴控制指令axis有很多选项(不加控制时Matlab会自动地寻找数据的最大值和最小值,选择合适的作图范围和坐标标度):axis([xmin xmax ymin ymax]) x轴和y轴的取值范围axis on 打开坐标轴的标签和刻度线axis off 取消坐标轴的标签和刻度线grid on 恢复网格线grid off 取消网格线xlabel,ylabel,zlabel 加上x轴、y轴、z轴的标注title 在图的上端增加一个标题text 将文字插入图中中文文本输入可采用微软输入法,这时要注意:在输入程序时不可用中文标点.例8给例7的图形加上标题,坐标轴标注和文本注释.图32编写M 文件如图32,保存文件为bztx.m ;在命令窗口键入bztx 并回车,计算结果如图33所示.图32中一些符号的意义,读者只要试一下就会知道;或者在编程时拷贝这些语句进行修改就行了.3.三维空间曲线 三维曲线的作图命令为 plot3(x,y,z,s)其中x,y,z 是同维数的矢量或矩阵.对于矢量,每组x,y,z 构成一个点的坐标, 图33各点依次相连形成曲线.如果是矩阵,则它们相应的列构成一条三维曲线的数据点坐标,所以用矩阵可以同时画多条空间曲线.s 是线型,颜色和标志的参量.例9 带电粒子在均匀电磁场中的运动.设带电粒子质量为m ,带电量为q ,电场强度E 沿y 方向,磁感应强度B沿z 方向.带电粒子在均匀电磁场中的运动微分方程为qB x y m =,q qBy E x m m=- ,0=z 令x y =)1(,xy =)2(,y y =)3(,y y =)4(,z y =)5(,z y =)6(则化为 (1)(2)y y = ,(2)(4)qBy y m= ,(3)(4)yy = (4)(2)q qByE y m m=- ,(5)(6)yy = ,(6)0y =图34 图35编写微分方程函数文件ddlzfun.m 如图34;再编写解微分方程的主程序ddlz.m 如图35;运行结果如图36.在图36中按下旋转按钮,用鼠标拖动图形转动后如图37.改变参量,例如令E=0、B=2,所得结果如图38所示.图36 图37 图38解微分方程的主程序第七行,y(:,1)是指矩阵y 的第一列的所有的元,即所有的(1)y ,这是冒号“:”的一种功能.同样y(:,3)是指所有的(3)y .。