文档库 最新最全的文档下载
当前位置:文档库 › MATLAB 面向对象编程(OOP)-在MATLAB中设计用户类

MATLAB 面向对象编程(OOP)-在MATLAB中设计用户类

MATLAB 面向对象编程(OOP)-在MATLAB中设计用户类
MATLAB 面向对象编程(OOP)-在MATLAB中设计用户类

MATLAB面向对象编程(OOP)-在MATLAB中设计用户类

在设计MATLAB类时,应包括一组标准的方法以使类的行为与MATLAB环境协调一致并合乎逻辑。根据所设计的类的特点,你不一定要包含所有这些方法,并且你可能会包含一些其它方法以实现类的设计目标。

下表所列为MATLAB类中包含的基本方法。

接下来的几节将讨论每种方法的实现并提供本章中所用例子的参考链接。

类构造方法

特定类的@目录中必须包括一个称为该类的构造函数的M-文件。构造函数的名称与类目录的名称相同(除了@前缀和.m扩展名)。构造函数通过初始化类数据结构和初始化一个类的对象来创建对象。

构造函数编写指南

类构造函数必须执行某些功能,以使对象在MATLAB环境下正确运行。通常,一个类的构造函数必须处理三种可能的输入参量组合:

无输入参数

一个同类对象作为输入参数

用来创建类的对象的输入参数(通常是某类数据)

无输入参数。如果没有输入参数,构造函数应该创建一个默认对象。既然没有输入,你没有用来创建对象的数据,所以只需用空的或默认值来初始化对象的

数据,调用class函数来初始化对象,并将对象作为输出参数返回。这样做有两方面的原因:

u当加载对象到工作空间时,load函数以无参数的方式调用类的构造函数。

u在创建对象数组时,MATLAB调用此类构造函数来向数组中添加对象。

对象输入参数。如果参数列表中的第一个参数是一个同类对象,构造函数应该只是将对象返回。可以用isa函数来确定输入参数是否类的成员。这一构造函数语法的例子见重载+运算符。

数据输入参数。如果输入参数存在且不是本类的对象,那么构造函数就用输入参数创建对象。当然,像在其它函数中一样,你也应在构造函数中对参数进行适当的检查。典型的做法是用varargin作为输入参数,用一个switch语句来控制程序流程。这为我们提供了一种可以适应三种情况:无输入、对象输入、数据输入来创建对象的简单方法。

正是在构造函数的这一部分中,你对对象的数据进行赋值、调用class函数初始化对象并将对象作为输出参数返回。如果需要,可以用superiorto和inferiorto函数来将对象放置到对象层次结构中。

构造函数中class函数的使用

在构造方法中,你通过class函数来将一个对象结构关联到某特定的类。这是通过仅可通过class和isa函数访问的内部类标签实现的。例如,下面class函数的调用将对象p标记为polynom类

p=class(p,’polynom’);

构造方法的例子

有关构造方法的例子请查看下列章节:

Polynom类的构造方法

Asset类的构造方法

Stock类的构造方法

Portfolio类的构造方法

在类目录外识别对象

在类构造方法中使用的class和isa函数同样可以在类目录外使用。表达式isa(a,’classname’);

检查a是否为指定类的对象。例如,如果p是一个polynom对象,下列每个表达式都为真。

isa(pi,’double’);

isa(‘hello’,’char’);

isa(p,’polynom’);

在类目录之外,class函数只接受一个参数(只有在构造函数中,class才可有多于一个参数)。

表达式

class(a)

返回一个包含a的类名的字符串。例如,

class(pi),

class(‘hello’),

class(p),

返回

‘double’,

‘char’,

‘polynom’

用whos函数可以查看MATLAB工作空间中有哪些对象。

whos

Name Size Bytes Class

p1×1156polynom object

display方法

只要没有以分号结束的语句的结果是一个对象,MATLAB就会调用名为display的方法。例如,创建double型的变量a时,MATLAB将调用double的display方法。

a=5

a=

5

你应该定义一个display方法,以使得MATLAB在从你的类引用对象时能够在命令行显示其值。既然MATLAB以字符串显示输出,在许多类中,display 可以仅仅打印变量的名称,然后用char类型转换方法来打印变量内容或值。你必须定义char方法来将对象的数据转换成字符串。

display方法的例子

有关display方法的例子请查看下列章节:

Polynom类的display方法

Asset类的display方法

Stock类的display方法

Portfolio类的display方法

访问对象数据

你需要为你的类编写可以访问对象数据的方法。存取方法有多种实现方式,但所有改变对象数据的方法总是接受一个对象作为输入参数并返回一个数据改变后的新对象。这是必须的,因为MATLAB不支持参数的引用传递(例如,指针)。函数仅能改变其私有的和临时的对象副本。因此,要改变一个已存在的对象,你必须创建一个新的,然后替换那个旧的。

接下来的几节将对set,get,subsasgn和subsref方法的实现技术进行更详细的说明。

set和get方法

set和get方法提供了一种在某些场合方便地访问对象数据的方式。例如,假设你创建了一个MATLAB可以在图中显示箭头的类(可能由已有的MATLAB 线和面片对象构成)。

为了保持接口的一致性,你可以定义set和get方法像MATLAB的set和get函数操作内建图形对象那样来操作箭头对象。set和get是动词,表明了它们执行的操作,但将用户与对象内部隔离了开来。

set和get方法的例子

有关set和get方法的例子请查看下列章节:

Asset类的get方法和Asset类的set方法

Stock类的get方法和Stock类的set方法

属性名方法

除了通常的set方法,你可以编写一个方法来处理对单个属性的赋值。这种方法的名称与属性名称相同。

例如,如果你定义了一个创建emplyee数据对象的类,可能在employee对象中有一个名为salary的字段。那么,你可以定义一个名为salary.m的方法,该方法以一个employee对象和一个值作为输入,并返回设置好指定值的对象。

用subsref和subsasgn进行索引引用

用户类在MATLAB中实现新的数据类型。就像MATLAB内建数据类型那样,通过索引引用来访问对象数据是很有用的。例如,如果A是一个double类的数组,A(i)可以返回A的第i个元素。

作为类的设计者,你可以决定索引引用对对象的含义。例如,假设你定义了一个创建多项式对象的类,这些对象包含了多项式的系数。对多项式对象的索引引用

p(3)

可能返回x3的系数、x=3时多项式的值,或其它的设计预期结果。

通过创建subsref和subsasgn两个类方法,你可以定义类的索引行为。只要对类的对象进行下标引用或赋值,MATLAB就会调用这些方法。如果你没有给类定义这些方法,就没有为该类的对象定义索引功能。

通常,对对象的索引规则与对结构数组的索引规则一样。详情见Structures。

类方法中的行为

如果A是MATLAB基本数据类型之一的数组,那么通过引用索引引用A 的某个值会调用MATLAB内建subsref方法。它不会调用你为那种数据类型重载的任何subsref方法。

例如,如果A是double型的数组,并且在MATLAB路径上有一个

@double/subsref方法,语句B=A(I)不会调用此方法,而是调用MATLAB的内建subsref方法。

对用户自定义类同样如此。只要类方法需要重载的subsref或subsassign功能,它必须通过函数调用来调用重载的方法,而不是用像’()’,’{}’,或’.’之类的操作符。

例如,假设你定义了一个多项式类,类中subsref方法的定义是用下标作为自变量的值来求多项式的值。所以,对于

p=polynom([10-2-5]);

下面的下标表达式返回的是多项式在x=3和x=4处的值。

p([3,4])

ans=

1651

现在假设你像在某个类方法中使用此属性。要这么做,你必须直接调用subsref函数:

y=polyval(p,x);

subs.type=‘()’;

subs.subs={x};

y=subsref(p,subs);%此处需要调用subsref

处理下标引用

在赋值语句的右边对对象使用下标或字段标志符,称为下标引用。在此情况下,MATLAB调用名为subsref的函数。

对象下标引用有三种可能情况-数组索引,元包数组索引和结构字段名:A(I)

A{I}

A.field

每种情况都会导致MATLAB调用类目录下的subsref方法。MATLAB传递两个参数给subsref.

B=subsref(A,S)

第一个参数是被引用的对象。第二个参数S是一个有两个字段的结构数组:u S.type是一个包含’()’,’{}’,或’.’的字符串,指明下标类型。圆括号表示数值数组;花括号表示元包数组,点表示结构数组。

u S.subs是一个元包数组或包含实际下标的字符串。当元包数组包含字符串’:’时,分号用来表示下标。

例如,表达式

A(1:2,:)

使得MATLAB调用subsref(A,S),其中S是一个1×1的结构

S.type=‘()’

S.subs={1:2,’:’}

同样,对表达式

A{1:2}

来说

S.type=‘{}’

S.subs={1:2}

表达式

A.field

S.type=‘.’

S.subs=‘field’

来调用subsref(A,S).

更为复杂的下标表达式是由这些简单的调用构成的。在此情况下,length(S)为下标的层数。例如,

A(1,2).name(3:4)

调用subsref(A,S)时,其中S是一个3×1的结构数组,其值如下:S(1).type=‘()’S(2).type=‘.’S(3).type=‘()’

S(1).subs={1,2}S(2).subs=‘name’S(3).subs={3:4}

如何编写subsref

subsref方法必须对MATLAB传入的下标表达式进行解释。常用的一种方法是用switch语句来判断索引类型和获取实际下标。下列3个代码片段例示了如何对输入参数进行解释。每个例子中,函数必须返回B。

对与数组引用:

switch S.type

case'()'

B=A(S.subs{:});

end

对元包数组:

switch S.type

case'{}'

B=A(S.subs{:});%A is a cell array

end

对结构数组:

switch S.type

case'.'

switch S.subs

case'field1'

B=A.field1;

case'field2'

B=A.field2;

end

end

subsref方法的例子

有关subsref方法的例子请查看下列章节:

Polynom类的subsref方法

Asset类的subsref方法

Stock类的subsref方法

Portfolio类的subsref方法

处理下标赋值

在赋值语句的左边对对象使用下标或字段标志符,称为下标赋值。在此情况下,MATLAB调用名为subsasgn的函数。对象下标赋值有三种可能情况-数组索引,元包数组索引和结构字段名:

A(I)=B

A{I}=B

A.field=B

上述每条语句都会以下列格式调用subsasgn

A=subsasgn(A,S,B)

第一个参数,A,是被引用的对象。第二个参数,S,与subsref中的相应参数具有相同的字段。第三个参数,B,是新的值。

subsasgn方法的例子

有关subsref方法的例子请查看下列章节:

Asset类的subsasgn方法

Stock类的subsasgn方法

方法中的对象索引

如果在类方法中进行下标引用,MATLAB用其内建的subsref函数来对方法所在类中的数据进行访问。如果该方法访问其它类中的数据,MATLAB会调用那个类中重载的subsref函数。对下标赋值和subsasgn来说也是这样。

下例所示为employee类中定义的一个testref方法。该方法对其所在类的对象的address字段进行引用。对此,MATLAB使用内建的subsref函数。testref

还对另一个类中的相同字段进行了引用,此时所用的是那个类中重载的subsref。

%----EMPLOYEE class method:testref.m----

function testref(myclass,otherclass)

myclass.address%use built-in subsref

otherclass.address%use overloaded subsref

下面创建一个employee对象和一个company对象

empl=employee('Johnson','Chicago');

comp=company('The MathWorks','Natick');

employee类中中的testref方法被调用。MATLAB仅在访问方法所在类之外的数据时才调用重载的subsref。

testref(empl,comp)

ans=%built-in subsref was called

Chicago

ans=%@company\subsref was called

Executing@company\subsref...

Natick

定义对象的end索引

当在对象索引表达式中使用end时,MATLAB调用对象的end类方法。要想在与你的类的对象有关的索引表达式中能够使用end,你必须为类定义一个end方法。

end方法的调用序列为

end(a,k,n)

其中a是用户对象,k是表达式中end所在位置的下标,n是表达式中的总下标数。

例如,表达式

A(end-1,:)

MATLAB会以下列参数调用对象A中定义的end方法

end(A,1,2)

即,end语句为第一个下标元素,共有2个下标元素。类方法end必须返回第一维最后一个元素的下标值。在你的类中实现end方法时,必须保证它返回一个对对象来说合理的值。

用对象来索引对象

当MATLAB碰到下标为一个对象时,它会调用对象中定义的subsindex方法。例如,假设你有一个对象a,并且你想用此对象来对另一对象b进行索引。

c=b(a);

subsindex方法可能仅仅是简单地将对象转换成double格式然后用其作为下标,如下列代码所示例

function d=subsindex(a)

%SUBSINDEX

%convert the object a to double format to be used

%as an index in an indexing expression

d=double(a);

需要注意的是,subindex的值是基于0的,而不是基于1的。

类转换方法(Converter Methods)

类转换方法是与其它类同名的类方法,例如char或double。类转换方法接收一个类的对象作为输入并输出另一个类的对象。类转换方法是你能够u使用另一个类中定义的方法

u确保包含多个类的对象的表达式能够正确执行。

类转换函数的调用形式如下

b=classname(a)

其中a是classname之外某个类的对象。在这种情况下,MATLAB会在对象a

的类目录中查找名为classname的方法。如果输入对象已经是classname类,那么MATLAB会调用仅仅返回输入参数的构造函数,

类转换方法的例子

有关类转换方法的例子请查看下列章节:

Polynom类到Double类的转换

Polynom类到Char类的转换

-----------------------------------------------------------------------------------

MATLAB中的类

2008-02-2015:11

4.4类(class)

类是一种数据类型,与普通的数据类型不同的是类不仅包含数据,还包含对数据的操作,类把数据和数据操作方法封装在一起,作为一个整体参与程序的运行。

类具有课继承性,创建一个新的类的时候,可以在一个基类中添加成员派生出新类。类的变量和类的实例是不同的,类的实例是动态分配的内存区域,通常称类的实例维“对象”,同一个类可以有不同的实例存在,他们个子有自己的数据,但是数据操作方法是相同的。类的变量可以看作是一个指针,指向类的实例。在MATLAB中,为了更好地进行数据的封装,更加抽象地描述对象,也定义了类。图2.4.1给出了MATLAB中类的层次结构图,在建立类的结构的时候,可以根据这一层次结构进行设计和继承。

4.4.1建立一个类

通常一个类应该包含四个基本的成员函数:

构造函数――与类名相同,可以在其中完成成员初始化的工作;

显示函数――名为display,用于显示成员的数据;

赋值函数――名为set,用于设置类成员的数值;

取值函数――名为get,用于读取类成员的函数。

与C++的类不同的是,MATLAB的类不需要特别的析构函数。如果类用到了一些特殊的内容需要释放的话,可以编写一个成员函数,比如classclear,用包来释放所占用的资源。

下面用一个简单的例子类介绍一些类如何使用。定义一个名为list的类,它有两个数据成员x和y,希望通过一个成员函数prod()来获取x和y的乘积。本例的类是这样的:

类名:list

成员变量:x,y

成员函数:

list:构造函数

display:显示函数

get:取值函数

set:赋值函数

prod:计算函数

现在就来建立它。

(1)在工作目录上建立一个子目录(以笔者的习惯为例):

cd E:\MyProgram\matlab7\chap4

mkdir@list

类名前面要加上一个字符'@’,对于这样形式的目录里所有保存的M文件,MATLAB都认为是类的成员函数。

(2)编写5个成员函数的M文件保存在E:\MyProgram\matlab7\chap4\@list 目录下:

(3)在MATLAB命令行中进行如下操作:

cd E:\MyProgram\matlab7\chap4

d=list(11,22)

list class:

x=11

y=22

prod(d)

ans=

242

d=set(d,'x',7);

get(d,'x')

ans=

7

prod(d)

ans=

154

下面对操作步骤中的细节加以详细解释。

1.类的创建

创建一个新的类,首先需要在构造函数中用结果类型struct建立一个结构变量,包含所需要的成员变量。注意,这里不用考虑成员函数。然后用class命令将七转换成类,并返回。class明年的语法很简单:

类变量=class(结构变量,'类名');

这里类名和构造函数名相同。程序中要创建这个类的新的变量时,只需调用其构造函数,返回的变量就属于这个类的了。当然,这里的list.m太过简单,没有任何变量检查,使用中还可以根据情况添加一些扩充功能。

2.类成员变量的赋值

本例中,类的成员变量是在构造函数中赋值的。MATLAB中,类成员变量都是private的,必须在成员函数中访问,因此就不能箱struct那样,用d.x和d.y 等形式访问其成员变量了。不过,这个问题不严重,编个专门的成员函数get

就行了。另外,成员函数的调用有个跟普通的函数一样。注意在get和set函数中,成员变量是以字符串的形式指定的,要通过字符串比较的办法进行区分,然后对输出变量进行赋值。本例中的set函数支持同时对两个成员变量赋值,因此用到了不定长输入产生表varargin,例如:

d=set(d,'x',12)%只对其中一个成员变量赋值

list class:

x=12

y=22

d=set(d,'x',23,'y',34)%同时对两个成员变量赋值

list class:

x=23

y=34

3.成员变量的显示

成员被变量display不是必须的,不过她可以显示类的有用信息。如果在命令行上输入一个类变量,不加分号就回车,这时其display函数就自动调用。在该函数中,可以显示任何与该类信息相关的信息,当然也可以是不相关的。

4.工作目录

一个工作目录吓可以仿真多个类目录。通常可以把大程序按功能分开,用类重新组织起来,使程序更具有结构化,增强其可读性。

4.4.2在类中引用方法

1.实现方法函数

类的方法(class methods)是指M文件编写的以类的对象作为输入产生的函数。一个特定的类的方法通常要保存在这个类的目录中。如上一小节中@list的方法函数存储在@list路径下。

对方法汗的调用方式和对普通函数的调用方式是相同的,其命令格式为:

[输出1,输出2,…]=方法名称(对象名,参数1,参数2,…);

但是必须注意,方法函数中如果对类的成员变量进行了改变,就必须将改变后的类变量作为输出变量返回,否则在原工作空间中的类变量的成员变量不能得到更新。例如:

d=list(10,20);

set(d,'x',23,'y',34);

d

list class:

x=10

y=20

可以看到,调用set函数而不将返回结果重新赋值给d,着d的x和y两个成员变量仍然保持原来的数值。

2.私有方法

私有方法是指只能被同类的其他方法所调用的方法,其对应的M文件存在类目录的private子目录下。例如,如果list类有私有方法,就应该将它们保存在

@list/private目录下。私有方法的作用域子限于list这个类中,而不能够被MATLAB命令行调用,或者被上一层类的方法调用。

3.辅助函数

在设计类的时候,有些工作需要由;一些特定的函数来完成,但这些函数并不一定直接对类的对象操作,这些函数通常被称为辅助函数(helper funtions)。辅助函数可以是类方法文件中的一个子函数,也可以是一个独立的私有函数。4.类方法的调用

在MATLAB中,可以采用与调试程序相同的命令对类方法进行调试,唯一不同的是对类方法的调试必须下命令行中添加类的路径。例如使用dbstop命令(停止调试)对display进行调试的时候,需要用如下的命令:

dbstop@list/display

当然,也可以在M文件编辑/调试器中直接设置断点进行调试。

4.4.3类的继承和集成

MATLAB中的类对象可以集成其他类对象的属性,当一个子类从父类中继承了属性后,在子类中将包括父类的所有成员和方法,父类的方法也可以使用之类继承的法拉国防。继承的概念是面向对象编程中的一个重要特性,子类可以很方便的引用父类中已经定义的方法。类的继承由两种方式:简单继承和多重继承。类集成的概率有点类似于嵌套,是指类对象的域中包括另外一个对象的情形。

1.简单继承

简单继承是指子类从一个父类继承属性,子类中也包括它自己的一些新的属性。对于父类的操作可以应用到子类上来,而对于子类中不属于父类的方法则不可以应用到父类上去。

通常可以使用class函数来实现类的继承。

子类对象名=class(子类对象名,'子类类名',父类对象名);

2.多重继承

多重继承是指子类从多于一个父类中继承属性。子类中包含所有从父类中继承来的属性,还包括它自己的属性。

3.类的集成

类的集成是指一个类可以把另外的类作为自己的一个成员变量。被嵌入的类对象的方法函数值能通过外层对象的方法函数调用。

用matlab制作简单仿真动画

用matlab制作简单仿真动画,并生成.avi格式的电影文件 MATALB知识点2008-05-01 13:17:54 阅读152 评论0 字号:大中小订阅 第一种形式:利用for循环,在一定时间内控制图形窗口图像的显示,产生一段动态的演示过程: 如下: set(gcf,'color','green'); grid on; set(gca,'zlim',[-10,10]'); set(gca,'xlim',[-10,10]); set(gca,'ylim',[-10,10]); for i=1:10 set(gca,'view',[-i*3.75,3*i] ); pause(0.2); end 第二种形式:利用moviein和movie函数,现将生成的动画存入一个由movien 函数定义的数组中,每一帧为数组的一个元素,最后用movie重复演示,movie后面的数字代表演示次数。 x=[-30:0.2:30]; y=[-30:0.2:30]; [x,y]=meshgrid(x,y); n=5; M = moviein(n); for i=1:n z=sin(sqrt(2*(x).^2+2*(y).^2)-2*pi*i/10); zz=plot3(x,y,z,'parent',gca); mesh(x,y,z); grid on; colormap([0,0.9,0.5]); light('position',[1,1,2],'style','local','color','white'); material([0.5,0.4,0.3,10,0.3]); set(gca,'zlim',[-10,10]'); M(i)=getframe(gca); end movie(M,20) 创建电影剪辑文件,并存储起来,如下: aviobj=avifile('文件名.avi','fps',3);%定义一个avi文件, %AVIOBJ = AVIFILE(FILENAME,'PropertyName',VALUE,'PropertyName',VALUE,...) %各属性详细说明见matlab帮助 for i=1:n %在当前窗体上生成一帧图像

matlab制作雪花动画

%% 设置部分 %***************设置背景****************************% A=imread('bg.jpg');%背景图像 h=figure; imshow(A); %显示背景图像 axes axis([0 1 0 1]); %设置坐标范围,并隐藏坐标 axis off; set(gcf,'color','k'); %设置背景颜色为黑色 %设置显示的雪花数目 N=20; handles=zeros(1,N); x=rand(2,N); % fontsize(大) step 步长 fontsize=floor(rand(1,N)*17+32); %设置字号,32-48之间 new_handles_N=0; %% 绘图部分 for i=1:N handles(i)=text(x(1,i),x(2,i),'*','fontsize',fontsize(i),'color','w'); %handles 存储每一个“雪花”的句柄 end while 1 if ~ishandle(h) return end for i=1:N temp=get(handles(i),'position'); step=get(handles(i),'fontsize')/48*0.05; % 不同大小的雪花,速度不同。 if temp(2)<0 %判断是否飘出坐标范围 new_handles_N=new_handles_N+1; new_handles(new_handles_N)= copyobj(handles(i),gca); if new_handles_N==500 %扫雪了~\(≧▽≦)/~啦啦啦 delete(new_handles); new_handles_N=0; end temp(1)=rand(1); temp(2)=1; else temp(1)=temp(1)+rand(1)*0.1-0.05; temp(2)=temp(2)-step; %速度 end

MATLAB程序设计报告--基于MATLAB动画播放及音乐播放

《MATLAB程序设计》课程设计报告 设计题目:基于MATLAB的动画演示 及背景音乐插入 专业:2011级通信工程 姓名(学号):储兆雄1162310213 邓少林1162310214 徐凯越1162310223 指导教师:倪建军(博士/副教授) 时间:2013年12月20日

目录 1、设计目的 2、总体设计 3、具体设计(功能实现) 4、结果分析 5、改进方向 6、心得体会 文献 附录

1、设计目的 学会运用matlab工具箱实现matlab GUI设计,处理动画运行,以及添加背景音乐,并实现其动态操作,如继续、暂停等功能。 2、总体设计

主要包括:动画模块,音乐模块,动画显示模块 3、具体设计(功能实现) 1) 动画模块 (1)打开动画文件:从文件打开对话框选择动画程序,实现动画播放的可选择性 程序实现代码如下: function btnvopen_Callback(hObject, eventdata, handles) % hObject handle to btnvopen (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global vfname %动画文件名 [vfname vpname vindex]=uigetfile('*.m','choose moive file'); len=length(vfname); if vindex set(handles.txtvname,'string',vfname(1:len-2)) end 打开对话框效果如下:

Matlab动画及其在物理中的应用

实验报告实验课程名称计算物理 实验项目名称Matlab动画及其在物理中的应用 年级 09级 专业物理学 学生姓名 学号 理学院 实验时间:2012 年 4 月 4 日

学生实验室守则 一、按教学安排准时到实验室上实验课,不得迟到、早退和旷课。 二、进入实验室必须遵守实验室的各项规章制度,保持室内安静、整洁,不准在室内打闹、喧哗、吸烟、吃食物、随地吐痰、乱扔杂物,不准做与实验内容无关的事,非实验用品一律不准带进实验室。 三、实验前必须做好预习(或按要求写好预习报告),未做预习者不准参加实验。 四、实验必须服从教师的安排和指导,认真按规程操作,未经教师允许不得擅自动用仪器设备,特别是与本实验无关的仪器设备和设施,如擅自动用或违反操作规程造成损坏,应按规定赔偿,严重者给予纪律处分。 五、实验中要节约水、电、气及其它消耗材料。 六、细心观察、如实记录实验现象和结果,不得抄袭或随意更改原始记录和数据,不得擅离操作岗位和干扰他人实验。 七、使用易燃、易爆、腐蚀性、有毒有害物品或接触带电设备进行实验,应特别注意规范操作,注意防护;若发生意外,要保持冷静,并及时向指导教师和管理人员报告,不得自行处理。仪器设备发生故障和损坏,应立即停止实验,并主动向指导教师报告,不得自行拆卸查看和拼装。 八、实验完毕,应清理好实验仪器设备并放回原位,清扫好实验现场,经指导教师检查认可并将实验记录交指导教师检查签字后方可离去。 九、无故不参加实验者,应写出检查,提出申请并缴纳相应的实验费及材料消耗费,经批准后,方可补做。 十、自选实验,应事先预约,拟订出实验方案,经实验室主任同意后,在指导教师或实验技术人员的指导下进行。 十一、实验室内一切物品未经允许严禁带出室外,确需带出,必须经过批准并办理手续。

利用MATLAB编程实现动态画图功能

自动化专业综合设计报告 设计题目:利用MATLAB编程实现动态画图功能 所在实验室:自动化系统仿真实验室 指导教师: 学生姓名 班级 学号 撰写时间:2012-02-24 成绩评定:

一、设计目的 a)进一步熟悉Matlab的界面及基本操作; b)了解并掌握Matlab中一些函数的作用与使用; c)学会如何利用Matlab实现绘图功能,并可使坐标系动态设置。 二、设计要求 1.外部输入数据动态设置坐标系,然后绘制图形 2.举例演示 三、设计内容(可加附页) Matlab用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。我们设计的题目是利用matlab编程实现动态的画图功能。具体内容体现在: 1):利用外部输入的数据来设置坐标系,使坐标系能够按照自己想要的方式呈现出来,从而更加直观的分析图形。 2):绘制图形,我们举例绘制了一个正弦函数和一个三维的图形。 设计步骤: 1:打开matlab软件

2:建立一个.m文件,保存到work中 3:进行编程 首先从编程的角度分析,要实现两个功能,一个是可以从外部输入数据来改变坐标系。用到的函数是: axis([])。

其次是实现画图功能并实现图形的动态变化. 具体思路: 1:定义变量 global xmin xmax ymin ymax zmax zmin m n s y a b q p 2建立函数switch() Case0 Case1 3:从外部输入,编译 a=-8:0.1:10; q=a'; a1=ones(size(q))*x; q1=y*ones(size(a)); r=sqrt(a1.^2+q1.^2)+eps; z=sin(r)./r; mesh(z); 四.设计实验结果及分析 结果1:在命令窗口输入n=1; a=-8:0.1:10; q=a'; a1=ones(size(q))*x; q1=y*ones(size(a)); r=sqrt(a1.^2+q1.^2)+eps; z=sin(r)./r; mesh(z);

MATLAB程序的设计报告--基于MATLAB动画播放及音乐播放

. . 《MATLAB程序设计》课程设计报告 设计题目:基于MATLAB的动画演示 及背景音乐插入 专业: 2011级通信工程 (学号):储兆雄 1162310213 邓少林 1162310214 徐凯越 1162310223 指导教师:倪建军(博士/副教授) 时间: 2013年12月20日

目录 1、设计目的 2、总体设计 3、具体设计(功能实现) 4、结果分析 5、改进方向 6、心得体会 文献 附录

1、设计目的 学会运用matlab工具箱实现matlab GUI设计,处理动画运行,以及添加背景音乐,并实现其动态操作,如继续、暂停等功能。 2、总体设计

主要包括:动画模块,音乐模块,动画显示模块 3、具体设计(功能实现) 1) 动画模块 (1)打开动画文件:从文件打开对话框选择动画程序,实现动画播放的可选择性 程序实现代码如下: function btnvopen_Callback(hObject, eventdata, handles) % hObject handle to btnvopen (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global vfname %动画文件名 [vfname vpname vindex]=uigetfile('*.m','choose moive file'); len=length(vfname); if vindex set(handles.txtvname,'string',vfname(1:len-2)) end 打开对话框效果如下:

【原创】Matlab中动画的实现、制作和保存

【原创】Matlab中动画的实现、制作和保存 Matlab的确是一个很优秀的工程计算软件,除了强大的矩阵运算,仿真分析外,绘图功能 也是相当的强大。 但是由于Matlab本身的多线程编程缺陷(所谓多线程,就是MATLAB没法同时执行多个回调,只能排队一个一个的按顺序运行,Timer对象除外,它是MATLAB中唯一能够执行多线程的方法),想要动态的画图,并且能够很好的在GUI中得到控制,还不是一件很容易的事情。 但是动画具有生动形象直观的好处,对我的教学、研究等都有不小的作用。那好,我在这里勉为其难的介绍下Matlab中是如何制作动画的。 一、动画的制作 Matlab中动画实现的方法主要有下面三种 1.电影动画:从不同的视角拍下一系列对象的图形,并保存到变量中,然后按照一定的顺序 像电影一样播放。 https://www.wendangku.net/doc/c014822146.html,/thread-593-1-1.html 2.擦除动画:画在图形窗口中按照一定的算法连续擦除和重绘图形对象,表现为动画,这个 也是MATLAB中使用最多的方法。 https://www.wendangku.net/doc/c014822146.html,/thread-240-1-1.html 3.质点动画:用comet()等函数绘制彗星图,它能演示一个质点的运动 https://www.wendangku.net/doc/c014822146.html,/thread-594-1-1.html 二、动画的保存 下面再讲述下生成的动画如何保存。动画保存,只有对电影动画而言才有意义,其他两种谈不上保存,因为他们都是实时的,眨眼就过的 https://www.wendangku.net/doc/c014822146.html,/thread-595-1-1.html 三、有关动画制作的实验报告 https://www.wendangku.net/doc/c014822146.html,/thread-600-1-1.html

matlab_动画制作

点的简单动画%by dynamic %2008.6.23 % t=0:pi/1000:10*pi; x=30*sin(t); y=30*cos(t); z=t; plot3(x,y,z); hold on %axis equal comet3(x,y,z,0.5) %% %by dynamic %2008.6.13 % vx = 100*cos(1/4*pi); vy = 100*sin(1/4*pi); t = 0:0.001:15; x = vx*t; y = vy*t-9.8*t.^2/2; comet(x,y) %% %by dynamic %2008.6.13 % vx = 100*cos(1/4*pi); vy = 100*sin(1/4*pi); t = 0:0.001:15; x = vx*t; y = vy*t-9.8*t.^2/2; comet(x,y) %% %一般的过程 %擦除重绘模式动画 %选择一个擦除模式

set(h,'erasemode',erasemode)%h是需要执行动画图像的句柄,一般都是由line或者plot创建% %需要执行一些图形计算命令 % %循环语句中更新坐标数据,一般使用for或者while for i=1:n % %必要的MATLAB命令 % set(h,'xdata',xdata,'ydta',ydata)%更新图像的坐标数据 drownnow%刷新屏幕 % %其它Matlab语句 % End %% %运动的小球 %function f=anim_ball(K,ki) % %演示红色小球沿一条封闭旋螺线运动的实时动画 % 仅演示实时动画的调用格式为anim_ball(K) % 既演示实时动画又拍摄照片的调用格式为f=anim_ball(K,ki) % K 红球运动的循环数(不小于1 ) % ki 指定拍摄照片的瞬间,取1 到1034 间的任意整数 % f 存储拍摄的照片数据,可用image(f.cdata) 观察照片 % 产生封闭的运动轨线 % % %by dynamic %all rights reserved by https://www.wendangku.net/doc/c014822146.html, %2007.10.26 % t1=(0:1000)/1000*10*pi; x1=cos(t1);y1=sin(t1);z1=-t1; t2=(0:10)/10; x2=x1(end)*(1-t2);y2=y1(end)*(1-t2);z2=z1(end)*ones(size(x2)); t3=t2; z3=(1-t3)*z1(end);x3=zeros(size(z3));y3=x3; t4=t2; x4=t4;y4=zeros(size(x4));z4=y4; x=[x1 x2 x3 x4];y=[y1 y2 y3 y4];z=[z1 z2 z3 z4]; h=figure('numbertitle','off','name','擦除动画演示(运动的小球)——Matlabsky'); plot3(x,y,z,'b') axis off

MATLAB动画制作

电影动画的好处就是,运行一次可以多次播放,甚至可以直接生成avi文件,直接独立与Matlab环境播放。这是其它三种动画制作方法所不具备的。 MATLAB中,创建电影动画的过程分为以下四步: step1:调用moviein函数对内存进行初始化(该步骤在Matlab5.3以上均可省略),创建一个足够大的矩阵,使之能够容纳基于当前坐标轴大小的一系列指定的图形(此处称为帧)。 step2:调用getframe函数生成每个帧。该函数返回一个列矢量,利用这个矢量,就可以创建一个电影动画矩阵。 getframe函数可以捕捉动画帧,并保存到矩阵中。一般将该函数放到for循环中得到一系列的动画帧。 该函数格式有: (1)F=gefframe,从当前图形框中得到动画帧 (2)F=gefframe(h),从图形句柄h中得到动画帧 (3)F=getframe(h,rect),从图形句柄h的指定区域rec中得到动画帧 step3:调用movie函数按照指定的速度和次数运行该电影动画。 当创建了一系列的动画帧后,可以利用movie函数播放这些动画帧。 该函数的主要格式有: (1)movie(M),将矩阵M中的动画帧播放一次 (2)movie(M,n),将矩阵M中的动画帧播放n次 (3)movie(M,n,fps),将矩阵M中的动画帧以每秒fps帧的速度播放n次 step4:调用movie2avi函数可以将矩阵中的一系列动画帧转换成视频文件avi文件。这样,即使脱离了matlab环境都可以播放动画。 具体参见: 该方法的经典格式是: 1.%录制电影动画 2. for j=1:n 3. %

4. %这里输入我们的绘图命令 5. % 6. M(j) = getframe; 7. end 8. movie(M) 9.%单帧显示方法 10. f = getframe(gcf); 11. colormap(f.colormap); 12. image(f.cdata); 复制代码 此外,利用immovie函数,我们可以从多帧图像阵列中创建MATALB 电影动画。 需要注意的是:该函数只能应用于索引图象,所以,如果用户希望其他类型的图像阵列转换为电影动画,则首先将该图像类型转换为索引类型。

MATLAB 动画图 作动态图

MATLAB技术论 坛 电子期刊 编辑: xiezhh

制作: MATLAB技术论坛 版权: MatlabSky?版权所有 网址: http://www.matlabsky. com 中国权威MATLAB论坛核心期刊 MATLAB技术论坛简介

目录 1 动画的制作 1.1 电影动画 1.1.1 电影动画演示实例(一)——千变万化的线条 1.1.2 电影动画演示实例(二)——跳动的红心 1.2 擦除动画 1.2.1 Matlab擦除重绘动画实例(一)——运动的小球 1.2.2 Matlab擦除重绘动画实例(二)——单摆横梁 1.2.3 Matlab擦除重绘动画实例(三)——时钟演示 1.2.4 Matlab擦除重绘动画实例(四)——小球绕跑道运动 1.3 质点动画 1.3.1 质点动画演示(一) 1.3.2 质点动画演示(二)——平抛运动 1.3.3 质点动画演示(三)——导弹发射 1.4 霓虹灯效果动画 1.4.1 霓虹灯效果动画实例(一)——霓虹闪烁的球体 1.4.2 霓虹灯效果动画实例(二)——一颗花心 1.5 GIF格式动画制作 1.5.1 GIF格式动画制作案例——绕螺旋线运动的小球 2 动画的保存 3 有关动画制作的实验报告 4 更多动画实例 4.1 电影动画演示——旋转的山峰 4.2 擦除动画实例——卫星绕地球运动(注释很详细) 4.3 擦除动画实例——太阳|地球|月亮|卫星,绕转演示动画(注释很详细) 5 光学夫朗和费衍射现象模拟MATLAB源代码 6 牛顿环动画演示MATLAB源代码 7 使用MATLAB绘制原子轨道和电子云图形 8 振动摆MATLAB动画源代码

相关文档
相关文档 最新文档