第一节 MATLAB 中的矩阵的输入Word下载.docx
《第一节 MATLAB 中的矩阵的输入Word下载.docx》由会员分享,可在线阅读,更多相关《第一节 MATLAB 中的矩阵的输入Word下载.docx(23页珍藏版)》请在冰豆网上搜索。
a1=linspace(1,100)
%生成一个从1到100的有100个元素的向量
a2=linspace(0,1)
%仍然是有100个元素但是是从0到1的向量
a3=linspace(0,-1)%请与上一个向量进行比较
上面是第一种格式linspace(a,b),它是将a到b等分成100份形成的向量。
第二种格式linspace(a,b,n)中的n为一个正整数,表示是从a到b等分成n份后形成的向量。
例如
a4=linspace(1,100,11)
%从1到100但只形成11个元素的向量
a5=linspace(1,100,10)%自己体会这个命令作用
a6=linspace(0,1,11)'
%加上了“'
”表示转置
a7=linspace(0,-1,10)%自己体会这个命令作用
2命令ones,zeros分别形成元素全为1或全为零的矩阵它也有两种格式。
请观察它们的作用:
ones(6,3)%生成6×
3阶元素全为1的矩阵
ones(5)%生成5阶元素全为1的方阵
zeros(3,6)%生成3×
6阶元素全为零的矩阵
zeros(4)%生成四阶元素全为零的方阵
3命令diag生成对角阵及从矩阵的主对角线生成向量,例如:
diag([1357])%生成了以1357为主对角线的方阵:
ans=
1000
0300
0050
1007
相反如果先定义了一个三阶方阵:
A=[123;
456;
789]
显示:
A=
123
456
789
则命令a8=diag(A)将用A的主对角线生成新的列向量:
a8=
1
5
9
命令eye(n)生成n阶单位方阵,即主对角线上元素为1,其余元素为零的方阵。
例如键入:
A=eye(5)将得到:
A=
10000
01000
00100
00010
00001
第二节MATLAB文件处理
§
1文件编辑
如果要在MATLAB的工作窗定义矩阵,则用鼠标点击屏幕左上方的File选择项,再从中选择New中的M-file项并且用鼠标点击它,就打开了MATLAB文件编辑窗并且可以在此窗中定义MATLAB矩阵了(注意对于已有的文件,可以选择open来打开它,然后对其进行修改)。
在MATLAB文件编辑窗中定义的矩阵与工作窗中定义的方法是完全一样。
并且可以在MATLAB文件编辑窗的菜单中使用菜单命令直接运行。
可以在MATLAB中使用菜单中的“File”中的“Setpath”将当前工作文件夹定义在你正在工作的文件夹。
2MATLAB工作窗中变量值的保存与调用
MATLAB工作窗中的变量在退出MATLAB工作状态后值不能保存,如果需要保存,可以使用命令save将其存储到磁盘上,命令格式有两种:
第一种是用二进制格式来存储。
例如先定义三个矩阵:
A1=[0:
3;
2*ones(4);
4:
-1:
1];
A2=[1324];
A3=zeros(3,1);
生成下列矩阵与向量:
键入:
savefile1A1A2A3
%用二进制格式以文件名file1.mat存储A1,A2,A3
savefile2.mA1A3–ascii
%用ascii码以文件名file2.m存储A1,A3
我们还要注意:
用二进制格式存储的文件连变量名一起存储并可再重新调入时恢复变量的值,而用ASCII码存储的文件只存储了变量的值,而变量名是没有的。
用二进制格式存储的变量,可用命令load调用,调用格式为:
load<
磁盘文件名>
例如,前面用savefile1存储了所有变量A1,A2,A3,调用时只要键入
loadfile1即可。
第三节MATLAB中的矩阵运算
1矩阵运算命令与通常线性代数命令运算的异同
一、MATLAB在运行时是以矩阵为单位进行运算的。
它通常有两种运算,第一种是矩阵运算,运算时满足线性代数中矩阵运算所规定一切运算法则,如加、减、乘,乘方即幂运算(当然运算要符合规定的条件,例如矩阵A与矩阵B相乘,必须A的列数等于B的行数),运算符号:
A+B,A-B,AB(注意“*”不能少)A^n
二、不同之处:
1、与通常矩阵运算不同之处在:
在线性代数中矩阵不能与数相加减,而在MATLAB的矩阵运算中允许矩阵与数相加减。
2、函数命令可以直接作用到矩阵的每一个元素。
3、线性代数中矩阵没有除法,而MATLAB中有矩阵除法,例如:
输入A=[1:
7:
9];
b=[14,32,50]'
;
c=A\b
c=
2
4
4、函数作用到矩阵的每一个元素,例如如果令A=[11/21/3;
1/21/41/8]*pi,即定义
则
三、MATLAB中除法运算的规定与意义:
1、运算定义:
设已经定义好矩阵A与矩阵B,如果矩阵A与矩阵B的行的维数相同,则MATLAB中可以用矩阵A左除矩阵B,即可以令:
X=A\B
如果矩阵A与矩阵B的列的维数相同,则MATLAB中可以用矩阵A右除矩阵B,即可以令:
X=B/A
2、矩阵除法的意义
给出线性方程组AX=B,则X=A给出线性方程组的一个解。
而X=B/A给出了线性方程组XA=B的一个解。
目前我们用MATLAB求线性方程组的解只有三个方法:
当A是可逆方阵时,X=inv(A)*B给出线性方程组AX=B的唯一解。
但是A不可逆时方法失效。
可用命令rref化线性方程组AX=B的增广矩阵为行最简阶梯矩阵方法来求解,但线性方程组可能出现无解(称为“超定”)、唯一解(称为“恰定”)及无穷多解(称为“欠定”)的情形。
无论A是否可逆都可用MATLAB除法求解,并且无论何种情形都是唯一解。
当方程存在唯一解时,三种方法求出的解是一样的。
但是用除法作的解一般精度更高。
方程为“超定”或者“欠定”时解意义则不同。
线性方程组AX=b为欠定时有无穷个解,X=A\b得到其中解分量中零元素为最多的一个特解。
线性方程组AX=b为超定时是无解的,用
X=A\b
得到的是使范数||AX-b||为最小的解。
我们不详细说明这个范数的意义,可理解为使AX-b最接近于零的解。
例如方程组
通解为:
是其中有一个零分量的特解。
输入d=[03250]'
g=A\d
显示g=
1.0e+017*
0.6305
-1.2610
0.6305
再输入h=A*g-d
显示h=32
96
14
因此g不满足A*g=d,只是使A*g-d尽可能接近于零。
2常用的数学运算命令
以下是一些在MATLAB中最常用的数学运算命令(均用小写字母,命令的作用可在MATLAB中用help<
命令>
查询其作用与格式):
一、基本函数运算命令
1、三角函数:
sincostancotseccsc
2、反三角函数:
asinacosatanacotasecacscatan2(四象限反正切)
3、双曲函数:
sinhcoshtanhcothsechcsch
4、反双曲函数:
asinhacoshatanhacothasechacsch
5、复数:
realimagconjangle
6、小数取整:
fix(朝零方向),ceil(朝正无穷方向),floor(朝负无穷方向),round(四舍五入)
7、对数与指数:
log10logexp
8、其它:
sqrtabssignsumprodsolve
二、线性代数运算命令:
1、detinvrankrrefeigcond
行列式求值命令det,矩阵求秩命令rank,求方阵的逆方阵命令,inv求矩阵行最简阶梯阵命令rref,求特征值与特征向量命令eig,求矩阵条件数命令cond
三、多项式运算命令
MATLAB中用向量表示多项式,如a=[12304]表示多项式:
常用的多项式运算命令有:
1、多项式加减法:
在次低的向量前面加零后使其元素个数相同,再按向量加减法运算命令进行。
2、多项式a与多项式b相乘:
c=conv(a,b);
3、多项式a除以多项式b:
[q,r]=deconv(a,b)q是商,r余项)
4、多项式求值:
p1=polyval(a,x)(多项式a在点x处的值)
5、方阵多项式求值:
p2=polyvalm(a,A)(矩阵多项式a在方阵A处的值)
6、多项式求根:
p3=roots(a)(求多项式a的根)
7、多项式微分:
p4=polyder(a)
8、多项式拟合:
p5=polyfit(x,y,n)
例:
x=[11.234.25];
y=x.^3-2*x.^2+3*x-1;
p5=polyfit(x,y,3)
将得出:
p5=1.0000-2.00003.0000-1.0000
四、高等数学中的数值运算命令
在MATLAB数值计算中很少有高等数学中的运算命令,下面只介绍两个:
1、求数值积分:
trapz
2、差分:
diff
MATLAB中也有很多符号运算命令。
但不在本课程中。
在那些符号运算命令中能实现许多高等数学中的运算。
五、显示格式
有formatrat,formatlong,formatshort,formatlongg,formatshortg,
formatlonge,formatshorte,formathex等等。
第四节MATLAB的数组操作
前面我们谈到了MATLAB中有数与矩阵的加减法,这是线性代数中所没有的。
MATLAB中还有许多与高等数学中内容不同的运算。
这些运算对于求解实际问题很有作用,它使编程比其它语言要简单方便得多。
MATLAB中的数组运算就是其它计算机语言中所没有的使编程变得十分简单的运算。
MATLAB中的数组运算只在同阶矩阵中进行。
设A,B是两个已经定义好的同阶矩阵:
则数组运算A.*B,A./B,A.^B的值分别是:
除了前面讲过的数与矩阵的加减法(不算数组运算)外,数与矩阵之间还有下面的数组运算:
从上面叙述可见矩阵与同阶矩阵之间(及数与矩阵之间)的数组运算的定义特点是:
1定义在两个同阶矩阵或数与矩阵之间进行;
2定义方法是前面一项与后面一项用小数点加运算符连结;
3定义的实质是:
当定义的运算在矩阵之间时,是相同位置上的元素进行由运算符规定的运算。
当定义的运算是矩阵与数之间,则是矩阵中的每一个元素与数进行运算符规定的运算。
对于其他计算机语言,这些运算常常要通过双重循环才能完成,而在MATLAB中只要简单地用“.”加运算符即可表示,这是MATLAB特别方便之处。
数组运算及函数运算定义容易记忆与使用,它在编程中十分方便,我们看后面的例。
如果要画函数e-xsinx2+1在区间[0,3]上的图形,操作过程是:
x=0:
0.01:
%定义自变量x在区间[0,3]上的值
y=exp(x).*sin(x.^2)+1%用数组运算计算函数值y
plot(x,y)%作平面上的曲线图。
只用简单三行命令完成了在其他计算机语言中要用很长程序才能完成的程序,这是MATLAB语言非常简便好用的原因。
第五节MATLAB作图
下面介绍MATLAB中的作图命令。
1二维作图命令plot
一、MATLAB二维作图命令最常用的是plot,除作图外,还有如下可控制的操作:
1、一张图上画多条曲线(可以使用hold命令)。
2、一个屏幕上开多个窗口作图(使用subplot命令)。
3、曲线选择线型、颜色(在每条曲线后加,’.b’或者,’color’,[1,0,0.5]等)。
4、标注文字,使用命令:
title(‘字符’)图形标题
xlabel(‘字符’)x轴标注,ylabel(‘字符’)y轴标注,zlabel(‘字符’)z轴标注,
legend(‘字符’,‘字符’,…)可移动标注
text(x,y,(z),‘字符’)在指定坐标标注
gtext(‘字符’)用鼠标在图形中选择地方标注
5、坐标网格线显示与关闭命令grid
二、坐标轴控制(也适用于三维作图)axis
1、坐标轴刻度范围控制axis(xmin,xmax,ymin,ymax(,zmin,zmax))。
2、关闭坐标轴显示开关axis(‘off’)或者axisoff,axis(‘on’)或者axison
3、坐标轴等刻度命令axis(‘equal’)或者axisequal
4、坐标轴等长命令axis(‘square’)或者axissqual
5、使坐标等刻度与等长命令失效命令axis(‘normal’)或者axisnormal
三、下面介绍一个在实际应用中非常有用的命令:
ginput
该命令在三维空间中仍然可用,但效果不如二维空间中那么好。
四、背景色控制命令
figure(‘color’,[r,g,b])三维空间中此命令仍然适用。
五、程序标注
在程序中“%”后的部分用作标注。
六、还有许多二维作图命令,请大家参看有关参考书。
我们仅就使用二维等值线contour命令用于求解线性方程组的例子。
MATLAB二维作图命令contour可以用于求二维超越方程组的数值解。
请看exmaple1.m:
x=[0:
2.4995];
y=[0:
2.4995]'
A=(0*y+1)*sin(x)+y.^2*(0*x+1)+log(5-(0*y+1)*x-y*(0*x+1))-7;
contour(x,y,A,[0,0])
holdon
B=3*(0*y+1)*x+2.^y*(0*x+1)-(5-(0*y+1)*x-y*(0*x+1)).^3+1;
contour(x,y,B,[0,0])
holdoff
此程序用于求方程组:
的数值解。
此方法的优点是:
可以看到图形全貌,可以求出多解情形,可以获极高精度。
练习1:
求曲线
与曲线
在区间[0,]上的所有交点。
练习2:
求方程组
要求将解代入方程后每个方程左方减去右方后的绝对值小于0.00001。
2三维作图命令
一、MATLAB三维作图曲线作图命令最常用的是plot3,contour3。
除作图外,还有如下可控制的操作:
三维曲线作图是对参数式为
作图。
例如螺旋线:
作图命令是
t=[0:
10*pi];
x=cos(t);
y=sin(t);
z=t/2;
plot3(x,y,z)
contour3是三维等值线作图。
二、三维曲面作图
常用的三维曲面作图命令有:
mesh,surf,meshc,meshz,waterfall,我们重点介绍mesh与surf。
这两个命令都是作曲面图形,但是mesh是用网格作图,而surf是用曲面片作图。
效果有少许不同,但作图编程是相同的(这个作图过程比较复杂)。
事实上它们都是用曲面参数式
作的图,因此要画曲面图形,首先得会写上面的参数式。
然后会用上面的参数式编程。
注意在编程时z都是二维矩阵,行数与向量u的维数相同,列数与v的维数相同,x,y可以是与z维数相同的二维矩阵也可以是向量。
请看下面马鞍面
的作图过程:
y=[-1:
0.1:
1]’;
x=y’;
z=(0*y+1)*x..^2-y.^2*(0*x+1);
mesh(x,y,z);
这个命令等价于
y=[-1:
z=ones(size(y))*x.^2-y.^2*ones(size(x));
surf(x,y,z);
上面作的图是以z的高度作为图形色彩数据的(这是缺省时的数据)。
如果加上颜色、光照、纹理、视角等设置,可以得出十分漂亮的图形。
请看example2.m。
有时作图的参数式要使用比较复杂的数学运算,例如2001年全国数学建模竞赛时要求从血管的100张切片中读出血管的中心与半径。
竞赛中要求将血管中心线向三个坐标平面投影。
但是我们根据血管中心线可画出血管的三维图象。
显然这更好看更直观。
曲面参数式的推导见《广西大学学报》2003年第3期,而程序请看example3.m。
练习3:
画一个求生圈的图。
提示:
求生圈的曲面参数方程为:
练习4:
画出在二维区域x2+y2≤1上的马鞍面z=x2-y2。
练习5:
作曲面z=x2+y2与平面4x+2y+5z=20相交的图(要求平面只画出被曲面截出的部分,参考右图)。
练习6:
作圆柱面x2+z2=1与圆柱面y2+z2=1相交的图(要求平面只画出在每卦限的部分)。
3MATLAB动画
MATLAB中的动画功能不是太强,并且需要使用MATLAB的底层作图命令,即图形的句柄操作。
MATLAB中的作图命令如果使用了赋值语句,即将作图赋给了某个变量,则该变量即为此张图形的句柄。
可以对此句柄设置一些图形属性,对于句柄图形我们在前面已经用到了,例如马鞍面的图形中的赋值语句
aa=surf(X,Y,Z);
就是将曲面的句柄赋给aa了,然后用
set(aa,'
Facecolor'
[0,0.7,0],bb,'
Facecolor'
[0.7,0,0.7])
设置曲面颜色。
MATLAB动画实际上就是在句柄中设置了图形将是被复盖还是改写等属性,然后在作图时按不同的位置画图(同时擦除前面的图形或者复盖前面的图形以实现动画)。
由于作动画一般要涉及编程,我们将此部分内容放到第四节中。
在图形的属性控制中要注意区分各种图形对象:
figure,axes,line,patch,surface,image,text等等。
4MATLAB图象处理
MATLAB可对图象作处理,常用的简单命令有:
imread,image,colormap
imread可以读出图象数据,而image可以将图象数据显示为图象,而colormap可以设置图象色彩。
练习7:
本文件夹中有一张图“figure0”,是2002年全国数学建模大赛中的一张图,要求从图中读出图形的内切圆圆心与半径。
在MATLAB图象处理中还有光照、色彩、视角等许多处理。
由于水平与时间关系,只能简单介绍。
第六节MATLAB编程
一、MATLAB编程
MATLAB可以单步运行,也可以编程运行。
与所有软件编程一样,MATLAB中也有条件、分支、循环等语句。
条件语句:
if…end或者if…else…end
循环语句:
for…end或者while…end
需要指出,在其他许多语言中需要循环的地方在MATLAB中是不需要循环的。
下面我们看一个动画程序:
画单摆的运动程序:
pend.m。
figure('
color'
[111])
plot([-0.2;
0.2],[0;
0],'
'
y'
linestyle'
-'
linewidth'
10);
%画悬线的横梁
g=9.8;
%重力加速度
l=1;
%线长
theta0=pi/6;
%初始角度
x0=l*sin(theta0);
%初始x值
y0=-l*cos(theta0);
%初始y值
axis([-0.75,0.75,-1.25,0]);
%画坐标范围
axis('
off'
);
%关闭坐标显示
head=line(x0,y0,'
r'
.'
erasemode'
xor'
markersize'
40);
%定义小球格式
body=line([0;
x0],[0;
y0],'
b'
%定义悬线格式
t=0;
%时间初值
dt=0.0005;
%时间增量
while1%死循环(关闭窗口后中止循环)
t=t+dt;
theta=theta0*cos(sqrt(g/l)*t);
%计算时刻t时的幅角
x=l*sin(theta);
%计算时刻t时的x坐标
y=-l*cos(theta);
%计算时刻t时的y坐标
set(head,'
xdata'
x,'
ydata'
y);
%计算时刻t时小球的位置
set(body,'
[0;
x],'
y]);
%计算时刻t时悬线的位置
drawnow;
%重画小球与悬线
end
二、程序与函数
将MATLAB运行中的每一句写在扩展名为“m”的文本文件中,就得到MATLAB程序文件。
程序中的变量值都在工作窗中。
如果是写成
function[u,v,…]=fun(x,y,…)
则是MATLAB函数,函数参数x,y可以是变量、向量或者矩阵,返回值u,v也可以是变量、向量或者矩阵,存储时函数名必须与存储文件名相同。
例如,运行redotree(n,B)(设的初值为B=[00;
01],取n=5或者n=6),可以画出一棵树的图形。
而运行le