Matlab上机学习指导1.docx
- 文档编号:6638424
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:21
- 大小:127.12KB
Matlab上机学习指导1.docx
《Matlab上机学习指导1.docx》由会员分享,可在线阅读,更多相关《Matlab上机学习指导1.docx(21页珍藏版)》请在冰豆网上搜索。
Matlab上机学习指导1
MATLAB使用入门
计算机技术的迅速发展,产生了许多功能强大的数学软件,为应用数学和工程技术的发展提供了威力无比的武器和工具,本章介绍由美国MathWorks公司开发的集数值计算、符号计算和图形可视化三大基本功能于一体的,功能强大、简单易学的软件MATLAB。
它是国际公认的优秀数学应用软件之一。
从20世纪80年代产生到现在,MATLAB已经发展成为适合多学科的大型软件,在世界各高校,MATLAB已经成为线性代数、数值分析、数理统计、优化方法、自动控制、数字信号处理、动态系统仿真等高级课程的基本教学工具。
特别是最近几年,MATLAB在我国大学生数学建模竞赛中的应用,为参赛者在有限的时间内准确、有效的解决问题提供了有力的保证。
本章以MATLAB6.5.1版本为例,主要通过举例介绍MATLAB的初步应用。
先简单介绍MATLAB的工作界面,启动MATLAB将看到以下界面
图1
命令窗口(CommandWindow):
其中“>>”为命令提示符,表示MATLAB已经准备好,可以接受用户在此输入命令,命令执行的结果也显示在这个窗口中
历史命令窗口(CommandHistory):
已经执行过的命令依次显示在这个窗口中,可以备查
工作区窗口(Workspace):
显示当前计算机内存中有哪些变量及相关信息
一基本命令与运算
例1:
如图1所示,我们已经输入了3条命令
第一条:
>>a=3
运行(点击Enter键),结果为:
a=
3
这表示我们定义了一个变量a,并且给a赋值为3,同时在工作区窗口中就会出现一个小方格,意思是现在我们占据了计算机内存中一块存储空间,空间命名为a,空间里面现在就存放着数字3,用鼠标双击这个小方格,就会看到这个3
第二条:
>>b=4;
表示又定义了一个变量b,赋值为4,运行后没有显示结果,这是因为我们在命令后面加了分号,这只是表示不把结果在命令窗口中显示出来(因为有时候我们为了解决某个问题只需显示最后结果,而不需要显示中间结果),实际上命令已经执行过了,这在工作区窗口中就能看出来
第三条:
>>c=a+b,
运行结果:
c=
7
又定义了一个变量c,同时把变量a里面的数与变量b里面的数加起来将结果放到c里面
这时我们已经定义了三个变量,也就是在计算机内存中我们占据了三块存储空间,假如我们问题解决完了,不需要这几个变量了,我们就用下面的命令清除它们
>>clear
运行后工作区窗口中的三个小方格就会消失,表示三个变量已经清除,内存中所占据的存储空间已经释放,这样就不会影响我们后面解决其它问题了
例2:
计算
>>(12+2*(7-4))/3^2
运行结果:
ans=
2
例3:
计算圆面积Area
半径rad=2,则可输入
>>rad=2;%定义变量名为rad
>>area=pi*rad^2;%定义变量名为area
>>area
说明1:
前两行命令加了分号,表示不把这两行命令的结果显示出来,但是我们需要知道面积是多少,所以第三行命令表示把变量area的值显示出来
说明2:
pi是Matlab里边已经有的常数(即圆周率),直接应用,不需要定义
说明3:
%后面为注释,用来解释前面命令的功能或作用,计算机并不执行,练习时可以不用输入,但在解决复杂问题时,恰当的注释是很有用的
表1:
常用函数
名称
含义
名称
含义
sin
正弦
exp
以e为底的指数
cos
余弦
log
自然对数
tan
正切
log10
10为底的对数
cot
余切
log2
2为底的对数
asin
反正弦
abs
绝对值
acos
反余弦
sqrt
开平方根
例4:
1)计算
>>y=sin(10)*exp(-0.3*4^2)
结果y=
-0.0045
系统默认4位有效数字,若想提高精度可用命令:
>>vpa(y,10)%即取10位有效数字
结果为-.4477156132e-2,即
2)>>x=sqrt
(2)/2%sqrt为开方,见表1
x=
0.7071
>>y=asin(x)%x的反正弦
y=
0.7854(此处y为弧度,系统默认)
>>y_deg=y*180/pi%将弧度转化为角度,y_deg为变量名
y_deg=
45.0000
例5:
Inf、-Inf表示正负无穷大,例如
>>2/0
ans=
Inf
>>log(0)
Warning:
Logofzero.
ans=
-Inf
>>exp(3000)
ans=
Inf(超过计算机能表示的最大的数,故显示为无穷大)
NaN表示无意义,NotaNunber的缩写,例如
>>0/0
ans=
NaN
二向量与矩阵
例1:
求向量
、
的数量积与向量积
>>a=[1,-1,2];%生成向量a
>>b=[2,1,3];%生成向量b
>>c=dot(a,b)%数量积
>>d=cross(a,b)%向量积
c=
7
d=
-513
表2:
向量与矩阵常用命令
min
最小值
max
最大值
mean
平均值
std
标准差
sort
排序
diff
相邻元素的差
length
向量的个数
sum
总和
dot
内积
cross
外积
例3:
求矩阵
的行列式
>>A=[1,4,3;6,5,-2;7,8,5]%生成矩阵A
>>t=det(A)%求A的行列式
运行结果:
A=
143
65-2
785
t=
-96
常用指令
det(a)求矩阵a的行列式
eig(a)求矩阵a的特征值
inv(a)或a^(-1)求矩阵a的逆矩阵
rank(a)求矩阵a的秩
trace(a)求矩阵a的迹(对角线元素之和)
例4:
>>a=[1,4,6,8,10]%一维矩阵,就是向量
>>a(3)%求a的第三个元素
ans=
6
>>x=[12345678
4567891011];%定义一个两行八列的矩阵
>>x(3)%求x的第三个元素
ans=
2%数数的顺序是按列数,不是按行数
>>x([125])%x的第一、二、五个元素
ans=
143
>>x(2,3)%x的第二行第三列的元素
ans=
6
x(1:
5)%x的前五个元素
ans=
14253
>>x(10:
end)%x的第十个元素以后的所有元素
ans=
869710811
>>x(10:
-1:
2)%x的第十个元素到第二个元素的倒排
ans=
857463524
>>x(find(x>5))%x中大于5的元素
ans=
67869710811
>>x(4)=100%给x的第四个元素重新赋值
x=
12345678
410067891011
>>x(3)=[]%删除第三个元素(此时x不再是两行的矩阵,变成了一个向量)
执行后观察结果,比较workspace里的x如何变化
>>x(16)=1%加入第十六个元素
例5:
当一个矩阵或向量元素很多的时候,则要用下面的方法:
>>x=(1:
2:
121);%起始值为1,每次增加2,终止值为121的向量
>>x=(1:
121);%起始值为1,系统默认每次增加1,终止值为121的向量
>>x=linspace(0,1,101);%利用linspace,生成以0为起始值,1为终止值,元素数目为101的向量
>>a=[]%空矩阵
a=
[]
>>zeros(2,2)%两行两列的全为0的矩阵
ans=
00
0 0
>>ones(3,3)%三行三列全为1的矩阵
ans=
111
111
111
>>rand(2,4);%两行四列的随机矩阵,每个数字由计算机随机生成,且都在0和1之间
例6:
另外一种定义矩阵的方式
>>a=1:
7;b=11:
2:
23;%执行后观察结果,点击Workspace里的变量
>>c=[ba];%利用上面建立的阵列a及阵列b,组成新矩阵c
>>d=[b;a];%利用a及b,再组成新矩阵d
比较c与d有什么不同
再如已知y=[-1,6,15,7,31,2,4,5];
x=y(3:
5)%x为y的第三到第五个元素组成的新向量
或x=[y(5),y(3),y(7)]%x为y的第五、第三、第七个元素组成的新向量
或这样更简单x=y([5,3,7])
例7:
输入矩阵x=[4,8,12,10,23;6,3,15,13,19;9,1,2,18,14;11,7,5,21,17]
依次输入下列命令并执行,观察结果,各命令分别有什么作用?
m=max(x)%x每列的最大值,如果x只是一行,则m就是这一行向量的最大值
n=min(x)%每列的最小值
(问:
如何得到整个矩阵的最小值与最大值?
)
[m,n]=size(x)%给出x的大小,即行数和列数
L=length(x)%给出x的列数,如果x是一行或一列向量,则给出这个向量的元素的个数,即长度
y=x’%矩阵x的转置,即行与列互换
a=x( :
2)%x的所有行,第二列的元素送给a,a为一列
b=x(:
2)'%a的转值,b为一行
c=x(3, :
)%x的第三行所有列的元素送给c
d=x(1 :
3,3 :
5)%x的第1到3行,第3到5列送给d,产生一个新矩阵
y(2,3)=y(2,3)/2%y的第二行第三列的元素除以2,再替换原来的数
y(2, :
)=y(2, :
)/2%第二行的元素全部除以二
y( :
4)=y( :
4)+y( :
2)%第四列加第二列替换原来的第四列
例8:
下面介绍点运算,这是matlab特有的运算,在后面画函数图象时会用到
>>x=1:
8
x=
12345678
>>y=x.^2%如果x是一个数,它平方就用x^2,但现在x是向量,后面加点表示x的每一个元素平方,
y=
1491625364964
>>z=x./y%x的每一个元素除以y相应的每一个元素
z=
1.00000.50000.33330.25000.20000.16670.14290.1250
三符号计算
所谓符号计算,是指分解因式、求导数等等给出解析表达式而不是给出数值结果的运算,下面举一些常用的例子。
1求极限
例1:
求极限
>>symsxab;%由此命令开始出现的xab都是符号(叫符号变量),而不是以前所定义的变量,所以先用syms命令声明一下,告诉计算机下面要进行符号计算,而不是数值计算
>>f=x*(1+a/x)^x*sin(b/x);%这样的得到的函数叫符号函数
>>l=limit(f,x,inf)%inf表示无穷大
运行结果:
l=
exp(a)*b
例2:
求极限
>>symsx;
>>f=(exp(x^3)-1)/(1-cos(sqrt(x-sin(x))));
>>limit(f,x,0)
运行结果:
ans=
12
例3:
求右极限
>>symsx;
>>f=(exp(x^3)-1)/(1-cos(sqrt(x-sin(x))));
>>limit(f,x,0,'right')%right表示求右极限,换成left就表示求左极限
运行结果:
ans=
12
2求导数
例1:
求函数
的一阶导数、二阶导数
>>symsx;
>>f=3*x^3+x^2-4*x-6;
>>f1=diff(f,x)%对x求一阶导数
>>f2=diff(f,x,2)%对x求二阶导数,将2改为3即求3阶导数,余类推
运行结果:
f1=
9*x^2+2*x-4
f2=
18*x+2
例2:
设
,求
>>symsx;
>>y=3*x^2-2*x+1;
>>y1=diff(y)
>>x=1;
>>eval(y1)%此命令计算符号表达式y1
运行结果:
y1=
6*x-2
ans=
4
例3:
求函数
的偏导数
>>symsxy;
>>z=x^2*sin(2*y);
>>Dx=diff(z,x)%z关于x求偏导数
>>Dy=diff(z,y)%z关于y求偏导数
运行结果:
Dx=
2*x*sin(2*y)
Dy=
2*x^2*cos(2*y)
3积分
例1:
求
的不定积分
>>symsx;
>>f=x^2;
>>int(f)%求f(x)的不定积分
运行结果:
ans=
1/3*x^3%结果没有加任意常数c
例2:
求定积分
>>symsx;
>>f=x^2;
>>int(f,x,0,2)%求[0,2]上的定积分
运行结果:
ans=
8/3
例3:
求广义积分
>>symsx;
>>f=1/x^2;
>>int(f,x,1,inf)%求(1,∞)上的广义积分
运行结果:
ans=
1
例4:
计算二重积分
(先关于
积分,后关
于积分)
>>symsxy;
>>z=x^2+y^2+1;
>>I=int(int(z,y,x,x+1),x,0,1)
运行结果:
I=
5/2
4解方程
例1:
解一元二次方程
>>symsxabc
>>f=a*x^2+b*x+c;
>>solve(f)%默认x是未知数,解出x
结果:
ans=
[1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[1/2/a*(-b-(b^2-4*a*c)^(1/2))]
>>solve(f,'b')%把b当作未知数,解出b
结果:
ans=
-(a*x^2+c)/x
或者用命令:
>>solve('a*x^2+b*x+c')%加引号表示引号中出现的字母都是符号,不用再用命令symsxabc
或者:
>>solve('a*x^2+b*x+c=0')
例2:
解方程
>>symsx
>>f=cos(x)-sin(x)
>>f1=solve(f)
结果:
f1=
1/4*pi
或者用命令
>>f1=solve('cos(x)=sin(x)')亦可
例3:
解方程组
>>g1='x+y+z=1',%引号的作用和前面syms的作用一样,表示引号里面出现的xyz都是符号变量
>>g2='x-y+z=2',
>>g3='2*x-y-z=1',
>>f=solve(g1,g2,g3)
结果:
f=
x:
[1x1sym]
y:
[1x1sym]
z:
[1x1sym]
xyz都是符号变量,要把它们显示出来,用下面的命令
>>f.x
ans=
2/3
>>f.y,f.z
ans=
-1/2
ans=
5/6
或者用下面的命令更为简洁
>>[x,y,z]=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')
结果:
x=
2/3
y=
-1/2
z=
5/6
5解微分方程
例1:
解微分方程
>>y=dsolve('D2y+2*Dy+2*y=0')
结果:
y=
C1*exp(-t)*sin(t)+C2*exp(-t)*cos(t)%默认自变量为t
例2:
解微分方程
,
,
>>y=dsolve('D2y+2*Dy+2*y=0','y(0)=1','Dy(0)=0')
结果:
y=
exp(-t)*sin(t)+exp(-t)*cos(t)
对于上面的符号函数y,可以用下面的命令画出函数图像
>>ezplot(y)
图2
例3:
解微分方程组
,
>>[x,y]=dsolve('Dx=y','Dy=-x','x(0)=0','y(0)=1')
结果:
x=
sin(t)
y=
cos(t)
6化简和代换
MATLAB符号运算工具箱中,包括了较多的代数式化简和代换功能,下面仅举出部分常见运算。
simplify利用各种恒等式化简代数式
expand将乘积展开为和式
factor把多项式转换为乘积形式
collect合并同类项
horner把多项式转换为嵌套表示形式
例如:
进行合并同类项执行
>>symsx
>>collect(3*x^3-0.5*x^3+3*x^2)
ans=
5/2*x^3+3*x^2)
进行因式分解执行
>>factor(3*x^3-0.5*x^3+3*x^2)
ans=
1/2*x^2*(5*x+6)
四函数作图
例1:
画函数
在区间
上的图像
>>x=0:
0.1:
10;%自变量x从0到10生成101个点(每隔0.1生成一个点)
>>y=sin(x);%生成函数值y的101个点
>>plot(x,y);%以x为自变量,y为函数值画函数图像
运行结果:
图3
从此例可以看出,matlab画图的原理就是描点连线,因此如果点取的不密集,画出来就成了折线图,但也不能太密,否则就超出matlab的计算范围,适当即可
表3:
常用画图命令列表
基本画图命令
plot画图函数的参数
命令
含义
字符
含义
字符
图线型态
plot
建立向量或矩阵各队队向量的图形
y
黄色
.
点
k
黑色
o
圆
w
白色
x
X
title
给图形加标题
b
蓝色
+
+
xlabel
给x轴加标记
g
绿色
*
*
ylabel
给y轴加标记
r
红色
-
实线
text
在图形指定的位置上加文本字符串
c
亮青色
:
点线
gtext
在鼠标的位置上加文本字符串
m
锰紫色
-.
点虚线
grid
打开网格线
--
虚线
例2:
在同一窗口中绘正弦曲线
及抛物线
,绘图区间
,
并设置相关属性
如果仍然像上面那样在命令窗口中输入一句执行一句是很麻烦的,我们现在建立
M文档来解决此问题,步骤如下:
(1)新建一个M文档,即点击主窗口工具栏中的图标
,见下图:
图4
弹出如下窗口:
图5
(2)输入如下程序代码:
x=-2*pi:
pi/20:
2*pi;%从-2π到2π每隔π/20生成一个点,共81个点
y1=sin(x);%生成函数值y1,也是81个点
plot(x,y1,'r');%画函数y1=sin(x)的图像,r表示红色
holdon%为了在同一窗口中继续画图,此命令保持
前面已经作的图形不动
y2=x.^2;%生成函数值y2的81个点
plot(x,y2,'b*');%画函数y2=x^2的图像,b*表示蓝色‘*’型线
xlabel('x轴');%x轴加标注
ylabel('y轴');%y轴加标注
title('正弦曲线及抛物线');%加标题
gridon;%显示网格线
axis([-4,4,-2,5])%调整图像显示范围,横坐标从-4到4,纵坐标从-2到5
(3)输入完成后,点击图标
保存、然后命名,比如命名为pic.m(其中.m是系统自动加上的,表示这是一个m文件,即matlab文件)
(4)运行程序,有两种方法:
第一种,点击图5中的图标
即可;第二种,在命令窗口中输入文件名
>>pic
运行即可,两种方法都会弹出如下图形:
图6
说明1:
程序代码中第五行命令y2=x.^2,自变量x平方时后面加了一点,这是因为x此时不是一个数,而是一系列点(81个点),即一个向量,因此x^2是没有意义的,我们要的是给x里的每一个数平方,这时我们就给x后加一个点,这种运算叫点运算(见前面向量与矩阵部分例5),再如我们要画函数
的图像时,就应该用命令y=1./x
说明2:
第三步中保存m文件,系统会自动将其保存在路径为D:
\MATLAB6\work的work文件夹里,当我们需要查看我们以前所保存的文件时,就在这个文件夹里找,或者点击图标
,这个叫CurrentDirectory(见图4),意思是matlab当前指向这个文件夹,只有这个文件夹里的程序,matlab才会运行,当我们想运行其他文件夹里的程序时,就要将这个当前路径改成我们想要的那个文件夹
例3:
画椭圆
建立m文档如下:
t=[0:
pi/50:
2*pi];%角度t从0到2π,每隔π/50一个点
X=cos(t)*3;%参数方程
Y=sin(t)*2;
plot(X,Y);
xlabel('x'),ylabel('y');
title('椭圆')
运行结果:
略
例4:
在同一个窗口中画出衰减振荡曲线
与它的包络线
及
,其中
建立m文档如下:
t=0:
pi/50:
4*pi;
y0=exp(-t/3);
y=exp(-t/3).*sin(3*t);%注意点运算
plot(t,y,'-r',t,y0,':
b',t,-y0,':
b')%-r表示红色实线,:
b表示蓝色点线
grid
运行结果:
略
下面举例介绍画空间图像
例5:
画三维螺旋线:
建立m文档如下:
t=0:
pi/50:
6*pi;
x=cos(t);
y=sin(t);
z=t;
plot3(x,y,z)%plot3指画三维图像
grid%添加网格线
运行结果:
图7
也可以用下面的命令:
t=linspace(0,6*pi,301);%从0到6π生成301个点
plot3(cos(t),sin(t),t);
grid
例6:
画空间中的曲面要用mesh命令
画出由函数
形成的立体网状图:
a=linspace(-2,2,30);%在x轴上从-2到2生成30个点
b=linspace(-2,2,30);%同上在y轴上取30点
[x,y]=meshgrid(a,b);
z=x.*exp(-x.^2-y.^2);
mesh(x,y,z);%画出立体网状图
最后一句命令也可用下面的命令代替
surf(x,y,z);%画出立体曲面图
运行结果:
图8
同样我们可以设置图像的颜色、光照等属性,这里不再叙述
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 上机 学习 指导