Matlab Ra ch1入门.docx
《Matlab Ra ch1入门.docx》由会员分享,可在线阅读,更多相关《Matlab Ra ch1入门.docx(42页珍藏版)》请在冰豆网上搜索。
![Matlab Ra ch1入门.docx](https://file1.bdocx.com/fileroot1/2023-1/21/13bfab0d-e753-4a8e-af7b-8a35da0da136/13bfab0d-e753-4a8e-af7b-8a35da0da1361.gif)
MatlabRach1入门
10一面向复数设计的运算——MATLAB特点之一
MATLAB的所有运算都是定义在复数域上的。
这样设计的好处是:
在进行运算时,不必像其他程序语言那样把实部、虚部分开处理。
为描述复数,虚数单位用预定义变量i或j表示。
复数
直角坐标表示和极坐标表示之间转换的MATLAB指令如下。
real(z)给出复数
的实部
。
imag(z)给出复数
的虚部
。
abs(z)给出复数
的模
。
angle(z)以弧度为单位给出复数
的幅角
。
【例1.3-4】复数
表达,及计算
。
本例演示:
正确的复数输入法;涉及复数表示方式的基本指令。
(1)经典教科书的直角坐标表示法
z1=4+3i%合法,但建议少用或不用
z1=
4.0000+3.0000i
〖说明〗
●本书建议读者不要使用这种输入格式。
因为这种书写格式,只适用于“数值标量”复数,而不适用于“数值矩阵”。
●在这种书写格式中,4i是一个完整的虚数,在4和i之间不许“空格”存在。
(2)采用运算符构成的直角坐标表示法和极坐标表示法
z2=1+2*i%运算符构成的直角坐标表示法
z3=2*exp(i*pi/6)%运算符构成的极坐标表示法
z=z1*z2/z3
z2=
1.0000+2.0000i
z3=
1.7321+1.0000i
z=
1.8840+5.2631i
(3)复数的实虚部、模和幅角计算
real_z=real(z)
image_z=imag(z)
magnitude_z=abs(z)
angle_z_radian=angle(z)%弧度单位
angle_z_degree=angle(z)*180/pi%度数单位
real_z=
1.8840
image_z=
5.2631
magnitude_z=
5.5902
angle_z_radian=
1.2271
angle_z_degree=
70.3048
【例1.3-5】图示复数
的和(配图1.3-2)。
本例演示:
MATLAB的运算在复数域上进行;指令后“分号”的作用;复数加法的几何意义;展示MATLAB的可视化能力(让读者感受,但不要求理解)。
z1=4+3*i;z2=1+2*i;%在一个物理行中,允许输入多条指令。
%但各指令间要用“分号”或“逗号”分开。
%指令后采用“分号”,使运算结果不显示。
z12=z1+z2
%以下用于绘图
clf,holdon%clf清空图形窗。
逗号用来分隔两个指令。
plot([0,z1,z12],'-b','LineWidth',3)
plot([0,z12],'-r','LineWidth',3)
plot([z1,z12],'ob','MarkerSize',8)
holdoff,gridon,
axisequal
axis([0,6,0,6])
text(3.5,2.3,'z1')
text(5,4.5,'z2')
text(2.5,3.5,'z12')
xlabel('real')
ylabel('image')
shg
z12=
5.0000+5.0000i
图1.3-2两个复数相加
【例1.3-6】用MATLAB计算
能得到–2吗(配图1.3-3)?
本例演示:
MATLAB运算定义在复数域的实质;指令后“分号”抑制运算结果的显示;MATLAB的方根运算规则;更复杂指令的表示方式;展现MATLAB的图形表现力。
(对于本例指令,读者能有体验就可,不必强求理解。
)
(1)直接计算时,得到处于第一象限的方根。
a=-8;
r_a=a^(1/3)%求3次根
r_a=
1.0000+1.7321i
(2)
的全部方根计算如下
%先构造一个多项式
p=[1,0,0,-a];%p是多项式
的系数向量
%指令末尾的“英文状态分号”使该指令运行后,不显示结果。
R=roots(p)%求多项式的根
R=
-2.0000
1.0000+1.7321i
1.0000-1.7321i
(3)图形表示
MR=abs(R
(1));%计算复根的模
t=0:
pi/20:
2*pi;%产生参变量在0到2*pi间的一组采样点
x=MR*sin(t);
y=MR*cos(t);
plot(x,y,'b:
'),gridon%画一个半径为R的圆
%注意“英文状态逗号”在不同位置的作用
holdon
plot(R
(2),'.','MarkerSize',30,'Color','r')%画第一象限的方根
plot(R([1,3]),'o','MarkerSize',15,'Color','b')%画另两个方根
axis([-3,3,-3,3]),axissquare%保证屏幕显示呈真圆
holdoff
图1.3-3(-8)的全部三次方根分布
〖说明〗
●本例有助于理解MATLAB的计算特点。
●对复数进行方根运算时,MATLAB只给出处于“第一象限”的那个根。
10二面向数组设计的运算——MATLAB特点之二
在MATLAB中,标量数据被看作
的数组(Array)数据。
所有的数据都被存放在适当大小的数组中。
为加快计算速度(运算的向量化处理),MATLAB对以数组形式存储的数据设计了两种基本运算:
一种是所谓的数组运算;另一种是所谓的矩阵运算。
在此仅以算例展示MATLAB的计算特点,更详细的叙述请见第3章。
【例1.3-7】实数数组
的“一行”输入法。
本例演示:
二维数组的最基本、最常用输入法;二维数组输入的三大要素。
(1)在键盘上输入下列内容
AR=[1,3;2,4]
(2)按[Enter]键,指令被执行。
(3)在指令执行后,MATLAB指令窗中将显示以下结果:
AR=
13
24
〖说明〗
在MATLAB中,不必事先对数组维数及大小做任何说明,内存将自动配置。
二维数组输入的三大要素:
数组标识符“[]”;元素分隔符空格或逗号“,”;数组行间分隔符分号“;”或“回车键”。
注意:
所有标点符号都是“英文状态的符号”。
●MATLAB对字母大小写是敏感的。
比如本例中的数组赋给了变量AR,而不是Ar,aR,或ar。
在全部键入一个指令行内容后,必须按下[Enter]键,该指令才会被执行。
请读者务必记住此点。
出于叙述简明的考虑,本书此后将不再重复提及此操作。
【例1.3-8】实数数组
的“分行”输入法。
AI=[5,7
6,8]
AI=
57
68
〖说明〗
●本例采用这种输入法是为了视觉习惯。
当然,对于较大的数组也可采用此法。
●在这种输入方法中,“回车”符用来分隔数组中的行。
【例1.3-9】对复数数组
进行求实部、虚部、模和幅角的运算。
本例演示:
复数数组的生成;MATLAB指令对数组元素“并行操作”的实质。
(1)创建复数数组
AR=[1,3;2,4];AI=[5,7;6,8];
A=AR-AI*i%形成复数矩阵
A=
1.0000-5.0000i3.0000-7.0000i
2.0000-6.0000i4.0000-8.0000i
(2)求复数数组的实部和虚部
A_real=real(A)
A_image=imag(A)
A_real=
13
24
A_image=
-5-7
-6-8
(3)求复数数组中各元素的模和幅角——循环法(笨拙!
)
form=1:
2
forn=1:
2
Am1(m,n)=abs(A(m,n));
Aa1(m,n)=angle(A(m,n))*180/pi;%以度为单位计算幅角
end
end
Am1,Aa1
Am1=
5.09907.6158
6.32468.9443
Aa1=
-78.6901-66.8014
-71.5651-63.4349
(4)求复数数组中各元素的模和幅角——直接法
Am2=abs(A)
Aa2=angle(A)*180/pi
Am2=
5.09907.6158
6.32468.9443
Aa2=
-78.6901-66.8014
-71.5651-63.4349
〖说明〗
●函数real,imag,abs,angle是同时、并行地作用于数组的每个元素。
对4个元素运算所需的时间大致与对单个元素所需时间相同。
这有利于运算速度的提高。
这是“向量化”运算的一种形式。
●本例给出了循环法求各元素模和幅角的指令。
这是很不有效的计算方法。
对于MATLAB以外的许多编程语言来说,可能不得不采用“循环”处理方式来解本例。
记住:
对于MATLAB来说,应该尽量摒弃“循环”处理,而采用“向量化”处理方式。
【例1.3-10】画出衰减振荡曲线
,
的取值范围是
(配图1.3-4)。
本例演示:
展示数组运算的优点;展示MATLAB的可视化能力。
t=0:
pi/50:
4*pi;%定义自变量t的取值数组
y=exp(-t/3).*sin(3*t);%计算与自变量相应的y数组。
注意:
乘法符前面的小黑点。
plot(t,y,'-r','LineWidth',2)%绘制曲线
axis([0,4*pi,-1,1])
xlabel('t'),ylabel('y')
图1.3-4衰减振荡曲线
〖说明〗
●本例第二条指令中的“.*”符号表示乘法是在两个数组相同位置上的元素间进行的。
本书把这种乘法称为“数组乘”。
数组乘的引入,不但使得程序简洁自然,而且避免了耗费机时的“循环计算”。
关于数组运算的详细叙述请见第3章。
●本例第二条指令是典型的“向量化”处理形式。
本书作者建议读者,只要可能,应尽量采用“向量化”运算形式。
【例1.3-11】复数矩阵
的生成,及计算
矩阵乘积(A取自算例1.3-9)。
本例演示:
MATLAB矩阵运算指令的简捷性。
B=[3+2i,2+6i;5+3*i,4-2*i]%复数数组的又一种输入方式
%注意标点符号的作用
C=A*B%矩阵乘法
B=
3.0000+2.0000i2.0000+6.0000i
5.0000+3.0000i4.0000-2.0000i
C=
49.0000-39.0000i30.0000-38.0000i
62.0000-42.0000i40.0000-40.0000i
〖说明〗
当数组被赋予“变换”属性时,二维数组就被称为矩阵。
只有当两个矩阵的“内维大小相等”时,矩阵乘法才能进行。
本例中,矩阵A的列数与矩阵B的行数相等,所以可以进行A乘B。
从表达方式看,“矩阵相乘”的指令格式与“标量相乘”指令格式一样。
在其他编程语言中,矩阵乘法不得不依赖“循环”进行。
MATLAB之所以能把矩阵运算表达得像标准“线性代数”那样简洁易读、自然流畅,那是由于MATLAB的设计者采用了“面向对象”编程技术。
.2CommandWindow操作要旨
前一节借助算例,使读者对MATLAB指令窗的使用方法有了一个直观的感受。
本节将在上节的基础上对控制指令窗的指令和操作进行较系统的归纳,以便读者更全面地了解MATLAB,更方便地使用MATLAB。
.2.1指令窗的显示方式
10一默认的输入显示方式
从MATLAB7.0起,指令窗中的字符、数值等采用更为醒目的分类显示:
对于输入指令中的if,for,end等控制数据流的MATLAB关键词自动地采用蓝色字体显示。
对于输入指令中的非控制指令、数码,都自动地采用黑色字体显示。
输入的字符串自动呈现为紫色字体。
10二运算结果的显示
在指令窗中显示的输出有:
指令执行后,数值结果采用黑色字体输出;而运行过程中的警告信息和出错信息用红色字体显示。
运行中,屏幕上最常见到的数字输出结果由5位数字构成。
这是“双精度”数据的默认输出格式。
用户不要误认为,运算结果的精度只有5位有效数字。
实际上,MATLAB的数值数据通常占用64位(Bit)内存,以16位有效数字的“双精度”进行运算和输出。
MATLAB为了比较简洁、紧凑地显示数值输出,才默认地采用formatshortg格式显示出5位有效数字。
用户根据需要,可以在MATLAB指令窗中,直接输入相应的指令,或者在菜单弹出框中进行选择,都可获得所需的数值计算结果显示格式。
MATLAB数值计算结果显示格式的类型见表1.4-1。
表1.4-1数据显示格式的控制指令
指令
含义
举例说明
format
formatshort
通常保证小数点后四位有效,最多不超过7位;对于大于1000的实数,用5位有效数字的科学记数形式显示。
314.159被显示为314.1590;
3141.59被显示为3.1416e+003
formatlong
小数点后15位数字表示
3.141592653589793
formatshorte
5位科学记数表示
3.1416e+00
formatlonge
15位科学记数表示
3.14159265358979e+00
formatshortg
从formatshort和formatshorte中自动选择最佳记数方式
3.1416
formatlongg
从formatlong和formatlonge中自动选择最佳记数方式
3.14159265358979
formatrat
近似有理数表示
355/113
formathex
十六进制表示
400921fb54442d18
format+
显示大矩阵用。
正数、负数、零分别用+,-,空格表示。
+
formatbank
(金融)元、角、分表示
3.14
formatcompact
显示变量之间没有空行
formatloose
在显示变量之间有空行
〖说明〗
formatshort显示格式是默认的显示格式。
该表中实现的所有格式设置仅在MATLAB的当前执行过程中有效。
10三显示方式的永久设置
用户根据需要,可以对指令窗的字体风格、大小、颜色和数值计算结果显示格式进行设置。
设置方法是:
选中{File:
Preferences}下拉菜单项,引出一个参数设置对话框;在此弹出对话框的左栏选中“Font&Colors”,对话框的右边就出现相应的选择内容;用户根据需要和对话框提示对数据显示格式,或字体等进行选择;最后,通过点击[OK]键,便完成了设置。
注意:
该设置立即生效,并且这种设置将被永久保留,即这种设置不因MATLAB关闭和开启而改变,除非用户进行重新设置。
在此还要指出,对于数值显示格式的设置,也可以直接在指令窗中,通过指令的运作进行。
但这样的设置仅对当前的MATLAB指令窗起作用,一旦MATLAB关闭,这种设置也就随之失效。
.2.2指令行中的标点符号
通过前面算例,读者可能已对标点符号的作用有所体会。
在此要强调指出:
标点在MATLAB中的地位极其重要。
为此,把各标点的作用归纳成表1.4-2。
表1.4-2MATLAB常用标点的功能
名称
标点
作用
空格
(为机器辨认)用作输入量与输入量之间的分隔符;
数组元素分隔符。
逗号
用作要显示计算结果的指令与其后指令之间的分隔;
用作输入量与输入量之间的分隔符;
用作数组元素分隔符号。
黑点
.
数值表示中,用作小数点;
用于运算符号前,构成“数组”运算符。
分号
;
用于指令的“结尾”,抑制计算结果的显示;
用作不显示计算结果指令与其后指令的分隔;
用作数组的行间分隔符。
冒号
:
用以生成一维数值数组;
用做单下标援引时,表示全部元素构成的长列;
用做多下标援引时,表示那维上的全部元素。
注释号
%
由它“启首”的所有物理行部分被看作非执行的注释
单引号对
''
字符串记述符
圆括号
()
改变运算次序;
在数组援引时用;
函数指令输入宗量列表时用。
方括号
[]
输入数组时用;
函数指令输出宗量列表时用。
花括号
{}
胞元数组记述符;
图形中被控特殊字符括号。
下连符
_
(为使人易读)用作一个变量、函数或文件名中的连字符;
图形中被控下脚标前导符。
续行号
...
由三个以上连续黑点构成。
它把其下的物理行看作该行的“逻辑”继续,以构成一个“较长”的完整指令。
“At”号
@
放在函数名前,形成函数句柄;
匿名函数前导符;
放在目录名前,形成“用户对象”类目录。
〖说明〗为确保指令正确执行,以上符号一定要在英文状态下输入。
因为MATLAB不能识别含有中文标点的指令。
.2.3指令窗的常用控制指令
表1.4-3常见的通用操作指令
指令
含义
指令
含义
cd
设置当前工作目录。
exit
关闭/退出MATLAB
clf
清除图形窗
quit
关闭/退出MATLAB
clc
清除指令窗中显示内容
more
使其后的显示内容分页进行
clear
清除MATLAB工作空间中保存的变量
return
返回到上层调用程序;结束键盘模式
dir
列出指定目录下的文件和子目录清单
type
显示指定M文件的内容
edit
打开M文件编辑器
which
指出其后文件所在的目录
〖说明〗
●表1.4-3所列的指令是基本的,它们对MATLAB各版都适用。
●尽管随版本的升级,不断增添着列表中指令的“等价”菜单选项操作或工具条图标操作,但这种“等价”仅对“人机交互”过程而言。
至于这些指令在M文件中的作用仍是不可替代的。
●cd及dir指令的操作响应,可以用MATLAB操作桌面上或当前目录浏览器中的“浏览键(Browser)”替代。
关于当前目录浏览器的使用,请看第1.6节。
●clear清除内存变量的操作,可以等价地在“工作空间浏览器”交互界面中实现。
关于工作空间浏览器的使用,请看第1.7节。
●edit指令的等价操作是:
选择MATLAB操作桌面或指令窗的下拉菜单项{File:
New:
M-file},或点击相应工具条上的
和
图标。
关于M文件编辑器的使用,请看第1.9节。
.2.4指令窗中指令行的编辑
为了操作方便,MATLAB不但允许用户在指令窗中对输入的指令行进行各种编辑和运行,而且允许用户对过去已经输入的指令行进行回调、编辑和重运行。
具体的操作方式见表1.4-4。
表1.4-4MATLAB指令窗中实施指令行编辑的常用操作键
键名
作用
键名
作用
前寻式调回已输入过的指令行
Home
使光标移到当前行的首端
后寻式调回已输入过的指令行
End
使光标移到当前行的尾端
在当前行中左移光标
Delete
删去光标右边的字符
在当前行中右移光标
Backspace
删去光标左边的字符
PageUp
前寻式翻阅当前窗中的内容
Esc
清除当前行的全部内容
PageDown
后寻式翻阅当前窗中的内容
〖说明〗
表1.4-4所列的操作对MATLAB各版均适用。
●事实上,MATLAB把指令窗中输入的所有指令都记录在内存中专门开辟的“指令历史空间(CommandHistory)”中,只要用户对它们不进行专门的删除操作,它们既不会因为用户对指令窗进行“清屏”操作(即运行clc指令)而消失,也不会因用户对“工作空间”进行“清除内存变量”(即运行clear指令)而消失。
●指令窗中输入过的所有指令都被显示在“历史指令浏览器”交互界面中,以供随时观察和调用。
关于“历史指令浏览器”的使用请看第1.5节。
【例1.4-1】指令行操作过程示例。
(1)若用户想计算
的值,那么用户应依次键入以下字符
y1=2*sin(0.3*pi)/(1+sqrt(5))
(2)按[Enter]键,该指令便被执行,并给出以下结果
y1=
0.5000
(3)通过反复按键盘的箭头键,可实现指令回调和编辑,进行新的计算。
若又想计算
,用户当然可以像前一个算例那样,通过键盘把相应字符一个一个“敲入”。
但也可以较方便地用操作键获得该指令,具体办法是:
先用[]键调回已输入过的指令y1=2*sin(0.3*pi)/(1+sqrt(5));然后移动光标,把y1改成y2;把sin改成cos;再按[Enter]键,就可得到结果。
即
y2=2*cos(0.3*pi)/(1+sqrt(5))
y2=
0.3633
〖说明〗
●可以借助“历史指令窗”进行历史指令的再运行,相关内容请看第1.5.1节。
.3CommandHistory历史指令窗
MATLAB所拥有的丰富资源和友善灵活的环境特别适于用来验证一些思想,思考一些问题,和帮助进行创造性思维。
用户可以在MATLAB环境中,边想边做,做做想想,对随时蹦出的思想“火花”可即刻通过计算加以验证。
历史指令窗(CommandHistory)就是为这种应用方式设计的。
.3.1CommandHistory历史指令窗简介
历史指令窗记录着:
每次开启MATLAB的时间,及开启MATLAB后在指令窗中运行过的所有指令行。
该窗不但能清楚地显示指令窗中运行过的所有指令行,而且所有这些被记录的指令行都能被复制,或再运行。
关于历史指令窗的功能详见表1.5-1。
表1.5-1历史指令窗主要应用功能的操作方法
应用功能
操作方法
简捷操作方法
单行或多行指令的复制
点亮单行或多行指令;按鼠标右键引出现场菜单;选中{Copy}菜单项,即可用复合键[Ctrl+V]把它“粘贴”到任何地方(包括指令窗)。
单行指令的运行
点亮单行指令;按鼠标右键引出现场菜单;选中{EvaluateSelection}菜单项,即可在指令窗中运行,并见到相应结果。
鼠标左键双击单行指令。
多行指令的运行
点亮多行指令;按鼠标右键引出现场菜单;选中{EvaluateSelection}菜单项,即可在指令窗中运行,并见到相应结果。
(详见例1.5-1)
把多行指令写成M文件
点亮多行指令;按鼠标右键引出现场菜单;选中{CreateM-File}菜单项,就引出书写着这些指令的M文件编辑调试器;再进行相应操作,即可得所需M文件。
.3.2历史指令的再运行
历史指令的重新调用,既可以采用第1.4.4节所介绍的方法实现,也可以借助历史指令窗进行。
在许多场合,后者显得更为方便、直观。
【例1.5-1】演示如何再运行算例1.3-10中的全部绘图指令。
具体操作过程:
先利用组合操作[Ctrl+鼠标左键]点亮如图1.5-1所示历史指令窗中的那五行