Matlab上机学习指导1.docx

上传人:b****7 文档编号:9199567 上传时间:2023-02-03 格式:DOCX 页数:25 大小:115.43KB
下载 相关 举报
Matlab上机学习指导1.docx_第1页
第1页 / 共25页
Matlab上机学习指导1.docx_第2页
第2页 / 共25页
Matlab上机学习指导1.docx_第3页
第3页 / 共25页
Matlab上机学习指导1.docx_第4页
第4页 / 共25页
Matlab上机学习指导1.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

Matlab上机学习指导1.docx

《Matlab上机学习指导1.docx》由会员分享,可在线阅读,更多相关《Matlab上机学习指导1.docx(25页珍藏版)》请在冰豆网上搜索。

Matlab上机学习指导1.docx

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

同样我们可以设置图像的颜色、光照等属性,这里不再叙述

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1