MATLAB编程剪辑.docx

上传人:b****4 文档编号:24598224 上传时间:2023-05-29 格式:DOCX 页数:82 大小:2.40MB
下载 相关 举报
MATLAB编程剪辑.docx_第1页
第1页 / 共82页
MATLAB编程剪辑.docx_第2页
第2页 / 共82页
MATLAB编程剪辑.docx_第3页
第3页 / 共82页
MATLAB编程剪辑.docx_第4页
第4页 / 共82页
MATLAB编程剪辑.docx_第5页
第5页 / 共82页
点击查看更多>>
下载资源
资源描述

MATLAB编程剪辑.docx

《MATLAB编程剪辑.docx》由会员分享,可在线阅读,更多相关《MATLAB编程剪辑.docx(82页珍藏版)》请在冰豆网上搜索。

MATLAB编程剪辑.docx

MATLAB编程剪辑

数组中的单个数据是可以被访问的,访问的方法是数组名后带一个括号,括号内是这个数据所对应的行标和列标,例如A(21)或A(2,1),前为行后位列。

如果这个数组是一个行向量或列向量,则只需要一个下标。

MATLAB的变量名必须以字母开头(区分大小写),后面可以跟字母,数字和下划线(_).只有前31个字符是有效的;如果超过了31个字符,基余的字符将被忽略。

如果声明两个变量,两变量名只有第32个字符不同,那么MATLAB将它们当作同一变量对待

无论什么时侯,你将一个数值赋值于一个变量名,那么MATLAB将自动建立一个double型变量。

char型的变量包括由16位数值构成的标量或数组,每一个16位数代表一个字符。

这个类型经常用于字符串操作,当一个字符或字符串赋值于一个变量名时,系统会自动建立一个char型变量。

注意一个数组每一行元素的个数必须完全相同,每一列元素的个数也必须完全相同.像[123;45];这样的表达式是非法的,因为第一行有3个元素,第二行有只有2个元素.

当我们创建一个数组时,不是每一个元素都必须定义.如果要定义一个特殊的数组,或只有一个或几个元素没有定义,那么之前的那些元素将会自动创建,并初始化为0.例如,如果数组c事先没有定义,语句c(2,3)=5将会创建一矩阵c=

000

005

相似地,指定一个值赋予一个存在的数组,但超过了这个数组的大小。

例如,假设存在一数组d=[12],下面这个语句d(4)=4;将会制造出数组d=[1204].

克隆运算符指定一系列的数值,它指定了这个系列数的第一值,步增和最后一个值。

它的一般顺序始下:

first:

incr:

last。

first代表数组的每一个值,incr代表步增量,last代表这个数组的最后一个值。

如果步增量为1,那么步增量可省略,而变成了first:

last格式。

捷径表达式可以联合转置运算符(’)来初始化行向量,或更加复杂的矩阵。

转置运算

符可以在需要的情况下完成行和列的转换。

g=1:

4;h=[g’g’]或h=h’

Øzeros(n)创建一个n×n零矩阵

Øzeros(n,m)创建一个n×m零矩阵

Øzeros(size(arr))创建一个与数组arr同型的零矩阵

Øones(n)创建一个n×n元素全为1矩阵

Øones(n,m)创建一个n×m元素全为1矩阵

Øeye(n)创建一个n×n的单位矩阵

Øeye(n,m)创建一个n×m的单位矩阵

Ølength(arr)返回一个向量的长度或二维数组中最长的那一维的长度

Øsize(arr)返回指定数组的行数和列数

 

my_val=input('Enteraninputvalue:

')

当这个语句被编译时,MATLAB打印出字符串enteraninputvalue:

然后等待用户回复.如果要只输入一个数,那么只需要直接键入,如果要输入一个数组,则必须带上中括号([]).管怎样,当按下回车键时.在窗口输入的任何值都会被储入变量my_val.如果只按下回车键,么

这个变量就存储了一个空矩阵.

如果input函数中有字符's'做为它的第二个参数,输入的数据就被当字符串.因此,语句>>in1=input('enterdata:

');

Enterdata:

1.23

把数值1.23存储到in1中.而语句>>in2=input('enterdata:

','s')

Enterdata:

123

把字符串1.23存储到in2中.

例如,下面两个语句创建了一个2×3×2数组c

>>c(:

:

1)=[1,2,3;4,5,6];

>>c(:

:

2)=[7,8,9;10,11,12];

c(:

:

1)=

123

456

c(:

:

2)=

789

101112

MATLAB以列主导顺序分配数组中的元素。

也就是说,内存先分配第一列的元素,然后第二列,第三列,……以此类推,直到所有列都被分配完。

这种分配方式也适用于多维数组。

数组的第一个下标增长最快,第二个仅次之,依此类推,最后一个变化最慢。

MATLAB的特性之一就是它允许使用者或程序员把一个多维数看作一个一维数组,这个一维数组的长度等于多维数组的元素数。

如果用一个下标访问一个多维数组,那么元素的排列顺序就是内存的分配顺序。

在一般情况下,我们不应使用MATLAB的这一特性。

用单个下标访问多维数组可能会带很多的麻烦。

子数组

arr1=[1.1-2.23.3-4.45.5]

那么arr1(3)为3.3,arr1([14])为数组[1.1-4.4],arr1(1:

2:

5)为数组[1.13.35.5].

对于一个二维数组,克隆运算符可以用于下标来选择子数组。

例如,假设arr2=[123;-2-3-4;345]。

在这种定义下,子数组arr2(1,:

)为[123],子数组arr2(:

1:

2:

3)为

中间用逗号隔开,前面数字代表行,后面的代表列。

end函数返回的值一般为所要下标的最大值.如果end函数显示有不同的下标,那它将在一个表达式内返回不同的值.例如:

arr3=[12345678];那么arr3(5:

end)将会产生数组[5678],arr3(end)将会产生值8.arr4=[1234;5678;9101112]

那么表达式arr4(2:

end,2:

end)将会返回

678

101112

注意第一个end返回值为3(行数),第二个返回值为4(列数).

用子数组赋值时,只要数组的形(行数和列数)和子数组的形相匹配,把子数组放于赋值语句的左边用来更新数组中的值。

>>arr4=[1234;5678;9101112]

>>arr4(1:

2,[14])=[2021;2223]合法

>>arr4(1:

2,[14])=[2021]不合法

在MATLAB中用子数组赋值和用值直接赋值有很大的不同。

如果用子数组赋值,那么只有相应的值得到更新,而其他的值保持不变。

另一方面,直接赋值,则数组的原有内容全部删除并被新的值替代。

用一标量来给子数组赋值:

位于赋值语句的右边的标量值总是能匹配左边数组的形。

这个标量值将会被复制到左边语句中所对应的元素。

arr4=[1234;5678;9101112],

>>arr4(1:

2,1:

2)=1,则1256均赋值为1。

disp函数需要一个数组参数,它将值将显示在命令窗口(TheCommandWindows)中。

如果这个数组是字符型(char),那么包含在这个数组中的字符串将会打印在命令窗口(TheCommandWindows)中。

此函数可联合num2str(将一个数转化为字符串)和int2str(将一个整数转化为字符串)来产生新的信息,显示在命令窗口(TheCommandWindows)中。

str=['thevalueofpi='num2str(pi)];

disp(str);

用fprintf函数格式化输出数据

fprint(format,data)

其中format用于代表一个描述打印数据方式的子符串,data代表要打印的一个或多个标

量或数组。

format包括两方面的内容,一方面是打印内容的文本的提示;另一方面是打印的格式。

例如,函数fprintf('Thevalueofpiis%6.2f\n',pi)将会打印出'Thevalueofpiis3.14',后面带有一个换行符。

转义序列%6.2代表在本函数中的第一个数据项将占有6个字符宽度,小数点后有2位小数。

fprintf函数有一个重大的局限性,只能显示复数的实部。

当我们的计算结果是复数时,

这个局限性将会产生错误。

在这种情况下,最好用disp显示数据。

MATLAB用一种特殊的复杂形式来存储数据,包括了许许多多的细节,例如变量名和变量类型,数组的大小,以及所有变量值。

一个在任何一个平台上创建的MAT文件(pc,mac,unix)在另一个平台上都可以应用。

它的缺点是MAT文件的存储格式不能被其他程序读取。

如果一个数据必须由其他程序所读取,那么必须转化为ASCII码,并将这些数值写到一个以ASCII码为编码的文件中。

但是,当以ASCII的形式存储,像变量名和变量类型这样的信息就会丢失,产生的数据结果将会更大。

Save函数

MATLAB能够用Load函数加载由其他程序创建的ascii格式的数据文件。

它首先检查所要加载的文件是mat文件还是ascii文件。

如果在load语句中加入ascii中,则强制MATLAB把这个文件看作ASCII文件。

这个文件的内容将会被转化为一个MATLAB的数组,这个数组名就所要加载的文件名。

例如,假设一个名为x.dat的ascii文件包括下列数据:

1.233.146.28

-5.17.000

那么“loadx.dat”将会在当前工作区创建一个2×3数组x,包含数据值。

MATLAB在数组运算中提供了两种不同类型的运算,一种是数组运算(arrayoperations),一种是矩阵运算(matrix).数组运算可以用于数组与标量的运算.当一个数组和一个标量进行运算时,标量将会和数组中的每一元素进行运算.

为了使表达的值精确,MATLAB建立了一系列的规则控制运算的层次或顺序。

这些规则一般情况下遵循代数的运算法则。

数学运算的顺序如表2.7。

2.10.1选择性结果

与数学的函数不同,MATLAB函数返回一个或多个值给调用函数。

max函数就是这样的一个例子。

这个函数一般情况下返回输入向量中的最大值,但是它返回的第二个参数是输入向量中的最大值在向量中的位置。

例如,语句

maxval=max([1-56-3])

返回的结果为maxval=6,但是要有两个返回值,那么这个函数包括最大所处的位置。

[maxvalindex]=max([1-56-3])

将会产生结果maxval=6,和index=3.

2.10.2带数组输入的MATLAB函数的应用

许多MATLAB函数定义了一个或多个标量输入,产生一个输出。

例如,语句y=sin(x)计算了x的正弦,并将结果存储到y变量中。

如果这些函数接受了输入值构成的数组,那么MATLAB将一一计算出每个元素所对应的值。

2.10.3常见的MATLAB函数

注意与大多数的计算语言不同,许多的MATLAB函数能够正确计算出复数结果.MATLAB自动计算出正确的结果,尽管其结果可能是虚数和复数.例如,在C和Fortan语言中运行函数sqrt(-2)时将会出现运行时错误.相反地,MATLAB将会产生虚部答案.

2.11画图入门

MATLAB的扩展性和机制独立的画图功能是一个极其重要的功能.这个功能使数据画图变得十分简单.画一个数据图,首先要创建两个向量,由x,y构成,然后使用plot函数.

plotline([00],[11],[24],[39],'k--');输出两点之间的直线图

给图增加标题和坐标轴标签将会用到title,xlabel,ylable函数(\bf加粗后面的文字)。

调用每个函数时将会有一个字符串,这个字符串包含了图象标题和坐标轴标签的信息。

用grid命令可使网格线出现或消失在图象中,gridon代表在图象中出现网格线,gridoff代表去除网格线。

x=0:

1:

10;

y=x.^2-10*x+15;

plot(x,y);

title('Plotofy=x.^2-10*x+15');

xlabel('x');

ylabel('y');

gridon;

2.11.2打印图象

print命令的一般形式如下:

print<选项><文件名>

如果没有文件名,这个命令就会命令打印机打印当前图片。

如果带有文件名,那么这个命令就会打印这个图片到指定的文件。

有许多的选项指定输出到文件或打印机的格式。

一个最重要的选项是-dtiff.这个选项指定输出图片的格式是标签影像档案格式(TIFF)。

因为在PC,Mac和UNIX平台上的文字处理软件都支持这种格式。

这就使得在文档中插入MATLAB图象变得十分的简单。

下面这个命令将会创建一个TIFF格式的当前图象的图片,并保存在一个叫abc.tif的文件中。

x=-pi:

2*pi/300:

pi;

y=sin(x);

plot(x,y);print-dtiffabc.tif

你也可以选择图象窗口中“file/export”选项来创建tiff图片。

2.11.3联合作图

在同一坐标内作出多个函数的图象的情况是十分常见的。

plot函数的格式如下所示:

x=0:

pi/100:

2*pi;

y1=sin(2*x);

y2=2*cos(2*x);

plot(x,y1,x,y2);

2.11.4线的颜色,线的形式,符号形式和图例

MATLAB允许程序员选择轨迹的颜色,轨迹的形式,和符号的类型.在X,Y向量参数后带有这些属性的字符串的plot函数,可以选择这些细节.这些属性字符串包括三个方面:

第一方面指定轨迹的颜色,

第二方面指定符号的类型,

第三方面指定线的类型.

这些属性字符串可以任意的混合使用.如果有多个函数,每个函数都有它自己的属性字符串.

例如,函数y=x2-10x+15的图象,曲线为红色的虚线,重要的数值用蓝色的小圆圈表示.

x=0:

1:

10;

y=x.^2-10.*x+15;

plot(x,y,'r--',x,y,'bo');

我们可以用legend来制作图例。

它的基本的形式如下

legend('string1','string2',...,pos)

其中string1,string2等等是与轨迹标签名,而pos是一个整数,用来指定图例的位置。

用legendoff命令将能去除多余的图例。

一个完整的图象例子将会显示图2.7中,产生这个图象的语句如下所示。

图2.7在同一坐标系内,显示了f(x)=sin2x和它的微分函数的图象,用黑实线代表f(x),用红虚线代表它的微分函数。

图中有标题,坐标轴标签和网格线。

x=0:

pi/100:

2*pi;

y1=sin(2*x);

y2=2*cos(2*x);

plot(x,y1,'k-',x,y2,'b--');

title('Plotoff(x)=sin(2x)anditsderivative');

xlabel('x');

ylabel('y');

legend('f(x)','d/dxf(x)')

gridon;

 

打印数据既可以用对数尺度,也可以用线性尺度。

在x,y轴上使用这两种尺度的一种或两种可以组合形成4种不同的坐标系。

每一种组合者有一个特定的函数。

1.plot函数的x,y均用线性尺度

2.semilogx函数x轴用对数尺度,y轴将用线性尺度

3.semilogy函数x轴用线性尺度,y轴用对数尺度

4.loglog函数两坐标轴将会都用对数尺度。

这四个函数在意义上是等价的,只是坐标轴的类型不同。

每一个图象的例子如图2.8所示。

一些MATLAB命令似乎不能确定它是个函数还是一个命令。

例如,有时axis它好像是命令,有时它好像是函数。

有时我们把它当作命令:

axison,在其他时候,我们把他当作函数:

axis([020035])。

遇到这样的情况怎么办?

一个简单的答案是MATLAB命令是通过函数来实现的。

MALTAB编译器无论什么时候遇到这个命令,它都能转化为相应的函数。

它把命令直接当作函数来用,而不是应用命令语法。

下面的两个语句是等价的:

axison;

axis('on');

无论什么时候MATLAB遇到一个命令时,它都会转化一个函数,当命令的参数当作字符串看作相对应函数的参数。

所以编译器翻译如下命令:

garbage123

为garbage('1','2','3')

注意只有带有字符参数的函数才能当作命令。

带有数字参数的函数只能被当作函数。

这就是为什么axis有时当作命令,有时被当作函数。

在一般情况下,创建一个新的图象就要用到一个plot命令,前面的数据就会自动消失。

这种行为可以通过使用hold命令得到修改。

当holdon命令执行后,所有的新的图象都会叠加在原来存在的图象。

holdoff命令可恢复默认情况,用新的图象来替代原来的图象。

x=-pi:

pi/20:

pi;

y1=sin(x);

y2=cos(x);

plot(x,y1,'b-');

holdon;

plot(x,y2,'k--');

holdoff;

legend('sinx','cosx');

上面的代码与下面的相同

x=-pi:

pi/20:

pi;

y1=sin(x);

y2=cos(x);

plot(x,y1,'b-',x,y2,'k--');

legend('sinx','cosx');

我们用figure函数来选择当前窗口。

这个函数的形式为“figure(n)”,其中n代表图象数。

当这个函数被执行后,图n将会变为当前图象,执行所有的画图命令。

如果这个图象窗口不存在,那么MATLAB将会自动创建。

当前图象也可以用鼠标单击选择。

gcf函数用于当于返回当前图象数。

当你需要知道当前图象数时,你就把这个函数写入M文件中。

figure

(1);

x=x:

0.05:

2;

y1=exp(x);

plot(x,y1);

figure

(2);

y2=exp(-x);

plot(x,y2);

subplot(m,n,p)

这个命令在当前图象窗口创建了m×n个子图象,按m行,n列排列,并选择子图象p来接受当前所有画图命令。

这些子图象以从左向右从上到下编号。

例如,命令subplot(2,3,4)将会创建6个子图象,而且subplot4是当前子图象。

如果subplot命令创建的新坐标系与原来的坐标系相冲突,那么原来的坐标系将会被自动删除。

figure

(1);

subplot(2,1,1);

x=-pi:

pi/20:

pi;

y=sin(x);

plot(x,y);

title('Subplot1title');

subplot(2,1,2);

x=-pi:

pi/20:

pi;

y=cos(x);

plot(x,y);

title('Subplot2title');

在plot命令中,在自变量和函数之后被指定,形式如下:

plot(x,y,'PropertyName',value,...)

文本的字体通可以通过streammodifiers修改。

一个streammodifier是一个特殊的字符序列,用来告诉编译器改变它的行为。

最普通的streammodifiers是:

\bf黑体

\it斜体

\rm恢复正常字体

\fontname字体的名字

\fontsize字体的大小

_{xxx}xxx做为某字符的上标

^{xxx}xxx做为某字符的下标

一旦一个streammodifier插入一个文本字符串中,它持续发挥作用,直到这个字符串的结束或消失。

如果一个modifier后在跟着一个{},只有{}中的文本起作用。

如果要打印转义符\,{,},_,或^就必须在前面加上一个反斜杠。

MATLAB中包括一个重要的函数叫做polar,它用于在极坐标系中画图。

这个函数的基本形式如下:

polar(theta,r)

其是theta代表一个弧度角数组,r代表一个距离数组。

它用来画以角度为自变量的函数的极坐标图是非常有用的。

一旦MATLAB成功创建一个图象,那么用户就可以运画图工具条上的GUI工具来编辑和注释这些图象。

图3.11向大家展示了这些可用的工具,它允许我们添加直线,带箭头的线,还有文本。

当工具条中的编辑按钮()被选中,注释和翻译工具将会变得可用。

还有,当编辑按钮被按下,单击图象中的任何一条线或一个文本,它们将会处于可编辑状态,如果双击它们将会弹出一个属性窗口,允许我们修改这个对象的每一项属性。

注:

函数pie与前面其他的画图有所不同。

为了创建一个饼图,程序员把数组x传递给函数,函数计算出每一个元素占全部元素和的百分比。

例如,如果数组x是[1234],那么pie函数将会计算出第一个元素1占全部元素和的10%(1/(1+2+3+4)),第二个元素占20%等等。

这个函数将会占这个百分比画出相应的饼图。

函数pie也支持选择性参数,它是eplode。

如果存在的话,explode是一个逻辑数组,包含元素1和0。

如果explode的值为1,那么它对应的扇区就从整体中分离出来。

在前面的所有作图,我们必须创建数组,并把这些数组传递给作图函数。

MATLAB提供了两个函数可以直接作出图象,而不需要创建中间数据数组。

它们是函数数ezplot和fplot。

ezplot调用函数的形式如下

ezplot(fun);

ezplot(fun,[xminxmax]);

ezplot(fun,[xminxmax],figure);

其中,fun代表一个字符串,用来表示要画的基本表达式。

选择性参数[xmin,xmax]指定自变量的取值范围。

如果它不存在的话,函数自变量的范围从-2π到2π。

选择性参数图来用指定图象数。

函数fplot与ezplot相类似,但更加精确。

前两个参数与函数ezplot中的相同,但是函数fplot还有其他优点。

1.函数fplot是适应性的,它意味着在自变量范围内函数突然变化显示更多的点。

2.函数fplot支持TEX命令,用来指定坐标图的标题和坐标轴标签,而函数ezplot则不能。

在一般情况下,在画函数图象时,你应当使用函数fplot。

函数ezplot和fplot是第五章中“函数的函数”的具体例子。

标准的MATLAB柱状图函数应为hist。

函数的形式如下:

hist(y)

hist(y,nbins)

his(y,x);

[n,xout]=hist(y,...)

第一个函数创建并画出一个10等分的柱状图,而第二种形式创建的是以nbins为宽度(柱状的个数)的柱状图。

第三个函数允许用户用数组x指定柱状图中长条的中心。

这个函数创建柱状图长条都是以数组中的元素为中心的。

这三种形式均能创建柱状图。

这个函数的最后一种形式创建了一个柱状图并返回了一个数组xcout,在数组n中的每一长条的数目,而实际上并没有创建一个图象。

MATLAB提供了函数rose用来创建极坐标系中的柱状图。

对于研究角度的分布非常有。

在一般情况下,三维图象常用于显示以下两类数据。

1.两个变量是同一自变量的函数,当你希望显示自变量重要性时,你可以用三维作图表示;

2.一个变量是另外两个变量的函数。

我们可以用plot3函数进行三维曲线的作图。

这个函数与二维plot函数非常相似,除了每一个点用x,y,z表示,而不用x,y表示。

它的最简

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

当前位置:首页 > 解决方案 > 工作计划

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

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