MATLAB软件设计上机指南.docx

上传人:b****1 文档编号:2417852 上传时间:2022-10-29 格式:DOCX 页数:30 大小:376.84KB
下载 相关 举报
MATLAB软件设计上机指南.docx_第1页
第1页 / 共30页
MATLAB软件设计上机指南.docx_第2页
第2页 / 共30页
MATLAB软件设计上机指南.docx_第3页
第3页 / 共30页
MATLAB软件设计上机指南.docx_第4页
第4页 / 共30页
MATLAB软件设计上机指南.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

MATLAB软件设计上机指南.docx

《MATLAB软件设计上机指南.docx》由会员分享,可在线阅读,更多相关《MATLAB软件设计上机指南.docx(30页珍藏版)》请在冰豆网上搜索。

MATLAB软件设计上机指南.docx

MATLAB软件设计上机指南

 

MATLAB软件设计

 

应用技术学院

2008-6

第一章MATLAB程序设计

 

一、M文件

v用户如想灵活应用matlab去解决实际问题,充分调用matlab的科学技术资源,就需要编辑m文件

v包含matlab语言代码的文件称为m文件,其扩展名为m。

v编辑m文件可使用各种文本编辑器。

vm文件的类型是普通的文本文件,我们可以使用系统认可的文本文件编辑器来建立m文件。

如dos下的edit,windows的记事本和word等。

v具体的创建方法:

1.在matlab命令窗口点击file菜单

newm-file

 

2..m文件

m文件的语法类似于c语言,但又有其自身特点。

它只是一个简单的ASCII码文本文件,执行程序时逐行解释运行程序,matlab是解释性的编程语言。

m文件有两类独立的m文件—称命令文件、可调用m文件—称函数文件

(1).命令文件—简单的m文件

命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。

没有输入输出参数

v命令文件包括两部分:

注释文件和程序文件

%RANKNumberoflinearlyindependentrowsorcolumns.

%K=RANK(X)isthenumberofsingularvaluesofX

%thatarelargerthanMAX(SIZE(X))*NORM(X)*EPS.

%K=RANK(X,tol)isthenumberofsingularvaluesofXthat

%arelargerthantol.

%Copyright(c)1984-94byTheMathWorks,Inc.

s=svd(x);

if(nargin==1)

tol=max(size(x))*max(s)*eps;

end

r=sum(s>tol);

(2).matlab内置函数文件

matlab自定义的函数文件称内置函数文件

调用内置函数的方法:

使用函数名并给出相应的入口、出口参数即可。

例如:

sin.m函数——用typesin查不到。

调用格式:

y=sin(2*x)

实际应用中:

x=0:

2*pi/180:

2*pi;

y=sin(2*x)

plot(x,y)

函数m文件的格式:

function返回变量=函数名(输入变量)

注释说明语句段

程序语句段

特定规则:

1.函数m文件第一行必须以单词function作为引导词,必须遵循如下形式:

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

2.m文件的文件名必须是<函数名>.m。

3.程序中的变量均为局部变量,不保存在工作空间中。

其变量只在函数运行期间有效

二、微分方程

一般微分方程式描述系统内部变量的变化率如何受系统内部变量和外部激励,如输入,的影响。

当常微分方程式能够解析求解时,可用MATLAB的符号工具箱中的功能找到精确解。

在本书的后面将介绍该工具箱的一些特点。

在微分方程难以获得解析解的情况下,可以方便地在数值上求解。

为了说明起见,考虑描述振荡器的经典的范得波(VarderPol)微分方程。

与所有的数值求解微分方程组的方法一样,高阶微分方程式必须等价地变换成一阶微分方程组。

对于上述微分方程,通过重新定义两个新的变量,来实现这种变换。

令y1=x且y2=dy/dx

则dy1/dt=y2

根据这个微分方程组,可用MATLAB的函数ode23和ode45求出系统随时间变化的运动情况。

调用这些函数时,需要编写一个函数M文件,给定当前时间及y1和y2的当前值,该函数返回上述导数值。

MATLAB中,这些导数由一个列向量给出。

在本例中,这个列向量为yprime。

同样,y1和y2合并写成列向量y。

所得函数M文件是:

functionyprime=vdpol(t,y);

%VDPOL(t,y)returnsderivativesoftheVanderPolequation:

%

%x‘‘-mu*(1-x^2)*x‘+x=0(‘=d/dx,‘‘=d^2/dx^2)

%

%lety

(1)=xandy

(2)=x‘

%

%theny

(1)‘=y

(2)

%y

(2)‘=MU*(1-y

(1)^2)*y

(2)-y

(1)

globalMU%choose0

yprime=[y

(2)MU*(1-y

(1)^2)*y

(2)-y

(1)];%outputmustbeacolumn

给定这个完整地描述微分方程的函数,计算结果如下:

>>globalMU%defineMUasaglobalvariableintheCommandWorkspace

>>MU=2;%setglobalparametertodesiredvalue

>>[t,y]=ode23(‘vdpol‘,0,30,[1;0]);%to=0,tf=30,yo=[1;0]

>>y1=y(:

1);%firstcolumnisy

(1)versustimepointsint

>>y2=y(:

2);%secondcolumnisy

(2)

>>plot(t,y1,t,y2,‘--‘)

>>xlabel(‘Time,Second‘),ylabel(‘Y

(1)andY

(2)‘)

>>title(‘VanderPolSolutionformu=2‘)

当mu=2时的范得波方程的运动曲线

 

第二章流程控制与绘图

一、流程控制

1.For循环

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

For循环的一般形式是:

forx=array

{commands}

end

在for和end语句之间的{commands}按数组中的每一列执行一次。

在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:

n)。

例如,

»forn=1:

10

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

end

»x

x=

Columns1through7

0.30900.58780.80900.95111.00000.95110.8090

Columns8through10

0.58780.30900.0000

换句话,第一语句是说:

对n等于1到10,求所有语句的值,直至下一个end语句。

第一次通过For循环n=1,第二次,n=2,如此继续,直至n=10。

在n=10以后,For循环结束,然后求end语句后面的任何命令值,在这种情况下显示所计算的x的元素。

For循环的其它重要方面是:

1.For循环不能用For循环内重新赋值循环变量n来终止。

»forn=1:

10

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

n=10;

end

»x

x=

Columns1through7

0.30900.58780.80900.95111.00000.95110.8090

Columns8through10

0.58780.30900.0000

2.语句1:

10是一个标准的MATLAB数组创建语句。

在For循环内接受任何有效的MATLAB数组。

»data=[39456;716-15]

data=

39456

716-15

forn=data

x=n

(1)-n

(2)

end

x=

-4

x=

-7

x=

46

x=

1

3.For循环可按需要嵌套。

forn=1:

5

form=5:

-1:

1

A(n,m)=n^2+m^2;

end

disp(n)

end

1

2

3

4

5

»A

A=

25101726

58132029

1013182534

1720253241

2629344150

4.当有一个等效的数组方法来解给定的问题时,应避免用For循环。

例如,上面的第一个例子可被重写为

»n=1:

10;

»x=sin(n*pi/10)

x=

Columns1through7

0.30900.58780.80900.95111.00000.95110.8090

Columns8through10

0.58780.30900.0000

两种方法得出同样的结果,而后者执行更快,更直观,要求较少的输入。

5.为了得到最大的速度,在For循环(While循环)被执行之前,应预先分配数组。

例如,前面所考虑的第一种情况,在For循环内每执行一次命令,变量x的大小增加1。

迫使MATLAB每通过一次循环要花费时间对x分配更多的内存。

为了消去这个步骤,For循环的例子应重写为

»x=zeros(1,10);%preallocatedmemoryforx

»forn=1:

10

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

end

现在,只有x(n)的值需要改变。

2.While循环

与For循环以固定次数求一组命令的值相反,While循环以不定的次数求一组语句的值。

While循环的一般形式是:

whileexpression

{commands}

end

只要在表达式里的所有元素为真,就执行while和end语句之间的{commands}。

通常,表达式的求值给出一个标量值,但数组值也同样有效。

在数组情况下,所得到数组的所有元素必须都为真。

考虑下列例子:

»num=0;EPS=1;

»while(1+EPS)>1

EPS=EPS/2;

num=num+1;

end

»num

num=

53

»EPS=2*EPS

EPS=

2.2204e-016

这个例子表明了计算特殊MATLAB值eps的一种方法,它是一个可加到1,而使结果以有限精度大于1的最小数值。

这里我们用大写EPS,因此MATLAB的eps的值不会被覆盖掉。

在这个例子里,EPS以1开始。

只要(1+EPS)>1为真(非零),就一直求While循环内的命令值。

由于EPS不断地被2除,EPS逐渐变小以致于EPS+1不大于1。

(记住,发生这种情况是因为计算机使用固定数的数值来表示数。

MATLAB用16位,因此,我们只能期望EPS接近10-16。

)在这一点上,(1+EPS)>1是假(零),于是While循环结束。

最后,EPS与2相乘,因为最后除2使EPS太小。

3.IF-ELSE-END结构

很多情况下,命令的序列必须根据关系的检验有条件地执行。

在编程语言里,这种逻辑由某种If-E

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

当前位置:首页 > 求职职场 > 面试

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

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