matlab入门2.docx

上传人:b****8 文档编号:10116606 上传时间:2023-02-08 格式:DOCX 页数:40 大小:311.12KB
下载 相关 举报
matlab入门2.docx_第1页
第1页 / 共40页
matlab入门2.docx_第2页
第2页 / 共40页
matlab入门2.docx_第3页
第3页 / 共40页
matlab入门2.docx_第4页
第4页 / 共40页
matlab入门2.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

matlab入门2.docx

《matlab入门2.docx》由会员分享,可在线阅读,更多相关《matlab入门2.docx(40页珍藏版)》请在冰豆网上搜索。

matlab入门2.docx

matlab入门2

应用数学软件-MATLAB入门

在科学和工程应用中,往往要进行大量的科学计算,其中包括以矩阵为基础的数学计算;这些计算一般来说难以用手工精确和快捷地进行,而且众多工程问题一般只要求得到满足精度的近似解即可,从而借助于计算机编写相应的程序进行近似计算就显得很有必要。

目前用Basic、Fortran和C编制计算程序较多,但其既需要对有关算法有深刻的了解,还需要熟练掌握所用语言的语法和编程技巧;这对较多科学和工程技术人员而言,同时具备这两方面的技能就很有难度;而且用上述语言编制程序不但复杂,一般需要大量的人力和物力,而且影响工作进程和效率,为此,美国Mathwork公司于1967年推出了“MatrixLaboratory”(即矩阵实验室,缩写为Matlab)软件包,并不断进行更新和扩充,目前已成为全球应用最广泛最流行的软件之一。

目前最新的2012b版本(windows环境)是一种功能强、效率高便于进行科学和工程计算的交互式软件包。

其中包括:

一般数值分析、矩阵运算、概率统计、建模与系统控制和优化等应用程序。

集应用程序和图形于一体便于使用的集成环境中,在此环境下所解问题的Matlab语言表述形式和其数学表达形式相同,不需要按传统的方法编程,就可解决工程、科学计算和数学学科中的许多问题。

不过,Matlab作为一种新的计算机语言,要想运用自如,充分发挥它的威力,必须先系统地学习它。

首先应该相信的是,由于使用Matlab编程运算与人进行科学计算的思路和表达方式完全一致,从而学习Matlab语言不象学习其它高级语言——如Basic、Fortran和C等那样难以掌握。

 

§1MATLAB语言基础

MATLAB建立在向量、数组和矩阵的基础上,使用方便,人机界面直观,输出结果可视化,矩阵是MATLAB的核心。

§1.1变量与函数

§1.1.1变量

MATLAB中变量的命名规则是:

(1)变量名必须是不含空格的单个词;

(2)变量名区分大小写;

(3)变量名最多不超过19个字符;

(4)变量名必须以字母打头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号。

§1.1.2特殊变量表

特殊变量

取值

ans

用于结果的缺省变量名

pi

圆周率

eps

计算机的最小数,当和1相加就产生一个比1大的数

inf

无穷大,如1/0

NaN

不定量,如0/0

i,j

i=j=

realmin

最小可用正实数

realmax

最大可用正实数

§1.1.3数学运算符号及标点符号

+

加法运算,适用于两个数或两个同阶矩阵相加

减法运算

*

乘法运算

.*

点乘运算

/

除法运算

./

点除运算

^

乘幂运算

.^

点乘幂运算

\

反斜杠表示左除

(1)MATLAB的每条命令后,若为逗号或无标点符号,则显示该条命令运行的结果;若命令后为分号,则运行结果不显示;

(2)“%”后面所有文字为注释;

(3)“...”表示续行。

§1.1.4数学函数

 

函数

名称

函数

名称

sin(x)

正弦函数

asin(x)

反正弦函数

cos(x)

余弦函数

acos(x)

反余弦函数

tan(x)

正切函数

atan(x)

反正切函数

abs(x)

绝对值

max(x)

最大值

min(x)

最小值

sum(x)

元素的总和

sqrt(x)

开平方

exp(x)

以e为底的指数

log(x)

自然对数

log10(x)

以10为底的对数

sign(x)

符号函数

fix(x)

取整

 

§1.1.5M文件

MATLAB的内部函数是有限的,有时为了研究某一个函数的各种性态,需要为MATLAB定义新函数,为此必须编写函数文件.函数文件是文件名后缀为M的文件,这类文件的第一行必须是一特殊字符function开始;

格式为:

function因变量名=函数名(自变量名)

函数值的获得必须通过具体的运算实现,并赋给因变量.

M文件建立方法:

(1)在Matlab中,点:

File->New->M-file

(2)在编辑窗口中输入程序内容

(3)点:

File->Save,存盘,M文件名必须与函数名一致。

Matlab的应用程序也以M文件保存。

例1.1定义函数

(1)建立M文件:

fun.m

functionf=fun(x)

f=100*(x

(2)-x

(1)^2)^2+(1-x

(1))^2

(2)可以直接使用函数fun.m

例1.2计算f(1,2),只需在Matlab命令窗口键入命令:

x=[12]

fun(x)

 

§1.2数组

§1.2.1创建简单的数组

x=[abcdef]创建包含指定元素的行向量

x=first:

last创建从first开始,加1计数,到last结束的行向量

x=first:

increment:

last创建从first开始,加increment计数,last结束的行向量

x=linspace(first,last,n)创建从first开始,到last结束,有n个元素的行向量

x=logspace(first,last,n)创建从first开始,到last结束,有n个元素的以10为底的对数分隔行向量.

程序:

x=[123458718]

y=1:

7

z=3:

2:

9

v=[yz]

u=linspace(2,9,11)

结果:

x=123458718

y=1234567

z=3579

v=12345673579

u=2.002.703.404.104.805.506.206.907.608.309.00

§1.2.2数组元素的访问

 

(1)访问一个元素:

x(i)表示访问数组x的第i个元素.

(2)访问一块元素:

x(a:

b:

c)表示访问数组x的从第a个元素开始,以步长为b到第c个元素(但不超过c),b可以为负数,b缺省时为1.

(3)直接使用元素编址序号:

x([abcd])表示提取数组x的第a、b、c、d个元素构成一个新的数组[x(a)x(b)x(c)x(d)].

程序:

x=1:

9

y=x(2:

2:

8)

z=[x

(1)x(6)x(8)]

结果:

x=123456789

y=2468

z=168

§1.2.3数组的方向

 

前面例子中的数组都是一行数列,是行方向分布的.称之为行向量.数组也可以是列向量,它的数组操作和运算与行向量是一样的,唯一的区别是结果以列形式显示;

产生列向量有两种方法:

直接产生例c=[1;2;3;4]

转置产生例b=[1234];c=b’

说明:

以空格或逗号分隔的元素指定的是不同列的元素,而以分号分隔的元素指定了不同行的元素。

§1.2.4数组的运算

(1)标量-数组运算

(2)

数组对标量的加、减、乘、除、乘方是数组的每个元素对该标量施加相应的加、减、乘、除、乘方

设:

a=[a1,a2,…,an],c=标量

则:

a+c=[a1+c,a2+c,…,an+c]

a.*c=[a1*c,a2*c,…,an*c]

a./c=[a1/c,a2/c,…,an/c](右除)

a.\c=[c/a1,c/a2,…,c/an](左除)

a.^c=[a1^c,a2^c,…,an^c]

c.^a=[c^a1,c^a2,…,c^an]

程序:

a=[1234];

c=2;

a1=a+c

a2=a*c

a3=a./c

a4=a.\c

a5=a.^c

a6=c.^a

结果:

a1=3456

a2=2468

a3=0.50001.00001.50002.0000

a4=2.00001.00000.66670.5000

a5=14916

a6=24816

(2)数组-数组运算

当两个数组有相同维数时,加、减、乘、除、幂运算可按元素对元素方式进行的,不同大小或维数的数组是不能进行运算的.

设:

a=[a1,a2,…,an],b=[b1,b2,…,bn]

则:

a+b=[a1+b1,a2+b2,…,an+bn]

a.*b=[a1*b1,a2*b2,…,an*bn]

a./b=[a1/b1,a2/b2,…,an/bn]

a.\b=[b1/a1,b2/a2,…,bn/an]

a.^b=[a1^b1,a2^b2,…,an^bn]

程序:

a=[222];

b=[333];

c1=a+b

c2=a.*b

c3=a./b

c4=a.\b

c5=a.^b

结果:

c1=555

c2=666

c3=0.66670.66670.6667

c4=1.50001.50001.5000

c5=888

§1.3矩阵

§1.3.1矩阵的建立

逗号或空格用于分隔某一行的元素,分号用于区分不同的行.除了分号,在输入矩阵时,按Enter键也表示开始一新行.输入矩阵时,严格要求所有行有相同的列.

例1.3m=[1234;5678;9101112]

p=[1111

2222

3333]

特殊矩阵的建立:

a=[]产生一个空矩阵,当对一项操作无结果时,返回空矩阵,空矩阵的大小为零;

b=zeros(m,n)产生一个m行、n列的零矩阵;

c=ones(m,n)产生一个m行、n列的元素全为1的矩阵;

d=eye(m,n)产生一个m行、n列的单位矩阵。

程序:

m=[1234;5678;9101112]

p=[1111

2222

3333]

a=[]

b=zeros(2,3)

c=ones(2,3)

d=eye(2,3)

e=eye(3,3)

结果:

m=1234

5678

9101112

p=1111

2222

3333

a=[]

b=000

000

c=111

111

d=100

010

e=100

010

001

§1.3.2矩阵的运算

(1)标量-矩阵运算

同标量-数组运算。

(2)矩阵-矩阵运算

[1]元素对元素的运算,同数组-数组运算。

[2]矩阵运算:

矩阵加法:

A+B

矩阵乘法:

A*B

方阵的行列式:

det(A)

方阵的逆:

inv(A)

方阵的特征值与特征向量:

[V,D]=eig[A]

程序:

a=[123

456];

b=[12

12

12];

c1=a+a

c2=a*b

c=[273;394;153]

c3=det(c)

c4=inv(c)

[v,d]=eig(c)

结果:

c1=246

81012

c2=612

1530

c=273

394

153

c3=-3

c4=-2.33332.0000-0.3333

1.6667-1.0000-0.3333

-2.00001.00001.0000

v=-0.5515-0.7857-0.2743

-0.73090.4412-0.3391

-0.4020-0.43370.8999

d=3.463500

0-0.27470

000.8112

 

§1.4关系与逻辑运算

§1.4.1关系操作符

 

关系操作符

说明

<

小于

<=

小于或等于

>

大于

>=

大于或等于

==

等于

~=

不等于

 

§1.4.2逻辑运算符

逻辑操作符

说明

~

 

§1.4.3控制流

MATLAB提供三种决策或控制流结构:

for循环、while循环、if-else-end结构.

这些结构经常包含大量的MATLAB命令,故经常出现在MATLAB程序中,而不是直接加在MATLAB提示符下.

 

a、for循环:

允许一组命令以固定的和预定的次数重复

forx=array

{commands}

end

在for和end语句之间的命令串{commands}按数组(array)中的每一列执行一次.在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:

,n)

例1.4对

,求

的值;

程序:

forn=1:

10

x(n)=sin(n*pi/10);

end

x

结果:

x=0.30900.58780.80900.95111.00000.95110.80900.58780.30900.0000

x=0.30900.58780.80900.95111.00000.95110.80900.58780.30900.0000

b、While循环

与for循环以固定次数求一组命令相反,while循环以不定的次数求一组语句的值.

whileexpression

{commands}

end

只要在表达式(expression)里的所有元素为真,就执行while和end语句之间的命令串{commands}.

例1.5设银行年利率为11.25%。

将10000元钱存入银行,问多长时间会连本带利翻一番?

程序:

money=10000;years=0;

whilemoney<20000

years=years+1;money=money*(1+11.25/100);

end

years

money

结果:

years=7

money=2.1091e+004

c、If-Else-End结构

(1)有一个选择的一般形式是:

ifexpression

{commands}

end

如果在表达式(expression)里的所有元素为真,就执行if和end语句之间的命令串{commands}。

例3.5

例1.6编写程序求函数

对任意的输入

所得到的函数值。

先建立M文件fun1.m定义函数f(x),再在Matlab命令窗口输入fun1

(2),fun1(-1)即可。

程序:

functionf=fun1(x)

ifx>1

f=x^2+1

end

ifx<=1

f=2*x

end

输入:

fun1

(2),fun1(-1)

结果:

5-2

 

(2)有三个或更多的选择的一般形式是:

if(expression1)

{commands1}

elseif(expression2)

{commands2}

elseif(expression3)

{commands3}

elseif

……

else

{commands}

end

end

end

end

例1.7编写程序求函数

对任意的输入

所得到的函数值。

例3.6

先建立M文件fun2.m定义函数f(x),再在Matlab命令窗口输入fun2

(2),fun2(0.5),fun2(-1)即可。

程序:

functionf=fun2(x)

ifx>1

f=x^2+1

elseifx<=0

f=x^3

else

f=2*x

end

end

输入:

fun2

(2),fun2(0.5),fun2(-1)

结果:

51-1

作业:

对以下问题,编写M文件:

(1)对随机所给的10个数由小到大排序.

(2)对随机所给的一个4行5列的矩阵,编程求出其最大值及其所处的位置.

(3)编程求

(4)一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下.求它在第10次落地时,共经过多少米?

第10次反弹有多高?

(5)有一函数,编写一程序,输入自变量的值,输出函数值.

 

§2MATLAB作图

§2.1二维图形

§2.1.1曲线图

Matlab作图是通过描点、连线来实现的,故在画一个曲线图形之前,必须先取得该图形上的一系列的点的坐标(即横坐标和纵坐标),然后将该点集的坐标传给Matlab函数画图.

命令为:

plot(X,Y,S)

plot(X,Y)--画实线

plot(X,Y1,S1,X,Y2,S2,……,X,Yn,Sn)--将多条线画在一起

X,Y是向量,

分别表示点集的横坐标和纵坐标,

plot(X,Y,S)描绘该点集所表示的曲线,其线型S确定如下:

y黄色.点-连线

m洋红o圈:

短虚线

c蓝绿色xx-符号-.长短线

r红色+加号--长虚线

例2.1在[0,2*pi]用红线画sin(x),用蓝色圈画cos(x).

程序:

x=linspace(0,2*pi,30);

y=sin(x);

z=cos(x);

plot(x,y,'r',x,z,'bo')

结果:

 

§2.1.2符号函数(显函数、隐函数和参数方程)画图

(1)ezplot

ezplot(‘f(x,y)’,[xmin,xmax,ymin,ymax])

表示在区间xmin

ezplot(‘x(t)’,’y(t)’,[tmin,tmax])

表示在区间tmin

例2.2在[0,pi]上画y=sin(x)的图形.

程序:

ezplot(‘sin(x)’,[0,pi])

结果:

例2.3在[0,2*pi]上画

星形图.

程序:

ezplot(‘cos(t)^3’,’sin(t)^3’,[0,2*pi])

结果:

例2.4在[-2,0.5],[0,2]上画隐函数

图.

程序:

ezplot('exp(x)+sin(x*y)',[-2,0.5,0,2])

结果:

 

§2.2三维图形空间曲线

§2.2.1一条曲线

 

plot3(x,y,z,s)x,y,z是n维向量,分别表示曲线上点集的横坐标、纵坐标、函数值;s指定颜色、线型等

例2.5在区间[0,10*pi]画出参数曲线x=sin(t),y=cos(t),

z=t.

程序:

t=0:

pi/50:

10*pi;

plot3(sin(t),cos(t),t)

rotate3d%旋转

结果:

 

§2.2.2多条曲线

 

plot3(x,y,z)其中x,y,z是都是m*n矩阵,其对应的每一列表示一条曲线.

例2.6画多条曲线观察函数Z=(X+Y).^2.

程序:

x=-3:

0.1:

3;y=1:

0.1:

5;

[X,Y]=meshgrid(x,y);

Z=(X+Y).^2;

plot3(X,Y,Z)

结果:

 

 

(这里meshgrid(x,y)的作用是产生一个以向量x为行、向量y为列的矩阵)

 

§2.3三维空间曲面

(1)surf(x,y,z):

画出数据点(x,y,z)表示的曲面。

例2.7画函数Z=(X+Y).^2的图形.

程序:

x=-3:

0.1:

3;

y=1:

0.1:

5;

[X,Y]=meshgrid(x,y);

Z=(X+Y).^2;

surf(X,Y,Z)

shadingflat%将当前图形变得平滑

结果:

 

 

(2)Mesh(x,y,z):

画网格曲面。

例2.8画出曲面Z=(X+Y).^2在不同视角的网格图

程序:

x=-3:

0.1:

3;y=1:

0.1:

5;

[X,Y]=meshgrid(x,y);

Z=(X+Y).^2;

mesh(X,Y,Z)

结果:

 

(3)meshz(X,Y,Z)在网格周围画一个curtain图(如,参考平面)。

例2.9绘peaks的网格图

程序:

[X,Y]=meshgrid(-3:

.125:

3);

Z=peaks(X,Y);

Meshz(X,Y,Z)

结果:

 

§2.4图形处理

§2.4.1图形上加格栅、图例和标注

(1)gridon:

加格栅在当前图上;

gridoff:

删除格栅;

(2)hh=xlabel(string):

在当前图形的x轴上加图例string;

hh=ylabel(string):

在当前图形的y轴上加图例string;

hh=zlabel(string):

在当前图形的z轴上加图例string;

hh=title(string):

在当前图形的顶端上加图例string。

例2.10在区间[0,2*pi]画sin(x)的图形,并加注图例“自变量X”、“函数Y”、“示意图”,并加格栅。

程序:

x=linspace(0,2*pi,30);y=sin(x);

plot(x,y)

xlabel('自变量X')

ylabel('函数Y')

title('示意图')

gridon

结果:

 

(3)hh=gtext(‘string’)

运行命令gtext(‘string’)时,屏幕上出现当前图形,在图形上出现一个交叉的十字,该十字随鼠标的移动而移动,当按下鼠标左键时,该标注string放在当前十交叉的位置。

例2.11在区间[0,2*pi]画sin(x),并分别标注“sin(x)”,

”cos(x)”.

程序:

x=linspace(0,2*pi,30);y=sin(x);z=cos(x);

plot(x,y,x,z)

gtext(‘sin(x)’);gtext(’cos(x)’)

结果:

 

0

 

§2.4.2定制坐标

Axis([xminxmaxyminymaxzminzmax])定制图形坐标

Axisauto将坐标轴返回到自动缺省值

例2.12在区间[0.005,0.01]显示sin(1/x)的图形。

程序:

x=linspace(0.0001,0.01,1000);y=sin(1./x);

plot(x,y)

axis([0.0050.01–11])

结果:

 

另:

程序:

x=1:

10000;

plot(1./x,sin(x),'b*')

axis([0.00050.01-11])

结果:

 

§2.4.3图形保持

(1)holdon保持当前图形,以便继续画图到当前图上。

holdoff释放当前图形窗口。

例2.13将y=sin(x)、y=cos(x)分别用点和线画出在同一屏幕上。

程序:

x=linspace(0,2*pi,30);

y=sin(x);

z=cos(x)

plot(x,z,:

holdon

plot(x

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

当前位置:首页 > 工程科技 > 电子电路

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

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