教你如何使用Matlab,可以自学的

教你如何使用Matlab,可以自学的
教你如何使用Matlab,可以自学的

附录

MATLAB简介

这里介绍MATLAB一些入门知识,包括MATLAB桌面和窗口,MATLAB 命令格式、数据格式、数据文件和变量管理,MA TLAB的数组和矩阵运算,MATLAB的字符串、元胞和结构等数据类型,MA TLAB的程序设计方法,MATLAB作图方法在线帮助的使用和程序文件和目录的管理等。

一、MATLAB桌面

启动MATLAB后,就进入MATLAB的桌面,图1为MATLAB6.1的默认(Default)桌面。第一行为菜单栏,第二行为工具栏,下面是三个最常用的窗口。右边最大的是命令窗口(Command Window),左上方前台为发行说明书窗口(Launch pad),后台为工作空间(Workspace),左下方为命令历史(Command History)后台为当前目录(Current Directory)。

1.窗口

(1)命令窗口

该窗口是进行MATLAB操作最主要的窗口。窗口中“>>”为命令输入提示符,其后输入运算命令,按回车键就可执行运算,并显示运算结果.。

图1

(2)发行说明书窗口

发行说明书窗口是MATLAB所特有的,用来说明用户所拥有的Mathworks 公司产品的工具包、演示以及帮助信息。

(3)工作空间

在默认桌面,位于左上方窗口前台,列出内存中MATLAB工作空间的所有变量的变量名、尺寸、字节数。用鼠标选中变量,击右键可以打开、保存、删除、绘图等操作。

(4)当前目录

在默认桌面,位于左下方窗口后台,用鼠标点击可以切换到前台。该窗口列出当前目录的程序文件(.m)和数据文件(.mat)等。用鼠标选中文件,击右键可以进行打开、运行、删除等操作。

(5)命令历史(Command History)

该窗口列出在命令窗口执行过的MATLAB命令行的历史记录。用鼠标选中命令行,击右键可以进行复制、执行(Evaluate Selection)、删除等操作。

除上述窗口外,MATLAB常用窗口还有编程器窗口、图形窗口等。

二、数据和变量

1.表达式

在命令窗口作一些简单的计算,就如同使用一个功能强大的计算器,使用变

量无须预先定义类型。

例如,设球半径为r=2,求球的体积3

3

4r V π=

>>r=2 %表达式将2赋予变量r r= %系统返回r 的值

2

>>v=4/3*pi*r^3 %pi 为内置常量π,乘方用^表示 v=

33.5103

几个表达式可以写在一行,用分号(;)或逗号(,)分割,用分号(;)使该表达式运算结果不显示,而逗号(,)则显示结果。也可以将一个长表达式分在几行上写,用三点(…)续行。

若需要修改已执行过的命令行,可以在命令历史中找到该命令行复制,再粘贴至命令窗口修改。也可以直接使用键盘↑↓调出已执行过的命令行修改。

2.数据显示格式

MATLAB 默认的数据显示格式为短格式(short ):当结果为整数,就作为整数显示;当结果是实数,以小数点后四位的长度显示。若结果的有效数字超出一定范围,以科学计数法显示(如3.2000e-006表示6102.3-?)。数据显示格式可使用命令Format 改变。例如:

>> format long;v %长格式,16位 v =

33.51032163829112

>> format short;v %短格式 v =

33.5103

>> format rational;v %有理格式,近似分数 v =

6501/194 3.复数

MATLAB 中复数可以如同实数一样,直接输入和计算。例如: >> a=1+2i;b=5-4*i;c=a/b c =

-0.0732 + 0.3415i 4.预定义变量

MATLAB 有一些预定义变量(表1),启动时就已赋值,可以直接使用,如前我们使用的圆周率pi 和虚数单位i.

的功能暂不能使用。当这些用户变量被清除(clear)或MATLAB重新启动后,这些功能得以恢复。

5.用户变量

MATLAB变量名总以字母开头,以字母、数字或下划线组成,区分大小写,有效字符长度为63个。如A,a,a1,a_b都是合法的,且a与A表示不同变量。在Command Window中使用的变量一旦被赋值,就会携带这个值存在于工作空间,直到被清除或被赋予新的值。

ans是系统一个特别的变量名。若一个表达式运算结果没有赋予任何变量,系统自动用ans存放答案。例如:

>> A=5+4i;b=5-4*i;B=1;A*b %没有定义A*b的输出变量

ans =

41 %ans来接受计算结果,注意这是大写A与小写b的乘积,尽管我们可以使用工作空间来查询和清除变量,但使用下列命令方式更快捷:

>> whos %查询Workspace中的变量列表

Name Size Bytes Class

A 1x1 16 double array (complex)

B 1x1 8 double array

a 1x1 16 double array (complex)

ans 1x1 8 double array

b 1x1 16 double array (complex)

c 1x1 16 double array (complex)

Grand total is 6 elements using 80 bytes

>> A %查询变量A的值

A =

5.0000 + 4.0000i

>> clear A %清除变量A

>> A %再查询A的值,已经不存在了

??? Undefined function or variable 'A'.

>> clear %清除Workspace中所有变量

>> whos %Workspace中已没有任何变量了

三、数组和矩阵运算

MATLAB基本数据单元是无需指定维数的数组。数组运算是MATLAB最鲜明的特点,一方面可以使得计算程序简明易读,另一方面可以提高计算速度。

1.数组的输入

最常用的数组是双精度数值数组(double array)。一维数组相当于向量,二维数组相当于矩阵,一维数组可以视为二维数组的特例。二维数组的第一维称为“行”,第二维称为“列”。MATLAB数组无需预先定义维数。直接输入数组的

元素,用中括号([])表示一个数组,同行元素间用空格或逗号分隔,不同行间用分号或回车分隔,例如:

>> clear;a=[1,2,3;4,5,6;7,8,9]

a =

1 2 3

4 5 6

7 8 9

>> a=[1 2 3 %这种方式特别适用于大型矩阵

4 5 6

7 8 9]

a =

1 2 3

4 5 6

7 8 9

对于等差数列构造的一维数组,可用冒号运算生成,也可用函数linspace生成。

>> b=0:3:10%初值:增量:终值

b =

0 3 6 9

>> b=0:10%增量为1可省略

b =

0 1 2 3 4 5 6 7 8 9 10

> >b=10:-3:0 %递减

b =

10 7 4 1

>> b=linspace(0,10,4) %将区间[0,10]等分为4-1=3份

b =

0 3.3333 6.6667 10.0000

>> length(b) %查询b的长度

ans =

4

>> b(3) %查询b的第三个元素

ans =

6.6667

>> b([1,end]) %查询b的首和尾元素

ans =

0 10

二维数组元素双下标编址按通常方式,单下标编址按列排序。

>> size(a) %查询数组a的尺寸

ans =

3 3

>> a(3,2),a(6)

ans =

8

ans =

8

>> c=a([1 3],[2 3]) %提取a的第一、第三行和第二、第三列(分块矩阵)

c =

2 3

8 9

>> d=a(2,:)%提取a的第二行

d =

4 5 6

>> a(:) %将a所有元素按单下标顺序排为列向量

ans =

1

4

7

2

5

8

3

6

9

一些特殊的二维数组可以用函数产生,例如:

>> a=zeros(2,4)%生成2行4列零矩阵

a =

0 0 0 0

0 0 0 0

>> b=ones(1,4)%生成1行4列1矩阵

b =

1 1 1 1

>> c=[a;b]%拼接

c =

0 0 0 0

0 0 0 0

1 1 1 1

>> c(2,1)=100 %修改部分元素

c =

0 0 0 0

100 0 0 0

1 1 1 1

>> reshape(c,2,6) %按2行6列重排矩阵元素

ans =

0 1 0 0 1 0

100 0 1 0 0 1

注意:数组下标对应矩阵的行和列,编址一律从1开始,不能用0.

矩阵输入也可用“load”命令从外部数据文件导入

2.数组运算

数组运算是指数组对应元素之间的运算,也称点运算。矩阵的乘法、乘方和除法有特殊的数学含义,并不是数组对应元素的运算,所数组乘法、乘方和除法的运算符前特别加了一个点。特别要区分数组运算在乘法、乘方和除法上的意义和表示上与矩阵运算的不同。

>> A.*B %注意不是A*B

ans =

0 -1

0 -2

>> A.\B,A./B

Warning: Divide by zero.

ans =

0 -1.0000

Inf -0.5000

Warning: Divide by zero.

ans =

Inf -1

0 -2

>> A.^2

ans =

1 1

0 4

>> 1./A

Warning: Divide by zero.

ans =

1.0000 -1.0000

Inf 0.5000

3.矩阵运算

矩阵是一个二维数组,所以矩阵的加、减、数乘等运算与数组运算是一致的。但是有两点需要注意:

(1)对于乘法、乘方和除法等三种运算,矩阵运算与数组运算的运算符及含义不同:矩阵运算按线性变换定义,使用通常符号;数组运算按对应元素运算定义,使用点运算符;

(2)数与矩阵加减、矩阵除法在数学上是没有意义的,在MATLAB中为简便起见,定义了这两类运算,其含义见表3.

>> 100+A

ans =

101 102

103 104

>> A*B,A.*B %注意矩阵运算和数组运算的区别

ans =

8 5

20 13

ans =

4 6

6 4

>> A\B,B/A,A.\B,B./A %注意矩阵运算和数组运算的区别

ans =

-6.0000 -5.0000

5.0000 4.0000

ans =

-3.5000 2.5000

-2.5000 1.5000

ans =

4.0000 1.5000

0.6667 0.2500

ans =

4.0000 1.5000

0.6667 0.2500

4.数学函数

数组的数学函数也是按每个元素的运算,使用通常的函数符号,常用数学函数见表4

>> B=exp(A)

B =

54.5982 0.3679

20.0855 7.3891

>> C=fix(B)

C =

54 0

20 7

>> D=sin(C)

D =

-0.5588 0

0.9129 0.6570

>> E=log(D)

Warning: Log of zero.

E =

-0.5820 + 3.1416i -Inf

-0.0911 -0.4201

5.关系与逻辑运算

MATLAB的关系运算和逻辑运算符都是对于元素的操作,其结果是特殊的逻辑数组(logical array)表5,“真”用1表示,“假”用0表示,而逻辑运算中,所有非零元素作为1(真)处理。

A =

-2 -1 0 1 2 3 4

B =

4 3 2 1 0 -1 -2

>> A>B

ans =

0 0 0 0 1 1 1

>> A==B

ans =

0 0 0 1 0 0 0

>> A&B %逻辑运算中,所有非零元素作为1(真)处理

ans =

1 1 0 1 0 1 1

>> A|B

ans =

1 1 1 1 1 1 1

>> find(abs(A)>=2)%返回绝对值大于或等于2的元素的下标

ans =

1 5 6 7

>> any(abs(A)>5)%若存在绝对值大于5的元素,返回1

ans =

>> all(abs(A)>5)%若所有元素绝对值大于5,返回1

ans =

四、字符串、元胞和结构

除数值(double)以外,常用的数据类型还有字符(char)、元胞(cell)和结构(structure),由此进一步组成字符数组(char array)、元胞数组(cell array)和结构数组(structure array).

1.字符串

MATLAB字符串用单引号对来标识,其数据类型为字符数组。

>> a1='Hello everyone'

a1 =

Hello everyone

>> a2='各位好' %注意单引号,不是双引号

a2 =

各位好

>> a=[a1,'.',a2,'.'] %字符串拼接

a =

Hello everyone.各位好.

>> size(a)

ans =

1 19 %共19个字符

>> double(a)

ans =

Columns 1 through 8

72 101 108 108 111 32 101 118

Columns 9 through 16

101 114 121 111 110 101 46 47351 Columns 17 through 19

52923 47811 46 %中文ASCII码很大>> a=char(ans)

a =

Hello everyone.各位好.

数字字符串与数值之间也可以用num2str和str2num转换。一个数组的元素要么都是数值,要么都是字符串,数值转换后可以与字符串出现在同一数组中。

>> a=12;b=sqrt(a);

>> ['a=',num2str(a),',a的开方=',num2str(b)]

ans =

a=12,a的开方=3.4641

MATLAB命令可以定义成一个字符串,使用eval可以使该字符串所表达的MATLAB命令得到执行。

>> fun='x.^2.*sin(x)';

>> x=1;eval(fun)

ans =

0.8415

>> x=1:3;eval(fun)

ans =

0.8415 3.6372 1.2701

2.元胞和结构

不管是数值数组还是字符数组,其数据结构必须是整齐的。首先数值和字符不能混合,其次小数组拼接成大数组时,其尺寸(size)必须相符(agree)。例如:>> A=['first';'second'] %错误

??? Error using ==> vertcat

All rows in the bracketed expression must have the same

number of columns.

将不同类型、不同尺寸的数组,加大括号({}),可构成一个元胞。几个元胞可以构成元胞数组。

>> Ac1={'first';1:3};Ac2={'second';[1 2;3 4]};

>> Ac=[Ac1,Ac2]

Ac =

'first' 'second'

[1x3 double] [2x2 double]

>> size(Ac)

ans =

2 2

>> Ac(2,1) %小括号,查询Ac的第二行第一列元素

ans =

[1x3 double]

>> Ac{2,1} %大括号,查询Ac的第二行第一列元素的具体内容

ans =

1 2 3

一个结构通过“域”来定义,比元胞更丰富、更灵活。几个结构可以合成一个结构数组,但这些结构的域名必须一致。

>> As1.f1='first';As1.f2='second';As2.f1=1:3;As2.f2=[1 2;3 4];

>> As=[As1;As2]

As =

2x1 struct array with fields:

f1

f2

>> size(As) %注意其size结果与元胞数组不同

ans =

2 1

>> As(2,1).f1

ans =

1 2 3

>> As.f1

ans =

first

ans =

1 2 3

元胞数组与结构数组可以用struct2cell和cell2struct函数进行适当的转换。

>> Bc=struct2cell(As) %注意结果与Ac的不同

Bc =

'first' [1x3 double]

'second' [2x2 double]

>> Bs=cell2struct(Ac,{'one','two'},1) %定义域名,并指定取域名的维

Bs =

2x1 struct array with fields:

one

two

看一看Workspace有哪些类型,并观察其字节数。

五、程序设计

1.控制流

前面我们用的命令都是顺序结构的,对于复杂的计算,需要循环和分支等复杂的程序结构。MATLAB控制流语法都以end结尾。常用控制流见表6.

例1 计算

100

2

1

1

n

s

n

= =∑

>> clear;s=0;

>> for n=1:100

s=s+1/n/n;

end

>> s

s =

1.6350

2.M脚本文件

复杂程序结构在命令窗口调试保存都不方便,所以进行复杂的运算大都使用程序文件。从命令窗口用命令“edit”就进入MATLAB的程序编辑器窗口,用

以编写用户的M文件。M文件可分为两类:M脚本文件和M函数文件。

将多条MATLAB语句写在编辑器中,并以.m文件保存在适当的目录中(这个目录须为MATLAB的搜索目录),就得到一个M脚本。如我们将例1中的几条语句写在编辑器中,

保存为naega_1,然后在命令窗口执行:

>>naega_1

s=

1.6350

执行M脚本文件也可以在程序编辑器的Debug菜单选Run。使用编辑器也可打开和修改M文件、观察变量值、调试程序等。

注意:M文件名一律以字母开头,以字母、数字或下划线组成,不要含有空格、减号等,并要防止它与系统的变量名、系统内部的M函数名冲突。例如1.m,ega-1.m,ega.1.m都是不合法的。另外,别忘了每次修改程序后都要存盘。

3.M函数文件

M脚本文件没有参数传递功能,当我们需要修改程序中的某些变量值,必须修改M文件。而M函数文件使得我们可以进行参数传递。

% M函数naega_1f.m

function s=f(m)

s=0;

for n=1:m

s=s+1/n/n;

end

保存为naega_1f.m,在命令窗口执行:

>>clear;naega_1f(100),naega_1f(1000)

ans=

1.6350

ans=

1.6439

注意:在MATLAB中,使用M函数是以该函数的磁盘文件主名调用,而不是文件中的函数名,但为了增强程序可读性,最好两者同名。

M函数不能像M脚本那样在编辑器窗口用Debug\run执行,因为M函数必须给予输入参数值。M函数常常被M脚本或其他M函数调用。

4.函数句柄和内嵌函数

M函数除了直接用其函数名调用之外,也可以作为一个参数调用。调用时使用所谓函数句柄(handle)方式。MATLAB命令feval用于执行函数的参数方式。例如:

>>fname=@naega_1f;feval(fname,1000)

ans=

1.6439

比较简单的函数表达式可以不用写成外部M函数,而是用更简捷的内嵌

>> fname=inline('sum(1./(1:n).^2)','n')

fname =

Inline function:

fname(n) = sum(1./(1:n).^2)

>> feval(fname,1000)

ans =

1.6439

5.其他

(1)注释

为了增强程序的可读性,程序中常常需要注释语句。M文件开头一般应有一段注释。注释用%开头,顶格书写,对本行后面字符起作用,说明文件的功能和使用方法。注释语句不参与运算,只起说明作用。使用Help可看到。注释符(%)也常用于程序调试。

(2)对话

Input在交互式执行程序中用于提示键盘输入,Disp用于屏幕显示。

例2 编写一个脚本文件,使对键盘提示输入的向量求得元素总和。

% M文件naega_2.m

%用途:本程序提示输入一个向量,并求得元素总和

%用法:输入向量用中括号,元素之间用逗号

clear A;

A=input('Enter a vector:');

d=sum(A);

disp(['The sum is',num2str(d)]);

然后在命令窗口执行:

>>naega_2

Enter a vector:[1 2 3 4]

The sum is 10

>>help naega_2

用途:本程序提示输入一个向量,并求得元素总和

用法:输入向量用中括号,元素之间用逗号

(4)子函数

M函数中允许使用子函数。M函数中第一个function为主函数,其他function 为子函数。子函数只能被同一文件的主函数和其他子函数调用,不能被外部函数调用。

(5)全程变量与局部变量

M函数中所有变量为局部变量,而脚本文件中所有变量同命令窗口的命令一样都是全程变量。M函数变量值传递主要通过其输入输出变量,但也可以用global定义全程变量。它的意义与普通全程变量稍有区别,只对有定义的文件起作用。

(6)nargin与nargout

在M 函数内,nargin 表示该函数的输入变量个数,nargout 表示该函数的输出变量个数。

(7)提高速度

MATLAB 软件主要缺点是执行循环语句时速度慢。好的M 程序文件应尽量使用数组运算和内部函数,少用循环语句,以提高运算速度。尽管MATLAB 数组无须定义尺寸,但经常改变数组尺寸会影响速度,采取一些预分配方法可提高运算速度。另外,减少运行过程中不必要的结果显示也可提高速度。

(8)强行中断

使用快捷键Ctrl+C 可以强行中断程序运行。

例3 编写一个M 函数,对于任意输入的向量x ,可以计算下列分段函数值构成的向量:

2,1()1,1132,1x x f x x x x ?>?

=-<≤??+≤-?

naeag_3b.m 是根据MATLAB 数组运算设计的程序,程序简短且速度快,数组维数越高,效率改进越显著。下列程序中tic 表示计时开始,toc 为读数。

>>clear;tic;x=-2:0.0005:2;y=naega_3a(x);toc %时间因电脑不同而有区别 elapsed_time = 1.0400

>> clear;tic;x=-2:0.0005:2;y=naega_3b(x);toc elapsed_time = 0.4400

六、作图

依次将(1,1),(4,3),(2,-1),(5,2)连接起来得一条折线(图2)

图2

图形显示在图形窗口。在图形窗口可以使用File菜单保存(Save)为M文件,导出(Export)为图形文件。也可利用图形窗口Edit菜单Copy figure作为图片复制到剪贴板,从而进一步粘贴到Word或其他应用程序中。

图形的线型、标记、颜色均可根据要求设定。常用的见表8

例4 两个一元函数1y x x =--

和0.2

sin(5)y x x =在区间-1

的复合图。

% M 文件naega_4.m

fplot('x^3-x-1',[-1,2]);

hold on; %在作下一幅图时保留已有图像 x=-1:0.2:2;

y=abs(x).^2.*sin(5*x); %注意数组运算 plot(x,y ,':ro');

hold off; %释放hold on

>> xa=6:8;ya=1:4; %生成x,y 各自的节点 >> [x,y]=meshgrid(xa,ya); %生成X-Y 面上网格

>> z=x.^2+y.^2; %计算X-Y面上各网格点的z轴高度>> mesh(x,y,z)

>> [x,y,z]

ans =

6 7 8 1 1 1 37 50 65

6 7 8 2 2 2 40 53 68

6 7 8 3 3 3 45 58 73

6 7 8 4 4 4 52 65 80

这3组数据构成空间网面的12格点坐标

例5 二元函数图22

=--

z x x y

exp()

%M文件naega_5.m

clear;close; % close关闭当前图形窗口

xa=-2:0.2:2;ya=xa;

[x,y]=meshgrid(xa,ya);

z=x.*exp(-x.^2-y.^2);

mesh(x,y,z);pause %网格图,pause暂停直到按任意键surf(x,y,z);pause %网面图

contour(x,y,z);pause %等高线图

contour(x,y,z,[0.1 0.1]); %z=0.1的一条等高线

0.2

0.2c o s 2s i n 0202t t x e t y e t

t

z ππ--?=??

?

=<

?=??

%M 文件naega_6.m

clear;close;

t=0:0.1:20;r=exp(-0.2*t);th=0.5*pi*t; x=r.*cos(th);y=r.*sin(th);z=sqrt(t); subplot(1,2,1) plot3(x,y ,z); title('螺旋线'); subplot(1,2,2) plot3(x,y ,z);

axis([-1 1 -1 1 0 4]) grid on;

三相异步电动机Matlab仿真

中国石油大学胜利学院综合课程设计总结报告 题目:三相异步电机直接启动特性实验模型 学生姓名:潘伟鹏 系别:机械与电气工程系 专业年级: 2012级电气工程专业专升本2班 指导教师:王铭

2013年 6 月 27日

一、设计任务与要求 普通异步电动机直接起动电流达到额定电流的6--7倍,起动转矩能达到额定转矩的1.25倍以上。过高的温度、过快的加热速度、过大的温度梯度和电磁力,产生了极大的破坏力,缩短了定子线圈和转子铜条的使用寿命。但在电网条件和工艺条件允许的情况下,异步电动机也可以直接启动。本次课程设计通过MATLAB软件建模模拟三相异步电动机直接启动时的各个元器件上的电量变化。 参考: 电力系统matlab仿真类书籍 电机类教材 二、方案设计与论证 三相异步电动机直接起动就是利用开关或接触器将电动机的定子绕组直接接到具有额定电压的电网上。 由《电机学》知三相异步电动机的电磁转矩M与直流电动机的电磁转矩有相似的表达形式。它们都与电机结构(表现为转矩常数)和每级下磁通有关,只不过在三相异步电动机中不再是通过电枢的全部电流,而是点数电流的有功分量。三相异步电机电磁转矩的表达式为: (1-1)式中——转矩常数 ——每级下磁通 ——转子功率因数 式(1-1)表明,转子通入电流后,与气隙磁场相互作用产生电磁力,因此,反映了电机中电流、磁场和作用力之间符合左手定则的物理关系,故称为机械特性的物理表达式。该表达式在分析电磁转矩与磁通、电流之间的关系时非常方便。 从三相异步电动机的转子等值电路可知, (1-2) (1-3)将式(1-2)、(1-3)代入(1-1)得:

matlab心得与学习方法(也许这是个大牛写的)

发现现在很多人(找工作的或者读博的)都想要学习或者正在学习Matlab,问我要怎么学习。其实我虽然写Matlab代码的经验还算丰富,但是还不能说是一个很好的Matlab编程人员,这里有一些心得,分享给大家希望对大家有所帮助。 关于如何学习Matlab 我的学习方法很简单:Matlab是练出来的,而不是看出来的。很多人问我有没有比较好的Matlab教材,我说随便找一本吧,都可以。只要书里面有最基本的语法和命令,对于一个有编程基础的人,Matlab可以在一个下午的时间内学会。当然,仅仅是学会。如果想要对Matlab比较得心应手,那么最好的办法就是练习。练习的素材很多,比如对于学经济学的,可以做一些simulation之类的,也可以试着把计量或者宏观教材里面的一些算法写写出来。一开始可能很慢,但是当你完成了一个比较大的project的时候,你的Matlab的功力将会有巨大的提升。 当然,在你写程序之前,多读一些别人写的好的code是非常有帮助的。 一些Matlab的经验 1、适当了解一些数值计算、数值分析以及最优化的理论 用Matlab的无非是做数值计算或者最优化,这也是Matlab的强项,Matlab有足够多的工具箱解决这些问题。但是在使用这些工具箱之前,应该首先了解一些数值计算以及最优化的理论。这一点在程序碰到问题或者计算结果不理想的时候尤为重要。很多时候结果不理想并不是自己的理论出了问题,而是盲目或者错误使用Matlab的工具箱而导致的。比如我曾经做过一个单纯形法的优化程序,但是结果总是不理想,这个时候就要返回到单纯形法具体是一种什么样的算法来考虑这个问题,最后发现是由于目标函数的某一部分十分平缓导致的。 当然更重要的是如果你不理解理论,很多问题根本不知道如何处理。有个学化学同学就曾问我一个程序怎么写,说matlab肯定可以完成的。了解清楚之后才明白原来他想做的就是一个受限最小二乘。但是他不懂得什么是最小二乘(因为没怎么学过数学),当然面对这个问题无从下手。 2、理解Matlab中时间空间的转化 这个问题没有人强调,但我觉着蛮重要。这里的关键点其实很简单,就是尽量减少重复计算,哪怕是多项式复杂度以内的计算。重复计算的内容应该适时保存到内存中,以后直接调用。一个程序可能会重复运行几千次几万次,一点点的浪费时间都可能被放大很多。空间(内存)我们是可以扩充的,但是时间不是,所以绝大多数时候我们需要放弃空间,获得时间上的迅捷。 这里有个故事,曾经在某技术论坛上看到的,说腾讯公司早期做的QQ实在太过垃圾,他们追踪过QQ的行为,发现在几分钟时间里重复调用了某同一注册表项几百次。显然注册表的

(完整版)BP神经网络matlab实例(简单而经典).doc

p=p1';t=t1'; [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); % 原始数据归一化 net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx'); %设置网络,建立相应的BP 网络net.trainParam.show=2000; % 训练网络 net.trainParam.lr=0.01; net.trainParam.epochs=100000; net.trainParam.goal=1e-5; [net,tr]=train(net ,pn,tn); %调用TRAINGDM 算法训练BP 网络 pnew=pnew1'; pnewn=tramnmx(pnew,minp,maxp); anewn=sim(net,pnewn); anew=postmnmx(anewn,mint,maxt); %对 BP 网络进行仿真%还原数据 y=anew'; 1、 BP 网络构建 (1)生成 BP 网络 net newff ( PR,[ S1 S2...SNl],{ TF1 TF 2...TFNl }, BTF , BLF , PF ) PR :由R 维的输入样本最小最大值构成的R 2 维矩阵。 [ S1 S2...SNl] :各层的神经元个数。 {TF 1 TF 2...TFNl } :各层的神经元传递函数。 BTF :训练用函数的名称。 (2)网络训练 [ net,tr ,Y, E, Pf , Af ] train (net, P, T , Pi , Ai ,VV , TV ) (3)网络仿真 [Y, Pf , Af , E, perf ] sim(net, P, Pi , Ai ,T ) {'tansig','purelin'},'trainrp' BP 网络的训练函数 训练方法 梯度下降法 有动量的梯度下降法 自适应 lr 梯度下降法 自适应 lr 动量梯度下降法弹性梯度下降法训练函数traingd traingdm traingda traingdx trainrp Fletcher-Reeves 共轭梯度法traincgf Ploak-Ribiere 共轭梯度法traincgp

MATLAB学习知识重点

1,计算矩阵的特征值和特征向量 【V,D 】=eig (A ) 其中A 指的是矩阵 V 指的是特征向量组成的矩阵 D 指的是特征值所组成的矩阵 A=[0 1 0;1 0 1;0 1 0]; >> [V,D]=eig(A) V = 0.5000 -0.7071 0.5000 -0.7071 0.0000 0.7071 0.5000 0.7071 0.5000 D = -1.4142 0 0 0 -0.0000 0 0 0 1.4142 2,求线性方程的解 1231231232314354578950x x x x x x x x x ++=-+=++= 这是一个非齐次方程方程,对于线性代数来讲,很难求解,但是利用MATLAB 来求 A=[1 2 3;3 -5 4;7 8 9]; 1 B=[14 5 50]; 2 x=A\B 3 B=[14;5;50]; 4 这4个语句的区别,特别是2.3两句的区别,2语句中B 表示的是1行3列,但是4语句中的表示的3行1列。 同时,X=A\B 很X=A/B 也是很有能区别的,具体的区别如下: X=A\B 表示的是A*X=B 的解 X=A/B 表示的是X*A=B 的解,在这里,具体解释如下;A*X=B ,

在线性代数中,X=A^(-1)B ,所以X=A\B。X*A=B的解为X=BA^(-1),就是X=B/A。 3,一元方程求根 这个在计算中是个难题,一元多次方程式很难求解的,对于纯粹的手工计算来说,所以有MATLAB比较方便,具体语句如下:()23 1.350.6680.4360.69552 =+++ f x x x x P=[0.69552 0.436 0.668 1.35]; >> X=roots(P) X = 0.2817 + 1.2456i 0.2817 - 1.2456i -1.1902 + 0.0000i 对于这个方程来说,要注意的是,在构成向量时,一定要从告辞往低次排列,中间缺少次数的,用0代替,求解语句是roots(P)。4,图形处理功能 A, 可以绘制函数图像,具体的语句如下: >> x=linspace(0,6); 这个表示X轴,在0到6内取100个点,这是默认的数值100。当然还有可以设定数值的方法linspace(0,6,100)表示的是在0到6内取等间隔取100个点。 >> y1=sin(2.*x); >> plot(x,y1)这是绘制函数sin(2X)的图像,在这里要注意的,

matlab 上机作业1,中国石油大学

第一次上机实习 1.编写一个程序ex1_1.m,对输入的方阵计算其伴随矩阵。 a)要求第一行帮助行注明这个函数的用途,能在matlab命令窗口可以用help或lookfor 查到该帮助; b)对输入的变量进行检测,如果输入的不是方阵或者矩阵元素不是数,则报错,退出程 序。 function A=ex1_1(X) % 建立函数A=ex1_1(X),求矩阵X的伴随矩阵 [a,b]=size(X); if a~=b||~isnumeric(X) || ~ismatrix(X) error('输入的不是方阵或者矩阵元素不是数!'); end for i=1:a for j=1:b A(i,j)=(-1)^(i+j)*X(i,j)*det(X([1:i-1,i+1:end],[1:j-1,j+1:end])); end end A=A'; 2.已知表达式y=6*x^5+4*x^3+2*x^2-7x+10,x的范围是[0,100],使用三阶拟合和五阶的方法得出多项式的表达式,并编程在图中绘制出原曲线、三阶拟合和五段拟合的曲线。 clc clear all x=linspace(0,100,2000); p1=[6 0 4 2 -7 0]; y=polyval(p1,x); p3=polyfit(x,y,3); p5=polyfit(x,y,5); y1=polyval(p3,x); y2=polyval(p5,x); plot(x,y,'r-o') hold on grid on plot(x,y1,'b-.',x,y2,'y--*'); grid on 三条曲线

放大图(原曲线与五阶拟合完全重合): 3.读如图像5.tif(450*450),做fourier变换, a)将变换之后所得到的矩阵只保留前10行10列,后10行10列的数据,其他位置都 设置为0,然后再作反fourier变换,观察结果; 原图:

关于matlab的学习论文

浅 议 Matlab 的 功 能 和 应 用 姓名:李丛 学号:20087101038 班级:08级计算机本科班

浅议matlab的功能和应用 【本文摘要】Matlab是功能强大的工程计算和数据处理、分析软件,为科学工作者带来了极大的便利。本文介绍了MATLAB的发展历程和影响,并重点介绍了MA TLAB的功能和作用,以及其在工作的运用。 【关键词】Matlab 数据处理 一、MATLAB 的简介 MATLAB是“Matrix Laboratory”的缩写,意为“矩阵实验室”,是当今美国很流行的科学计算软件.信息技术、计算机技术发展到今天,科学计算在各个领域得到了广泛的应用.在许多诸如控制论、时间序列分析、系统仿真、图像信号处理等方面产生了大量的矩阵及其相应的计算问题.自己去编写大量的繁复的计算程序,不仅会消耗大量的时间和精力,减缓工作进程,而且往往质量不高.美国Mathwork软件公司推出的MATLAB软件就是为了给人们提供一个方便的数值计算平台而设计的. MATLAB是一个交互式的系统,它的基本运算单元是不需指定维数的矩阵,按照IEEE的数值计算标准(能正确处理无穷数Inf(Infinity)、无定义数 NaN(not-a-number)及其运算)进行计算.系统提供了大量的矩阵及其它运算函数,可以方便地进行一些很复杂的计算,而且运算效率极高.MATLAB命令和数学中的符号、公式非常接近,可读性强,容易掌握,还可利用它所提供的编程语言进行编程完成特定的工作.除基本部分外,MATLAB还根据各专门领域中的特殊需要提供了许多可选的工具箱,如应用于自动控制领域的Control System工具箱和神经网络中Neural Network工具箱等。 二、MATLAB的基本功能 MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连 matlab开发工作界面接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。可以直接调用,用户也可以将自己编写的

基于MATLAB的微机保护算法仿真

本科毕业设计(论文) 题目:基于MATLAB的微机保护算法仿真 学生姓名: 学号:05843420 专业班级:电气工程及其自动化1班 指导教师:

基于MATLAB的微机保护算法仿真 摘要 基于MATLAB软件,运用Simulink工具完成一种继电保护微机保护数据采集和处理系统。主要基于两点法、突变量算法、对称分量选相法等传统的微机保护算法,搭建MATLAB的仿真模型,根据采集的输入电气量的采样数据进行分析、运算和判断,以实现相应的继电保护功能。本文对MATLAB软件如何应用于微机保护做了详细说明,并运用MATLAB的动态仿真工具对电力系统中的故障以及微机保护的算法进行了仿真分析,说明了MATLAB在微机继电保护中应用的可行性。同时本文对工程中常用微机保护算法进行了原理层面的分析,并运用模型对各种算法的性能进行了仿真和研究,有很重要的现实意义。 关键词:MATLAB;微机保护;算法;采样数据

Microcomputer protection algorithm based on MATLAB simulation Abstract Based on MATLAB software, using Simulink tools perform one computer protection relay data acquisition and processing systems. Mainly based on two-point method, the amount of mutation algorithms, symmetric phase selector and other traditional computer protection algorithms to build MATLAB simulation model, based on the amount of collected samples of the input electrical data analysis, calculation and judgment, in order to achieve the corresponding relay protection. In this paper, MATLAB software how to apply a detailed description of computer protection, and the use of MATLAB dynamic simulation tool for power system failures and computer protection algorithms for the simulation analysis, illustrates the application of MATLAB in the feasibility of relay protection . This paper also commonly used in engineering computer protection algorithms theory level of analysis, and the use of models for the performance of various algorithms and simulation studies, there is a very important practical significance. Keywords:MATLAB;Microcomputer Protection;Algorithm; Sampling Data

学习matlab的吐血经验

经验之一: Matlab函数句柄、feval函数和inline函数的使用 MATLAB函数句柄 函数句柄(Function handle)是MATLAB的一种数据类型。 包含了函数的路径、函数名、类型以及可能存在的重载方法; 引入函数句柄是为了使feval及借助于它的泛函指令工作更可靠;使“函数调用”像“变量调用”一样方便灵活;提高函数调用速度,特别在反复调用情况下更显效率;提高软件重用性,扩大子函数和私用函数的可调用范围;迅速获得同名重载函数的位置、类型信息。 -------------------------------------- 可以与变量一样方便地使用:比如说,在现在这个目录运行时,创建了本目录一个函数的句柄,当转到其他目录时,可以通过函数句柄直接调用上一个目录的函数,而不需要把那个函数文件复制过来,因为创建的函数句柄中已经包含了路径信息; 提高函数调用速度:因为matlab对函数的调用每次都是要搜索所有的路径,从set path 中可以看到,路径是非常的多的,所以如果一个函数在程序中需要经常用到的话,使用函数句柄,对速度会有提高的; -------------------------------------- MATLAB中函数句柄的使用使得函数也可以成为输入变量,并且能很方便的调用,提高函数的可用性和独立性。 函数句柄实际上提供了一种间接调用函数的方法。 创建函数句柄需要用到操作符@ 创建函数句柄的语法: fhandle = @function_filename 调用函数时就可以调用该句柄,可以实现同样的功能。 例如fhandle = @sin就创建了sin的句柄,输入fhandle(x)其实就是sin(x)的功能。 如 % % ------------------------------------------------ fhandle=@sin fhandle(pi)

中国石油大学(北京)自动控制原理胡寿松 课件PPT

实验四 控制系统的根轨迹分析 一. 实验目的: 1. 学习利用MATLAB 语言绘制控制系统根轨迹的方法。 2. 学习利用根轨迹分析系统的稳定性及动态特性。 二. 实验内容: 1. 应用MATLAB 语句画出控制系统的根轨迹。 2. 求出系统稳定时,增益K 的范围。 3. 实验前利用图解法画出系统的根轨迹,算出系统稳定的增益范围,与实测值相比较。 4. 应用SIMULINK 仿真工具,建立闭环系统的实验方块图进行仿真。观察不同增益下系统的阶跃响应,观察闭环极点全部为实数时响应曲线的形状;有共轭复数时响应曲线的形状。(实验方法参考实验二) 5. 分析系统开环零点和极点对系统稳定性的影响。 三. 实验原理: 根轨迹分析法是由系统的开环传递函数的零极点分布情况画出系统闭环根轨迹,从而确定增益K 的稳定范围等参数。假定某闭环系统的开环传递函数为 )164)(1() 1()()(2++-+=s s s s s K s H s G 利用MATLAB 的下列语句即可画出该系统的根轨迹。 b=[1 1]; %确定开环传递函数的分子系数向量 a1=[l 0]; %确定开环传递函数的分母第一项的系数 a2=[l -1]; %确定开环传递函数的分母第二项的系数 a3=[l 4 16]; %确定开环传递函数的分母第三项的系数 a=conv(al ,a2); %开环传递函数分母第一项和第二项乘积的系数 a=conv(a ,a3); %分母第一项、第二项和第三项乘积的系数 rlocus(b,a) %绘制根轨迹,如图(4-l )所示。 p=1.5i ; % p 为离根轨迹较近的虚轴上的一个点。 [k ,poles]=rlocfind(b ,a ,p) %求出根轨迹上离p 点很近的一个根及所对应

ADI(交替方向隐格式)求解二维抛物方程(含matlab程序)

ADI 法求解二维抛物方程 学校:中国石油大学(华东) 学院:理学院 姓名:张道德 时间:2013.4.27 1、ADI 法介绍 作为模型,考虑二维热传导方程的边值问题: (3.6.1),0,,0(,,0)(,) (0,,)(,,)(,0,)(,,)0t xx yy u u u x y l t u x y x y u y t u l y t u x t u x l t ?=+<<>?? =??====? 取空间步长1 h M =,时间步长0t >,作两族平行于坐标轴的网线: ,,,0,1,, j k x x jh y y kh j k M ===== 将区域0,x y l ≤≤分割成2M 个小矩形。第 一个ADI 算法(交替方向隐格式)是Peaceman 和Rachford (1955)提出的。 方法: 由第n 层到第n+1层计算分为两步: (1) 第一步: 1 2,12 n j k xx yy u + 从n->n+ ,求u 对向后差分,u 向前差分,构造出差分格 式为: 1 (3.6.1)11 11 2 22 2 ,,1,,1, ,1,,1 2 2 1 222,,2 -22=2 1() n n n n n n n n j k j k j k j k j k j k j k j k n n x j k y j k h h h τδδ+ + + + +-+-+-+-+= +u u u u u u u u (+ ) u u (2) 第二步:1 2,12 n j k xx yy u + 从n+ ->n+1,求u 对向前差分,u 向后差分,构造出差分格 式为: 2 (3.6.1)1 1 1 1 111 222,,1,,1, ,1,,1 2 2 1 221 2,,2 -22=2 1() n n n n n n n n j k j k j k j k j k j k j k j k n n x j k y j k h h h τδδ+ + + +++++-+-++-+-+= +u u u u u u u u (+ ) u u 其中1211,1,,1,0,1,2,,()2 2 n j k M n n n τ+ =-=+ =+ 上表表示在t=t 取值 。 假定第n 层的,n j k u 已求得,则由1(3.6.1)求出1 2,n j k u + ,这只需按行 (1,,1)j M =- 解一些具有三对角系数矩阵的方程组;再由2 (3.6.1)求出

经典GUI基础入门:MATLAB中GUI用户图形界面学习

GUI指导教程系列(1):GUI入门基本操作 为什么在MATLAB中要使用GUI呢?其实GUI就是Matlab中的Visual Basic,是面向对象的编程,可以使Matlab程序的终端用户,即使不懂的Matlab也可以轻易操作该程序! 如果没有图形用户界面(GUI)我们只能从命令行(Command Window)中调用相关程序,这相对比较繁琐,并且不是所有用户都是这个能力。就好比计算机的DOS 系统,在有windows的情况下,您会选择DOS吗?当然我们也不排除骨灰级的人物! 在本节教程我们主要针对没有GUI创建和使用经历的网友,但是必要的MATLAB 基础知识是需要的。在教程中我们将创建一个简单的GUI程序,它执行两个数的加法运行,然后显示其运算结果。 好下面开始我们的教程! 一、打开和创建GUI界面 1、首先打开Matlab,在Command Window中输入guide回车 2、此时打开GUI编辑器GUIDE(GUI Developer的缩写) 2.1 界面上有两个标签也“Creat New GUI”和“Open Existing GUI” 如果创建新的GUI此时我们选择第一个标签页,但如果打开其它已经存在的GUI 就点击第二个标签吧

2.2 这里我们选择第一个标签下的“Blank GUI”(空白GUI),下面还有几个系统GUI模版,你可以根据需要选择其它的。 2.3 点击“OK”我们正式进入GUIDE界面,呵呵,是不是感觉似曾相识 3、添加你需要的控件到figure中 在添加控件之前,您最好对您的GUI界面布局已经有一定的构思了,否则盲目性太大了不利于您的编程。下面是我们构思的布局。

偏微分中心差分格式实验报告(含matlab程序)

二阶常微分方程的中心差分求解 学校:中国石油大学(华东)理学院 姓名:张道德 一、 实验目的 1、 构造二阶常微分边值问题: 22,(),(), d u Lu qu f a x b dx u a u b αβ?=-+=<

11122 222222333222122112 100121012010012 00N N N u f q h h u f q h h h u f q h h h q u f h h ---???? ??+-???? ??? ???? ???????-+-? ?????? ???????????=-+? ?????? ???????????-???? ????????-+????? ?? ????? 可以看出系数矩阵为三对角矩阵,而对于系数矩阵为三对角矩阵的方程组可以用“追赶法”求解,则可以得出二阶常微分方程问题的数值解。 四、 举例求解 我们选取的二阶常微分方程边值问题为: 2 22242,01 (0)1,(1), x d u Lu x u e x dx u u e ?=-+=-<

MatLab实习心得体会(体会心得)

MatLab实习心得体会 我从中国石油大学(北京)来到大庆油田勘探开发研究院实习,刚刚来到这里时我内心充满了激动和喜悦,对这个有着辉煌成绩的科研单位充满了期待。到了这里没多久我就参加培训中心组织的入院教育,对研究院的辉煌过去有了更深刻的了解,那时我就下定决心在研究院好好实习,多学习一些现场经验,为以后的工作打下良好的基础。 一个月的入院培训结束后,经过自己申请和中心安排我被分到了地震资料处理一室,实习期间地震一室的副主任陈志德是我的现场导师,陈主任有着丰富的理论知识和现场经验,能够成为他的学生我感到非常的高兴。最初他把我分到了高分辨率处理解释项目组,工作内容主要是跟着项目组成员用landmark做一些解释性的工作,期间我跟着张晶师傅学习到了如何加载地震数据和测井数据;如何应用测井数据做了合成地震记录,另外我还做了一些地层解释方面的工作。landmark实习大概进行了三个多月,从中我学习到了地震解释的一些基本流程,虽然以后从事的是地震资料处理方面的工作,但有解释方面的实习经历对于提高自己的能力也是很有好处的。 十二月份研究院举行了硕士研究生开题汇报,现场导师陈志德针对大庆地区扶扬油层中浅层高频噪声干扰严重的现状给我定出了小波阈值去噪的论文题目,并且小波变换也是我学校导师的研究方向。他根据我的研究方向给我的论文制定了如下三个目标: 1. 小波分解压制单频噪音

应用matlab设计一个含有随机噪音的一维正演模型,采用小波分解的方法压制噪音,最大程度的保留有效信号。 2. 小波分解压制随机噪音 应用matlab 设计一个含有随机噪音的二维正演模型,并利用小波变换阈值方法压制噪音,然后对软、硬阈值去噪方法进行比较,最后得出结论。 3. 对实际地震记录的噪音压制 在对理论模型进行噪音压制的基础上,对实际的二维数据进行了噪音压制,对比分析噪音压制前后的结果。 经过这一年半的实习我基本上达到了上述目标,完成了论文的预期效果。论文中编制的程序加以优化后就可以在实际生产上进行应用。 下面我简单谈一下我论文的具体实现过程: 我首先做了两个正演模型:一个为楔状砂体正演模型,另外一个为砂泥岩透镜体正演模型。模型的生成均是以褶积理论为基础的,用标准雷克子波与给定反射系数进行褶积,最后得到合成记录。合成记录生成后我又在其上加上了均值为零的随机分布的高频白噪声,如何去掉这些噪声就是本次论文的重点。我采用的是小波阈值去噪的方法,该方法的理论基础为:属于besov空间的信号在小波域内其能量主要集中在有限的几个系数中,而噪声的能量却分布于整个小波小波域内,因此经过小波变换后,信号的小波变换系数大于噪声的小波变换系数,于是可以找到一个合适的数λ作为阈值。当小波变换系数w小于该阈值时,认为这是的w主要时由噪声引起的;当w大于该阈值时,认为这是的w主要是由信号引起的,从而实现信噪分离。在论文研究过程中对于小波基的选择、尺度参数的选择

(完整版)Matlab学习系列15.数值计算—高数篇

15. 数值计算—高数篇 一、求极限 limit(f,x,a)——求极限 lim ()x a f x → limit(f,x,a,'right')——求右极限 lim ()x a f x +→ limit(f,x,a,'left')——求左极限 lim ()x a f x -→ 例1 求 2352 lim sin 53x x x x →∞++ 代码: syms x; y=(3*x^2+5)/(5*x+3)*sin(2/x); limit(y,x,inf) 运行结果:ans = 6/5 注:Matlab 求二元函数的极限,是用嵌套limit 函数实现的,相当于求的是累次极限,需要注意:有时候累次极限并不等于极限。 例2 求 30 lim 2x x x x a b +→?? + ??? 代码: syms x a b; y=((a^x+b^x)/2)^(3/x); limit(y,x,0,'right') 运行结果:ans = a^(3/2)*b^(3/2) 二、求导 diff(f,x,n)——求函数f 关于x 的n 阶导数,默认n=1

例3 求1sin 1cos x y x += +的1阶导数,并绘图 代码: syms x a b; y=((a^x+b^x)/2)^(3/x); limit(y,x,0,'right') 运行结果: y1 = cos(x)/(cos(x) + 1) + (sin(x)*(sin(x) + 1))/(cos(x) + 1)^2 例4 设sin xy z e =,求2,,z z z x y x y ??????? 代码: syms x y; z=exp(sin(x*y)); zx=diff(z,x) zy=diff(z,y) zxy=diff(zx,y) % 也等于diff(zy,x) -5 5 5 10 15 20 25 x (sin(x) + 1)/(cos(x) + 1) -5 05 -20 -15 -10-5 05 10 1520 25x cos(x)/(cos(x) + 1) + (sin(x) (sin(x) + 1))/(cos(x) + 1) 2

三相异步电动机Matlab仿真

中国石油大学胜利学院 综合课程设计总结报告 题目:三相异步电机直接启动特性实验模型 学生姓名:潘伟鹏 系别:机械与电气工程系 专业年级:2012 级电气工程专业专升本2 班指导教师:王铭 2013 年 6 月27 日

一、设计任务与要求 普通异步电动机直接起动电流达到额定电流的 6--7 倍,起动转矩能达到额定转矩的 1.25 倍以上。过高的温度、 过快的加热速度、 过大的温度梯度和电磁力, 产生了极大的破坏力, 缩短了定子线圈和转子铜条的使用寿命。 但在电网条件和工艺条件允许的情况下,异步电动机也可以直接启动。本次课程设计通过 MATLAB 软件建模 模拟三相异步电动机直接启动时的各个元器件上的电量变化。 电力系统 matlab 仿真类书籍 电机类教材 二、方案设计与论证 三相异步电动机直接起动就是利用开关或接触器将电动机的定子绕组直接接到具有额定电压的电网上。 由《电机学》知三相异步电动机的电磁转矩 M 与直流电动机的电磁转矩 有相似的表达形式。它 们都与电机结构(表现为转矩常数)和每级下磁通有关,只不过在三相异步电动机中不再是通过电枢的全部 电流,而是点数电流的有功分量。三相异步电机电磁转矩的表达式为: 1-1) 式中 ——转矩常数 ——转子功率因数 式(1-1)表明,转子通入电流后,与气隙磁场相互作用产生电磁力,因此,反映了电机中电流、磁场和 作用力 之间符合左手定则的物理关系,故称为机械特性的物理表达式。该表达式在分析电磁转矩与磁通、电流之间 的关系时非常方便。 从三相异步电动机的转子等值电路可知, (1-3) 将式(1-2)、 (1-3)代入 (1-1) 得: 每级下磁通

(完整版)matlab课程学习总结

目录 VC++ & Matlab 混合编程的快速实现 (2) 摘要 (2) 关键词 (2) 简介: (2) 实例分析 (3) 1、编写Matlab函数 (3) 2、Matlab6.5编译器设置 (3) 3、建立C++控制台工程 (5) 4、启用Matlab Add-in 工具条 (6) 5、VC++6.0环境及工程设置 (7) 6、Matlab到C++的代码转换 (10) 7、C++函数的使用 (11) 特别说明一: (12) 特别说明二: (13) 8、程序的发布 (13) 总结 (13)

VC++ & Matlab 混合编程的快速实现摘要: 许多工程软件需要用到复杂的数学算法。VC++能够形成各种用户界面,并可以直接与系统及底层硬件交换数据。因此研究VC++和Matlab的混合编程具有很大的实际意义。 该文讨论了如何使用Matlab 的Complier 将*.m函数编译为动态链接库DLL,提供VC++ 调用的方法,提供了一种VC++与Matlab 混合编程的快速实现。 关键词:Matlab VC++ MCC Complier 动态链接库DLL 简介: Matlab 作为当今世界上应用最为广泛的数学软件,具有非常强大的数值计算、数据分析处理、系统分析、图形显示甚至符号运算的功能。已经在如生物工程,图像处理,语音处理,雷达探空,声纳探水,地震探地,以及控制论,系统论等各个领域得到广泛的应用。它是一个完整的数学平台,在这个平台上,用户只需寥寥数语就可以完成十分复杂的功能,大大提高了工程分析计算、图像处理的效率。但是Matlab 强大的功能只能在它所提供的平台上才能使用,即用户必须在安装Matlab 系统的机器上才能执行*.m文件。这样当用户需要将在Matlab下已开发完毕的复杂算法应用到高级语言开发环境下时就带了问题,是将现成的东西集成高级语言开发的程序中呢?还是用高级语

三相异步电动机Matlab仿真

三相异步电动机Matlab仿真

————————————————————————————————作者:————————————————————————————————日期:

中国石油大学胜利学院综合课程设计总结报告 题目:三相异步电机直接启动特性实验模型 学生姓名:潘伟鹏 系别:机械与电气工程系 专业年级: 2012级电气工程专业专升本2班 指导教师:王铭

2013年 6 月 27日

一、设计任务与要求 普通异步电动机直接起动电流达到额定电流的6--7倍,起动转矩能达到额定转矩的1.25倍以上。过高的温度、过快的加热速度、过大的温度梯度和电磁力,产生了极大的破坏力,缩短了定子线圈和转子铜条的使用寿命。但在电网条件和工艺条件允许的情况下,异步电动机也可以直接启动。本次课程设计通过MATLAB软件建模模拟三相异步电动机直接启动时的各个元器件上的电量变化。 参考: 电力系统matlab仿真类书籍 电机类教材 二、方案设计与论证 三相异步电动机直接起动就是利用开关或接触器将电动机的定子绕组直接接到具有额定电压的电网上。 由《电机学》知三相异步电动机的电磁转矩M与直流电动机的电磁转矩有相似的表达形式。它们都与电机结构(表现为转矩常数)和每级下磁通有关,只不过在三相异步电动机中不再是通过电枢的全部电流,而是点数电流的有功分量。三相异步电机电磁转矩的表达式为: (1-1)式中——转矩常数 ——每级下磁通 ——转子功率因数 式(1-1)表明,转子通入电流后,与气隙磁场相互作用产生电磁力,因此,反映了电机中电流、磁场和作用力之间符合左手定则的物理关系,故称为机械特性的物理表达式。该表达式在分析电磁转矩与磁通、电流之间的关系时非常方便。 从三相异步电动机的转子等值电路可知, (1-2) (1-3)将式(1-2)、(1-3)代入(1-1)得:

中国石油大学2010届电力系统分析大作业

电力系统分析大作业 牛顿拉夫逊潮流计算 电气1002 1、牛顿-拉夫逊法潮流算法的基本原理 电力系统潮流计算是电力系统运行和规划中最基本和最经常的计算,其任务是在已知某些运行参数的情况下,计算出系统中全部的运行参数,一般来说,各个母线所供负荷的功率是已知的,各个节点电压是未知的(平衡节点除外),可以根据网络结构形成节点导纳矩阵,然后由节点导纳矩阵和网络拓扑结构列写功率方程,由于功率方程里功率是已知的,电压的幅值和相角是未知的,这样潮流计算的问题就转化为求解非线性方程组的问题了。为了便于用迭代法解方程组,需要将上述功率方程改写成功率平衡方程,并对功率平衡方程求偏导,得出对应的雅可比矩阵,给未知节点赋电压初值,一般为额定电压,将初值带入功率平衡方程,得到功率不平衡量,这样由功率不平衡量、雅可比矩阵、节点电压不平衡量(未知的)构成了误差方程,解误差方程,得到节点电压不平衡量,节点电压加上节点电压不平衡量构成新的节点电压初值,将新的初值带入原来的功率平衡方程,并重新形成雅可比矩阵,然后计算新的电压不平衡量,这样不断迭代,不断修正,一般迭代三到五次就能收敛。 2、节点导纳矩阵的算法 根据定义直接求取节点导纳矩阵时,注意以下几点: (1) 节点导纳矩阵是方阵,其阶数就等于网络中除去参考节点外的节点数。参考节点一般取大地,编号为零。 (2) 节点导纳矩阵是稀疏矩阵,其各行非零非对角元素就等于与该行相对应节点所连接的不接地支路数。 (3) 节点导纳矩阵的对角元素就等于该节点所连接导纳的总和。因此,与没有接地支路的节点对应的行或列中,对角元素为非对角元素之和的负值。 (4) 节点导纳矩阵的非对角元素等于连接节点i,j支路导纳的负值。因此,在一般情况下,节点导纳矩阵的对角元素往往大于非对角元素的负值。 (5) 节点导纳矩阵一般是对称矩阵,这是网络的互易特性所决定的。从而,一般只要求取这个矩阵的上三角或下三角部分。 (6) 网络中的变压器。

matlab实习实验报告

实验一时间序列ARMA学习 一、基本形式 ARMA模型分为以下三种: 1.自回归模型(AR) 如果时间序列满足 其中是独立同分布的随机变量序列,且满足: 以及E( ) = 0,则称时间序列为服从p阶的自回归模型。 AR模型是用过去的观测值和现在的干扰值的线性组合来预测未来值,式子中的p为阶数,β为待定参数,y为一个平稳序列。 自回归模型的平稳条件: 滞后算子多项式 的根均在单位圆外,即φ(B) = 0的根大于1。 2.移动平均模型(MA) 如果时间序列满足 则称时间序列为服从q阶移动平均模型; MA模型是用过去的干扰值和现在的干扰值的线性组合预测未来的值,式中q为阶数,α为待定参数,y为一个平稳序列。 移动平均模型平稳条件:任何条件下都平稳。 3.自回归滑动平均模型(ARMA) 如果时间序列满足: 则称时间序列为服从(p,q)阶自回归滑动平均混合模型。 模型求解流程图:

二、实例分析 太阳的光球表面有时会出现一些暗的区域,它是磁场聚集的地方,这就是太阳黑子。黑子是太阳表面可以看到的最突出的现象。一个中等大小的黑子大概和地球的大小差不多。长期的观测发现,黑子多的时候,其他太阳活动现象也会比较频繁。从外文网站查询到太阳黑子数量的变化,从而预测接下来数量的走势。 首先整理数据,进行平稳性判断,使用matlab语言中的adftest()函数即可。

数据为平稳数据,因而无需做平稳化处理,使用AR模型对原数据作出预测。 Matlab代码为: clc clear a=csvread('heizi.csv'); b=a(2700:3234,[1,4]); c=b(:,2); diff(c); adftest(c)% figure(2); subplot(2,1,1) autocorr(c,500)%2 set(gca,'Xlim',[0 500]); subplot(2,1,2) parcorr(c,50); set(gca,'Xlim',[0 50]); z=iddata(c);%× m=armax(z(1:end),'na',20,'nc',0);% yp = predict(m,c,1); figure(3) plot(c,'-.'); hold on plot(yp,'r') grid legend('3?ê??μ','?¤2a?μAR') bzc=sum((yp-c).^2) 结果如下:

相关文档
最新文档