目录
第1章MATLAB概述 1
1.1熟悉MATLAB开发环境 1
1.2使用Notebook 2
1.3使用MATLAB的帮助 3
1.4自我练习 3
第2章MATLAB基本运算 4
2.1向量的运算 4
2.2矩阵和数组的运算 4
2.3字符串和日期型数组的操作 5
2.4多项式的运算 6
2.5元胞数组和结构体 6
2.6自我练习 7
第3章数据的可视化 8
3.1绘制二维曲线并标注文字 8
3.2在同一窗口中绘制多条曲线 8
3.3绘制特殊图形 9
3.4绘制三维图形 10
3.5自我练习 11
第4章符号运算 12
4.1符号表达式的创建和算术运算 12
4.2符号表达式的运算 12
4.3符号表达式的微积分和积分变换 13
4.4符号方程的求解 14
4.5自我练习 14
第5章程序设计和M文件 15
5.1使用函数调用并调试程序 15
5.2使用M脚本和M函数文件 15
5.3使用函数句柄和匿名函数进行数值分析 17
5.4自我练习 17
第1章MATLAB概述1.1熟悉MATLAB开发环境1.MATLAB的启动
⑴单击Windows的开始菜单,选择“程序”→“MATLAB”→“R2006b”→“MATLABR2006b”
⑵单击桌面上的MATLAB快捷方式图标
2.MATLAB的窗口布局
⑴使命令窗口独立:
①选择菜单“Desktop”→“UndockCommandWindow”
②单击“CommandWindow”右上角的展开按钮
③单击还原按钮可使命令窗口恢复到原位置
⑵创建不同的新文件
3.使用命令窗口
a=[12;34],b=1/3,c=a*b,d='hello',e=d+1
a=12
34
b=0.3333
c=0.33330.6667
1.00001.3333
d=hello
e=105102109109112
(1)使用标点符号来修改命令行
%添加注释
c=a+b %c为矩阵a+b的和
c=1.33332.3333
3.33334.3333
;不显示计算结果
a=[12;34];
…续行
d='hell...
o'
???Error:AMATLABstringconstantisnotterminatedproperly.
,用作数组元素的分隔
a=[12;34]
a=12
34
(2)使用操作键
↑:向前调回已输入过的命令;
↓:向后调回已输入过的命令;
Esc:清除当前行的全部内容。
(3)使用format设置数值的显示格式
formatlong:显示15位长格式
formatlong;c
c=0.3333333333333330.666666666666667
1.0000000000000001.333333333333333
formatrat:显示近似有理式格式
formatrat;c
c=1/32/3
14/3
(4)设置命令窗口的外观
①选择“File”→“Preference”
②选择对话框左栏的“Fonts”,将字体设置为宋体
③单击对话框左栏的“CommandWindow”,设置“NumericFormat”栏为“formatshort”和“Numericdisplay”为“compact”
(5)使用控制命令
clc %清空命令窗口的显示内容
beep %发出beep的声音
4.历史命令窗口
⑴创建M文件:在历史命令窗口中选择前5行命令,单击鼠标右键出现快捷菜单“CreateM-File”,则出现M文件编辑/调试器窗口,窗口中已有所选择的命令行,在文件中添加前两行注释:
%sy1_1
%基本操作
保存该文件名为“sy1_1.m”
⑵创建快捷方式:选择两行命令
formatlong;c
单击鼠标右键出现快捷菜单选择“CreateShortcut”,则会出现“ShortcutEditor”对话框。在“Label”框中输入快捷方式的名称,单击Save按钮。
5.工作空间窗口
⑴创建新变量:单击工作空间窗口工具栏的新建变量按钮,或选择菜单“File”→“New”→“Variable”
⑵保存变量:在工作空间中选择需要保存的变量名,然后单击保存按钮,出现“SavetoMAT-File”对话框,保存为MAT文件“sy1_1.mat”
⑶使用“who”和“whos”命令查看各变量
⑷使用“clear”命令删除变量b
⑸使用菜单“View”→“Choosecolumns”→“Mean”查看a各列的平均值
6.M文件编辑/调试器窗口
⑴创建空白M文件:单击新建图标或选择菜单“File”→“New”→“M-file”
⑵创建单元:选择菜单“Cell”→“EnabledCellMode”,出现单元工具栏,使用“%%”创建单元。单击Ctrl+Enter可以运行光标所在单元。
7.当前目录浏览器窗口
⑴打开文件:在当前目录浏览器窗口右击文件“sy1_1.m”,选择“Open”
⑵运行M文件:用鼠标右击“sy1_1.m”文件,在快捷菜单中选择“Run”
⑶查找文件:单击查找按钮,出现查找文件对话框
⑷将文件夹以图示显示
⑸使用what,dir,which命令查看当前目录信息
⑹使用type命令查看“sy1_1.m”文件的内容
8.修改搜索路径
单击菜单“File”→“SetPath”,打开设置路径对话框
9.数组编辑器窗口
⑴编辑变量:双击打开变量a,在图中添加第一行第三列为6,则第二行第三列自动添0
⑵数据绘图:
方法一:使用菜单,在工作空间浏览器窗口和数组编辑器窗口中都可以选择“Graphics”菜单,在下拉菜单中选择“PlotallColumns”。
方法二:使用工具栏,选择工具栏中的绘图按钮,在选项中选择要绘制的曲线类型。
1.2使用Notebook1.安装Notebook
notebook–setup
2.在Word中显示MATLAB命令
⑴定义输入单元:选择1、2行命令,然后选择菜单“Notebook”→“DefineInputCell”定义输入单元;选择后3行命令,选择菜单“Notebook”→“EvaluateCell”,直接定义输入单元并运行显示输出单元。
a=[12;34],b=1/3,c=a*b,d='hello',e=d+1
a=12
34
b=1/3
c=1/32/3
14/3
d=hello
e=105102109109112
⑵定义输入单元组:选择两个输入单元后,选择菜单“Notebook”→“GroupCells”,就将两个输入单元组成单元组。
1.3使用MATLAB的帮助1.使用帮助命令
help
helpsin
lookforsin
2.使用帮助导航/浏览器窗口
⑴通过“Contents选项”
⑵通过“Index”面板查找
⑶通过“Search”面板查找
3.使用Demos
demomatlabgraphics
1.4自我练习
1)在命令窗口中输入以下命令并使用who和whos命令查看变量信息,在数组编辑器窗口中查看变量内容,并用format将x和y显示为指数形式。
x=0:2:10,y=sqrt(x)
x=0246810
y=01393/98522158/8813363/1189721/228
2)在命令窗口中输入以下命令,将两个变量保存到exe1.mat文件中,并将两行命令保存为exe1.m文件,使用which命令查看文件信息,将exe1.m文件设置到搜索路径后,在命令窗口中运行exe1文件。
a=[12;34],b=[11;22]
a=12
34
b=11
22
第2章MATLAB基本运算2.1向量的运算1.行向量的创建
t1=0:10;t2=linspace(0,20,21);
2.行向量的计算
formatshort;ft1=20*exp(-0.5*t1).*sin(2*t1)
ft1=011.0303-5.5682-1.24692.6779-0.8931-0.53430.5983-0.1055-0.16690.1230
3.关系运算
ff=ft1>0,ft=ft1.*ff
ff=01001001001
ft=011.0303002.6779000.5983000.1230
4.逻辑运算
tt=(t1<=pi)|((t1>=2*pi)&(t1<=3*pi)),ft=ft1.*tt
tt=11110001110
ft=011.0303-5.5682-1.24690000.5983-0.1055-0.16690
2.2矩阵和数组的运算1.创建矩阵
a=magic(4),b=eye(3)
a=162313
511108
97612
414151
b=100
010
001
2.生成子矩阵块
c=a(1:3,1:3),c=a([1:3;5:7;9:11])'
l1=logical([111]);l2=logical([111]);a(l1,l2)
c=1623
51110
976
c=1623
51110
976
ans=1623
51110
976
3.矩阵的函数运算
det(a),rot90(b),inv(c),inv(b),max(a)
ans=0
ans=001
010
100
ans=0.0294-0.06620.0956
-0.4412-0.50741.0662
0.47060.6912-1.2206
ans=100
010
001
ans=16141513
4.矩阵和数组的算术运算
b*c,b.*c,b/c,b./c,c^2,c.^2,exp(b),expm(b)
ans=1623
51110
976
ans=1600
0110
006
ans=0.0294-0.06620.0956
-0.4412-0.50741.0662
0.47060.6912-1.2206
ans=0.062500
00.09090
000.1667
ans=2937586
225201185
233137133
ans=25649
25121100
814936
ans=2.71831.00001.0000
1.00002.71831.0000
1.00001.00002.7183
ans=2.718300
02.71830
002.7183
5.复数矩阵
d=b+c*i,abs(d),d',d.'
d=1.0000+16.0000i0+2.0000i0+3.0000i
0+5.0000i1.0000+11.0000i0+10.0000i
0+9.0000i0+7.0000i1.0000+6.0000i
ans=16.03122.00003.0000
5.000011.045410.0000
9.00007.00006.0828
ans=1.0000-16.0000i0-5.0000i0-9.0000i
0-2.0000i1.0000-11.0000i0-7.0000i
0-3.0000i0-10.0000i1.0000-6.0000i
ans=1.0000+16.0000i0+5.0000i0+9.0000i
0+2.0000i1.0000+11.0000i0+7.0000i
0+3.0000i0+10.0000i1.0000+6.0000i
2.3字符串和日期型数组的操作1.字符串合并
s1='s^2',s2='s+1',ss=strcat(s1,'+',s2)
s1=s^2
s2=s+1
ss=s^2+s+1
2.执行字符串
s=5,eval(ss)
s=5
ans=31
3.将字符串逆序排列
s2='hello';n=length(s2),ss2=[s2(n),s2(n-1),s2(n-2),s2(n-3),s2(n-4)]
n=5
ss2=olleh
4.字符串与数值的转换
abs(s2)
ans=104101108108111
5.将日期以不同格式显示
d=datestr('5/1/2007'),d1=datenum(d),
p=['Thisyearis',num2str(year(d))]
d=01-May-2007
d1=733163
p=Thisyearis2007
2.4多项式的运算1.计算多项式的乘积
p1=[11];p2=[145];p=conv(p1,p2)
p=1595
2.计算多项式的根并进行部分分式展开
pp=roots(p2),[rr,pr,kr]=residue(p1,p2)
pp=-2.0000+1.0000i
-2.0000-1.0000i
rr=0.5000+0.5000i
0.5000-0.5000i
pr=-2.0000+1.0000i
-2.0000-1.0000i
kr=[]
3.计算多项式的微分
pd=polyder(p),polyval(p,3)
pd=3109
ans=104
4.多项式的拟合
G=[1-5-17129-180];x=0:20;y=polyval(G,x);
y0=0.1*randn(1,21);y1=y+y0,G1=polyfit(x,y1,4)
y1=1.0e+005*
-0.0018-0.0007-0.0001-0.00000.00000.00040.00200.00580.01300.02520.04410.07170.11020.16200.22990.31680.42590.56060.72450.92161.1560
G1=1.0000-4.9997-17.0030129.0151-180.0143
5.多项式的插值
s=interp1(x,y,5.5),s1=interp1(x,y1,5.5)
s=119
s1=118.9830
2.5元胞数组和结构体1.创建结构体
student(1)=struct('name','John','Id','20030115','scores',[85,96,74,82,68])
student(2)=struct('name','Rose','Id','20030102','scores',[95,93,84,72,88])
student(3)=struct('name','Billy','Id','20030117','scores',[72,83,78,80,83])
student=1x3structarraywithfields:
name,Id,scores
student=1x3structarraywithfields:
name,Id,scores
student=1x3structarraywithfields:
name,Id,scores
2.显示结构体内容
all_s=[student(1).scores;student(2).scores;student(3).scores]
average_s=mean(all_s)
all_s=8596748268
9593847288
7283788083
average_s=84.000090.666778.666778.000079.6667
3.修改结构体元素内容
student=setfield(student,{2},'scores',{2},73)
student(2).scores(2)=73
student(2)
student=1x3structarraywithfields:
{name,Id,scores
student=1x3structarraywithfields:
name,Id,scores
ans=name:'Rose'
Id:'20030102'
scores:[9573847288]
4.将结构体转换为元胞数组
student_cell=struct2cell(student)
student_cell(:,:,1)=
{'John','20030115',[1x5double]}
student_cell(:,:,2)=
{'Rose','20030102',[1x5double]}
student_cell(:,:,3)=
'Billy','20030117',[1x5double]
5.创建元胞数组
average={'平均成绩',average_s}
average='平均成绩'[1x5double]
average(1)={'平均成绩'}
average='平均成绩'[1x5double]
average(2)={average_s}
average='平均成绩'[1x5double]
average{1}='平均成绩';
average{2}=average_s
average='平均成绩'[1x5double]
2.6自我练习
1)将实验2中的魔方阵a按照列降序排列,并计算其平均值。
2)将实验3中的字符串s1='s^2',s2='s+1'进行比较,并将s1和s2构成一个矩阵,然后将该矩阵中的字符's'替换成'x'。
3)根据实验4的p=(s+1)(s2+4s+5),计算p(x)=0时的根,并计算p(x)除以(s+1)的结果。
第3章数据的可视化3.1绘制二维曲线并标注文字1.使用plot函数绘制曲线
t=0:0.1:10;y1=0.01*t.^2;y2=exp(-t).*sin(2*t);plot(t,y1,'r:')
holdon;plot(t,y2,'b-*');y2max=max(y2);plot([0,10],[y2max,y2max])
2.设置坐标轴和分隔线
gridon;axis([0,10,-1,1])
3.添加图形文字标注
title('y_{1}=0.1t^{2}和y_{2}=e^{-t}sin(2t)曲线图')
legend('y1','y2',4)
annotation('textarrow',[0.5,0.5],[(2-y2max)/2+0.1,(2-y2max)/2],'string',y2max)
ans=254.0645
4.使用鼠标获取图形中的数据
[x,y]=ginput(1)
x=3.8754
y=0.2772
5.使用图形窗口
①添加曲线②添加标注③修改图形④隐藏曲线⑤添加子图⑥使用“Tool”菜单
3.2在同一窗口中绘制多条曲线1.第一个子图绘制图形
t=0:0.1:2*pi;subplot(311);plot(sin(t),cos(t));axisequal
2.第二个子图绘制复数数组的图形
z=t+2*cos(t)*i;subplot(3,1,2);plot(z,'r:');axis([02*pi-22])
3.第三个子图绘制矩阵的图形
subplot(3,1,3);[x,y]=meshgrid(t);z=sin(x).*cos(y);plot(t,z);axisimage
4.保存图形文件3.3绘制特殊图形1.使用极坐标绘制螺旋线
figure(1);t=0:0.1:8*pi;polar(t,t)
2.绘制离散数据的火柴杆图
figure(2);t=0:0.5:20;y=exp(-0.1*t).*sin(t);stem(t,y)
3.绘制向量的罗盘图
figure(3);thera=[0pi/6pi/4pi/3pi/2pipi*2/3];
rho=[110515202515];z=rho.*exp(i*thera);compass(z)
4.使用绘图编辑工具栏3.4绘制三维图形1.绘制三维饼形图
x=[1231];[xmax,n]=max(x);explode=zeros(1,4);
explode(n)=1;pie3(x,explode)
2.使用三维网线图绘制平面
x=-5:0.5:5;y=0:0.5:4;[X,Y]=meshgrid(x,y);Z=5*ones(size(X));
mesh(X,Y,Z);colormap('hot');colorbar
3.绘制三维表面图
x=-4:4;[X,Y]=meshgrid(x);Z=5*X.^2-Y.^2;surfc(X,Y,Z);view([60,60])
4.使用图形窗口设置属性
1)使用照相工具栏
2)修改索引色图
3.5自我练习
1)使用plot函数分别绘制矩阵A=[1234;1010;1223]、A'、A(:,2)和A(1,:)的数据图形。
2)在同一图形窗口中绘制函数及其包络线图形,t的范围为0~2。
3)绘制实验4中z=5x2-y2的三维曲线图。
第4章符号运算4.1符号表达式的创建和算术运算1.创建符号常量和变量
a=sym(1/3);b=sym('thera')
b=thera
2.对符号常量使用不同的显示
a=sym(1/3,'f'),a1=sym(1/3,'r'),b=sym('thera','real'),b1=sym('thera','positive')
a='1.5555555555555'*2^(-2)
a1=1/3
b=thera
b1=thera
3.不同类型对象的转换
da=double(a),da1=double(a1);va=vpa(a,15),f=sym('1/3'),double(f),db=double(b)
da=0.3333
va=.333333333333333
f=1/3
ans=0.3333
???Errorusing==>sym.doubleat25
DOUBLEcannotconverttheinputexpressionintoadoublearray.
Iftheinputexpressioncontainsasymbolicvariable,usetheVPAfunctioninstead.
4.创建符号矩阵
d=[aa1;bb1],dt=triu(d),dc=cos(d)
d=['1.5555555555555'*2^(-2),1/3]
[thera,thera]
dt=['1.5555555555555'*2^(-2),1/3]
[0,thera]
dc=[cos(6004799503160661/18014398509481984),cos(1/3)]
[cos(thera),cos(thera)]
4.2符号表达式的运算1.创建符号表达式
symsxuv;f=x^3+5*x^2+7*x+3;g=2*u/(u+v);
2.化简符号表达式
fh=horner(f),ff=factor(f),fs=simple(f)
fh=3+(7+(5+x)*x)*x
ff=(x+3)*(x+1)^2
fs=(x+3)*(x+1)^2
3.确定符号自由变量
var=findsym(g,2),v1=var(1)
var=v,u
v1=v
4.复合函数
fg=compose(f,g),gf=compose(g,f),gf1=compose(g,f,var(3),'x'),gf2=compose(g,f,'t')
fg=8*u^3/(u+v)^3+20*u^2/(u+v)^2+14*u/(u+v)+3
gf=2*u/(u+x^3+5*x^2+7*x+3)
gf1=2*(x^3+5*x^2+7*x+3)/(x^3+5*x^2+7*x+3+v)
gf2=2*u/(u+t^3+5*t^2+7*t+3)
5.使用符号函数计算器
funtool
4.3符号表达式的微积分和积分变换1.创建符号表达式
symsxyta;f=(x^2+y^2)^(x*y);g=sin(1/x);
2.计算极限
fxy=limit(limit(f,'y',1),'x',1),fxy0=limit(f)
fxy=2
fxy0=1
3.计算微积分
gdf1=diff(g),gdf2=diff(g,x,2),gint=int(g),gint1=int(g,1,pi)
gdf1=-cos(1/x)/x^2
gdf2=-sin(1/x)/x^4+2*cos(1/x)/x^3
gint=sin(1/x)*x-cosint(1/x)
gint1=-sin(1)+cosint(1)+sin(1/pi)*pi-cosint(1/pi)
4.计算级数求和
gsum=symsum(g,1,10)
gsum=sin(1)+sin(1/2)+sin(1/3)+sin(1/4)+sin(1/5)+sin(1/6)
+sin(1/7)+sin(1/8)+sin(1/9)+sin(1/10)
5.计算积分变换
p=exp(-x^2);q=sin(a*t);g=sin(1/x);
pf=fourier(f),ql=laplace(g),gf=fourier(f),gl=laplace(g)
pf=fourier((x^2+y^2)^(x*y),x,w)
ql=laplace(sin(1/x),x,s)
gf=fourier((x^2+y^2)^(x*y),x,w)
gl=laplace(sin(1/x),x,s)
4.4符号方程的求解1.解符号方程
symsxyz;eqn1='sin(1/x)=1';eqn21='x+y+z=10';eqn22='x-2*y+z';eqn23='2*x-y=-4';x1=solve(eqn1),[x2,y2,z2]=solve(eqn21,eqn22,eqn23)
x1=2/pi
x2=-1/3
y2=10/3
z2=7
2.解微分方程
y1=dsolve('Dy=5'),y21=dsolve('D2y-Dy=1'),y22=dsolve('D2y-Dy=1','y(0)=1','y(1)=1')
y1=5*t+C1
y21=exp(t)*C1-t+C2
y22=exp(t)/(exp(1)-1)-t+(exp(1)-2)/(exp(1)-1)
4.5自我练习
1)创建符号表达式,使用排版形式显示,并进行部分分式展开。
2)使用taolor级数计算器窗口对实验3中的进行级数逼近。
3)解微分方程,。
第5章程序设计和M文件5.1使用函数调用并调试程序1.打开M文件编辑/调试器窗口
⑴方法:单击MATLAB桌面上的新建图标,或者单击菜单“File”→“New”→“M-File”
⑵M文件编辑/调试器窗口边框的作用:
①左边框是行号,如果程序出错可根据出错提示中的行号查找出错语句;
②左边框的“-”处可以设置断点,单击“-”出现红色的圆点就是断点;
③右边框是程序的提示,将鼠标放置其上可以看到相应的提示和警告信息。
2.编写M函数文件
编写程序判断输入参数是否为“水仙花数”。“水仙花数”是一个三位数,各位数的立方和等于该数本身。如果是“水仙花数”则函数输出1,否则输出0。
functiony=sy511(x)
%sy511判断是否水仙花数
%y判断结果,是则y=1,否则y=0
a=fix(x/100);
b=fix(rem(x,100)/10);
c=rem(x,10);
ifx==(a^3+b^3+c^3)
y=1;
else
y=0;
end
将函数文件保存为“sy511.m”,在命令行中调用该函数:
y=sy511(455)
3.添加主函数
functionsy51(x)
%SY51判断水仙花数
ifx>100&&x<=999
y=sy511(x)
else
return
end
ify==1
disp('YES')
else
disp('NO')
end
4.调试程序
(1)单步运行
(2)单步运行进函数
(3)设置断点
(4)单元调试
5.2使用M脚本和M函数文件