>"是MATLAB的提示符号(Prompt),但在PC中文视窗系统下,由於编码" />
搜档网
当前位置:搜档网 › matlab入门教程文献

matlab入门教程文献

matlab入门教程文献
matlab入门教程文献

MATLAB入门教程

1.MATLAB的基本知识

1-1、基本运算与函数

在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可。例如:

>> (5*2+1.3-0.8)*10/25

ans =4.2000

MATLAB会将运算结果直接存入一变数ans,代表MATLAB运算後的答案(Answer)并显示其数值於萤幕上。

小提示:">>"是MATLAB的提示符号(Prompt),但在PC中文视窗系统下,由於编码方式不同,此提示符号常会消失不见,但这并不会影响到MATLAB的运算结果。

我们也可将上述运算式的结果设定给另一个变数x:

x = (5*2+1.3-0.8)*10^2/25

x = 42

此时MATLAB会直接显示x的值。由上例可知,MATLAB认识所有一般常用到的加(+)、减(-)、乘(*)、除(/)的数学运算符号,以及幂次运算(^)。小提示:MATLAB将所有变数均存成double的形式,所以不需经过变数宣告(Variable declaration)。MATLAB同时也会自动进行记忆体的使用和回收,而不必像C语言,必须由使用者一一指定.这些功能使的MATLAB易学易用,使用者可专心致力於撰写程式,而不必被软体枝节问题所干扰。

若不想让MATLAB每次都显示运算结果,只需在运算式最後加上分号(;)即可,如下例:

y = sin(10)*exp(-0.3*4^2);

若要显示变数y的值,直接键入y即可:

>>y

y =-0.0045

在上例中,sin是正弦函数,exp是指数函数,这些都是MA TLAB常用到的数学函数。

下表即为MATLAB常用的基本数学函数及三角函数:

小整理:MATLAB常用的基本数学函数

abs(x):纯量的绝对值或向量的长度

angle(z):复数z的相角(Phase angle)

sqrt(x):开平方

real(z):复数z的实部

imag(z):复数z的虚部

conj(z):复数z的共轭复数

round(x):四舍五入至最近整数

fix(x):无论正负,舍去小数至最近整数

floor(x):地板函数,即舍去正小数至最近整数

ceil(x):天花板函数,即加入正小数至最近整数

rat(x):将实数x化为分数表示

rats(x):将实数x化为多项分数展开

sign(x):符号函数(Signum function)。

当x<0时,sign(x)=-1;

当x=0时,sign(x)=0;

当x>0时,sign(x)=1。

> 小整理:MATLAB常用的三角函数

sin(x):正弦函数

cos(x):馀弦函数

tan(x):正切函数

asin(x):反正弦函数

acos(x):反馀弦函数

atan(x):反正切函数

atan2(x,y):四象限的反正切函数

sinh(x):超越正弦函数

cosh(x):超越馀弦函数

tanh(x):超越正切函数

asinh(x):反超越正弦函数

acosh(x):反超越馀弦函数

atanh(x):反超越正切函数

变数也可用来存放向量或矩阵,并进行各种运算,如下例的列向量(Row vector)运算:

x = [1 3 5 2];

y = 2*x+1

y = 3 7 11 5

小提示:变数命名的规则

1.第一个字母必须是英文字母

2.字母间不可留空格

3.最多只能有19个字母,MATLAB会忽略多馀字母

我们可以随意更改、增加或删除向量的元素:

y(3) = 2 % 更改第三个元素

y =3 7 2 5

y(6) = 10 % 加入第六个元素

y = 3 7 2 5 0 10

y(4) = [] % 删除第四个元素,

y = 3 7 2 0 10

在上例中,MATLAB会忽略所有在百分比符号(%)之後的文字,因此百分比之後的文字均可视为注解(Comments)。MATLAB亦可取出向量的一个元素或一部份来做运算:

x(2)*3+y(4) % 取出x的第二个元素和y的第四个元素来做运算

ans = 9

y(2:4)-1 % 取出y的第二至第四个元素来做运算

ans = 6 1 -1

在上例中,2:4代表一个由2、3、4组成的向量

若对MATLAB函数用法有疑问,可随时使用help来寻求线上支援(on-line help):help linspace

小整理:MATLAB的查询命令

help:用来查询已知命令的用法。例如已知inv是用来计算反矩阵,键入help inv 即可得知有关inv命令的用法。(键入help help则显示help的用法,请试看看!)lookfor:用来寻找未知的命令。例如要寻找计算反矩阵的命令,可键入lookfor inverse,MATLAB即会列出所有和关键字inverse相关的指令。找到所需的命令後,即可用help进一步找出其用法。(lookfor事实上是对所有在搜寻路径下的M档案进行关键字对第一注解行的比对,详见後叙。)

将列向量转置(Transpose)後,即可得到行向量(Column vector):

z = x'

z = 4.0000

5.2000

6.4000

7.6000

8.8000

10.0000

不论是行向量或列向量,我们均可用相同的函数找出其元素个数、最大值、最小值等:

length(z) % z的元素个数

ans = 6

max(z) % z的最大值

ans = 10

min(z) % z的最小值

ans = 4

小整理:适用於向量的常用函数有:

min(x): 向量x的元素的最小值

max(x): 向量x的元素的最大值

mean(x): 向量x的元素的平均值

median(x): 向量x的元素的中位数

std(x): 向量x的元素的标准差

diff(x): 向量x的相邻元素的差

sort(x): 对向量x的元素进行排序(Sorting)

length(x): 向量x的元素个数

norm(x): 向量x的欧氏(Euclidean)长度

sum(x): 向量x的元素总和

prod(x): 向量x的元素总乘积

cumsum(x): 向量x的累计元素总和

cumprod(x): 向量x的累计元素总乘积

dot(x, y): 向量x和y的内积

cross(x, y): 向量x和y的外积(大部份的向量函数也可适用於矩阵,详见下述。)

若要输入矩阵,则必须在每一列结尾加上分号(;),如下例:

A = [1 2 3 4; 5 6 7 8; 9 10 11 12]; % Matlab 区分大小写

A =

1 2 3 4

5 6 7 8

9 10 11 12

同样地,我们可以对矩阵进行各种处理:

A(2,3) = 5 % 改变位於第二列,第三行的元素值

A =

1 2 3 4

5 6 5 8

9 10 11 12

B = A(2,1:3) % 取出部份矩阵B

B = 5 6 5

A = [A B'] % 将B转置後以行向量并入A

注意:矩阵行列。

A =

1 2 3 4 5

5 6 5 8 6

9 10 11 12 5

A(:, 2) = [] % 删除第二行(:代表所有列)

A =

1 3 4 5

5 5 8 6

9 11 12 5

A = [A; 4 3 2 1] % 加入第四列

A =

1 3 4 5

5 5 8 6

9 11 12 5

4 3 2 1

A([1 4], :) = [] % 删除第一和第四列(:代表所有行)

A =

5 5 8 6

9 11 12 5

这几种矩阵处理的方式可以相互叠代运用,产生各种意想不到的效果,就看各

位的巧思和创意。

小提示:在MATLAB的内部资料结构中,每一个矩阵都是一个以行为主(Column-oriented )的阵列(Array)因此对於矩阵元素的存取,我们可用一维或二维的索引(Index)来定址。举例来说,在上述矩阵A中,位於第二列、第三行的元素可写为A(2,3) (二维索引)或A(6)(一维索引,即将所有直行进行堆叠後的第六个元素)。

此外,若要重新安排矩阵的形状,可用reshape命令:

B = reshape(A, 4, 2) % 4是新矩阵的列数,2是新矩阵的行数

B =

5 8

9 12

5 6

11 5

小提示:A(:)就是将矩阵A每一列堆叠起来,成为一个行向量,而这也是MATLAB变数的内部储存方式。以前例而言,reshape(A, 8, 1)和A(:)同样都会产生一个8x1的矩阵。

MATLAB可在同时执行数个命令,只要以逗号或分号将命令隔开:

x = sin(pi/3); y = x^2; z = y*10,

z =

7.5000

若一个数学运算是太长,可用三个句点将其延伸到下一行:

z = 10*sin(pi/3)* ...

sin(pi/3);

若要检视现存於工作空间(Workspace)的变数,可键入who:

who

Your variables are:

testfile x

这些是由使用者定义的变数。若要知道这些变数的详细资料,可键入:

whos

Name Size Bytes Class

A 2x4 64 double array

B 4x2 64 double array

ans 1x1 8 double array

x 1x1 8 double array

y 1x1 8 double array

z 1x1 8 double array

Grand total is 20 elements using 160 bytes

使用clear可以删除工作空间的变数:

clear A

A

??? Undefined function or variable 'A'.

另外MATLAB有些永久常数(Permanent constants),虽然在工作空间中看不到,

但使用者可直接取用,例如:

pi

ans = 3.1416

下表即为MATLAB常用到的永久常数。

小整理:MATLAB的永久常数i或j:基本虚数单位

eps:系统的浮点(Floating-point)精确度

inf:无限大,例如1/0 nan或NaN:非数值(Not a number),例如0/0

pi:圆周率p(= 3.1415926...)

realmax:系统所能表示的最大数值

realmin:系统所能表示的最小数值

nargin: 函数的输入引数个数

nargin: 函数的输出引数个数

1-2、重复命令

最简单的重复命令是for 圈(for-loop),其基本形式为:

for 变数= 矩阵;

运算式;

end

其中变数的值会被依次设定为矩阵的每一行,来执行介於for和end之间的运算式。因此,若无意外情况,运算式执行的次数会等於矩阵的行数。

举例来说,下列命令会产生一个长度为6的调和数列(Harmonic sequence):

x = zeros(1,6); % x是一个16的零矩阵

for i = 1:6,

x(i) = 1/i;

end

在上例中,矩阵x最初是一个16的零矩阵,在for 圈中,变数i的值依次是1到6,因此矩阵x的第i个元素的值依次被设为1/i。我们可用分数来显示此数列:format rat % 使用分数来表示数值

disp(x)

1 1/

2 1/

3 1/

4 1/

5 1/6

for圈可以是多层的,下例产生一个16的Hilbert矩阵h,其中为於第i列、第j 行的元素为

h = zeros(6);

for i = 1:6,

for j = 1:6,

h(i,j) = 1/(i+j-1);

end

end

disp(h)

1 1/

2 1/

3 1/

4 1/

5 1/6

1/2 1/3 1/4 1/5 1/6 1/7

1/3 1/4 1/5 1/6 1/7 1/8

1/4 1/5 1/6 1/7 1/8 1/9

1/5 1/6 1/7 1/8 1/9 1/10

1/6 1/7 1/8 1/9 1/10 1/11

小提示:预先配置矩阵在上面的例子,我们使用zeros来预先配置(Allocate)了一个适当大小的矩阵。若不预先配置矩阵,程式仍可执行,但此时MATLAB 需要动态地增加(或减小)矩阵的大小,因而降低程式的执行效率。所以在使用一个矩阵时,若能在事前知道其大小,则最好先使用zeros或ones等命令来预先配置所需的记忆体(即矩阵)大小。

在下例中,for 圈列出先前产生的Hilbert矩阵的每一行的平方和:

for i = h,

disp(norm(i)^2); % 印出每一行的平方和

end

1299/871

282/551

650/2343

524/2933

559/4431

831/8801

在上例中,每一次i的值就是矩阵h的一行,所以写出来的命令特别简洁。

令一个常用到的重复命令是while 圈,其基本形式为:

while 条件式;

运算式;

end

也就是说,只要条件示成立,运算式就会一再被执行。例如先前产生调和数列的例子,我们可用while 圈改写如下:

x = zeros(1,6); % x是一个16的零矩阵

i = 1;

while i <= 6,

x(i) = 1/i;

i = i+1;

end

format short

1-3、逻辑命令

最简单的逻辑命令是if, ..., end,其基本形式为:

if 条件式;

运算式;

end

if rand(1,1) > 0.5,

disp('Given random number is greater than 0.5.');

end

Given random number is greater than 0.5.

1-4、集合多个命令於一个M档案

若要一次执行大量的MATLAB命令,可将这些命令存放於一个副档名为m的档案,并在MATLAB提示号下键入此档案的主档名即可。此种包含MATLAB命令的档案都以m为副档名,因此通称M档案(M-files)。例如一个名为test.m 的M档案,包含一连串的MATLAB命令,那麽只要直接键入test,即可执行其所包含的命令:

pwd % 显示现在的目录

ans =

D:\MATLAB5\bin

cd c:\data\mlbook % 进入test.m所在的目录

type test.m % 显示test.m的内容

% This is my first test M-file.

% Roger Jang, March 3, 1997

fprintf('Start of test.m!\n');

for i = 1:3,

fprintf('i = %d ---> i^3 = %d\n', i, i^3);

end

fprintf('End of test.m!\n');

test % 执行test.m

Start of test.m!

i = 1 ---> i^3 = 1

i = 2 ---> i^3 = 8

i = 3 ---> i^3 = 27

End of test.m!

小提示:第一注解行(H1 help line)test.m的前两行是注解,可以使程式易於了解与管理。特别要说明的是,第一注解行通常用来简短说明此M档案的功能,以便lookfor能以关键字比对的方式来找出此M档案。举例来说,test.m的第一注解行包含test这个字,因此如果键入lookfor test,MA TLAB即可列出所有在第一注解行包含test的M档案,因而test.m也会被列名在内。

严格来说,M档案可再细分为命令集(Scripts)及函数(Functions)。前述的test.m 即为命令集,其效用和将命令逐一输入完全一样,因此若在命令集可以直接使用工作空间的变数,而且在命令集中设定的变数,也都在工作空间中看得到。函数则需要用到输入引数(Input arguments)和输出引数(Output arguments)来传递资讯,这就像是C语言的函数,或是FORTRAN语言的副程序(Subroutines)。举例来说,若要计算一个正整数的阶乘(Factorial),我们可以写一个如下的MATLAB函数并将之存档於fact.m:

function output = fact(n)

% FACT Calculate factorial of a given positive integer.

output = 1;

for i = 1:n,

output = output*i;

end

其中fact是函数名,n是输入引数,output是输出引数,而i则是此函数用到的暂时变数。要使用此函数,直接键入函数名及适当输入引数值即可:

y = fact(5)

y = 120

(当然,在执行fact之前,你必须先进入fact.m所在的目录。)在执行fact(5)时,MATLAB会跳入一个下层的暂时工作空间(Temperary workspace),将变数n的值设定为5,然後进行各项函数的内部运算,所有内部运算所产生的变数(包含输入引数n、暂时变数i,以及输出引数output)都存在此暂时工作空间中。运算完毕後,MATLAB会将最後输出引数output的值设定给上层的变数y,并将清除此暂时工作空间及其所含的所有变数。换句话说,在呼叫函数时,你只能经由输入引数来控制函数的输入,经由输出引数来得到函数的输出,但所有的暂时变数都会随着函数的结束而消失,你并无法得到它们的值。

小提示:有关阶乘函数前面(及後面)用到的阶乘函数只是纯粹用来说明MATLAB的函数观念。若实际要计算一个正整数n的阶乘(即n!)时,可直接写成prod(1:n),或是直接呼叫gamma函数:gamma(n-1)。

MATLAB的函数也可以是递 式的(Recursive),也就是说,一个函数可以呼叫它本身。

举例来说,n! = n*(n-1)!,因此前面的阶乘函数可以改成递式的写法:

function output = fact(n)

% FACT Calculate factorial of a given positive integer recursively.

if n == 1, % Terminating condition

output = 1;

return;

end

output = n*fact(n-1);

在写一个递函数时,一定要包含结束条件(Terminating condition),否则此函数将会一再呼叫自己,永远不会停止,直到电脑的记忆体被耗尽为止。以上例而言,n==1即满足结束条件,此时我们直接将output设为1,而不再呼叫此函数本身。

1-5、搜寻路径

在前一节中,test.m所在的目录是d:\mlbook。如果不先进入这个目录,MATLAB 就找不到你要执行的M档案。如果希望MATLAB不论在何处都能执行test.m,那麽就必须将d:\mlbook加入MATLAB的搜寻路径(Search path)上。要检视MATLAB的搜寻路径,键入path即可:

path

MATLABPATH

d:\matlab5\toolbox\matlab\general

d:\matlab5\toolbox\matlab\ops

d:\matlab5\toolbox\matlab\lang

d:\matlab5\toolbox\matlab\elmat

d:\matlab5\toolbox\matlab\elfun

d:\matlab5\toolbox\matlab\specfun

d:\matlab5\toolbox\matlab\matfun

d:\matlab5\toolbox\matlab\datafun

d:\matlab5\toolbox\matlab\polyfun

d:\matlab5\toolbox\matlab\funfun

d:\matlab5\toolbox\matlab\sparfun

d:\matlab5\toolbox\matlab\graph2d

d:\matlab5\toolbox\matlab\graph3d

d:\matlab5\toolbox\matlab\specgraph

d:\matlab5\toolbox\matlab\graphics

d:\matlab5\toolbox\matlab\uitools

d:\matlab5\toolbox\matlab\strfun

d:\matlab5\toolbox\matlab\iofun

d:\matlab5\toolbox\matlab\timefun

d:\matlab5\toolbox\matlab\datatypes

d:\matlab5\toolbox\matlab\dde

d:\matlab5\toolbox\matlab\demos

d:\matlab5\toolbox\tour

d:\matlab5\toolbox\simulink\simulink

d:\matlab5\toolbox\simulink\blocks

d:\matlab5\toolbox\simulink\simdemos

d:\matlab5\toolbox\simulink\dee

d:\matlab5\toolbox\local

此搜寻路径会依已安装的工具箱(Toolboxes)不同而有所不同。要查询某一命令是在搜寻路径的何处,可用which命令:

which expo

d:\matlab5\toolbox\matlab\demos\expo.m

很显然c:\data\mlbook并不在MATLAB的搜寻路径中,因此MATLAB找不到test.m这个M档案:

which test

c:\data\mlbook\test.m

要将d:\mlbook加入MATLAB的搜寻路径,还是使用path命令:

path(path, 'c:\data\mlbook');

此时d:\mlbook已加入MATLAB搜寻路径(键入path试看看),因此MATLAB 已经"看"得到

test.m:

which test

c:\data\mlbook\test.m

现在我们就可以直接键入test,而不必先进入test.m所在的目录。

小提示:如何在其启动MATLAB时,自动设定所需的搜寻路径?如果在每一次启动MATLAB後都要设定所需的搜寻路径,将是一件很麻烦的事。有两种方

法,可以使MATLAB启动後,即可载入使用者定义的搜寻路径:

1.MATLAB的预设搜寻路径是定义在matlabrc.m(在c:\matlab之下,或是其他安装MATLAB 的主目录下),MATLAB每次启动後,即自动执行此档案。因此你可以直接修改matlabrc.m ,以加入新的目录於搜寻路径之中。

2.MATLAB在执行matlabrc.m时,同时也会在预设搜寻路径中寻找startup.m,若此档案存在,则执行其所含的命令。因此我们可将所有在MATLAB启动时必须执行的命令(包含更改搜寻路径的命令),放在此档案中。

每次MATLAB遇到一个命令(例如test)时,其处置程序为:

1.将test视为使用者定义的变数。

2.若test不是使用者定义的变数,将其视为永久常数。

3.若test不是永久常数,检查其是否为目前工作目录下的M档案。

4.若不是,则由搜寻路径寻找是否有test.m的档案。

5.若在搜寻路径中找不到,则MATLAB会发出哔哔声并印出错误讯息。

以下介绍与MATLAB搜寻路径相关的各项命令。

1-6、资料的储存与载入

有些计算旷日废时,那麽我们通常希望能将计算所得的储存在档案中,以便将来可进行其他处理。MATLAB储存变数的基本命令是save,在不加任何选项(Options)时,save会将变数以二进制(Binary)的方式储存至副档名为mat 的档案,如下述:

save:将工作空间的所有变数储存到名为matlab.mat的二进制档案。

save filename:将工作空间的所有变数储存到名为filename.mat的二进制档案。save filename x y z :将变数x、y、z储存到名为filename.mat的二进制档案。以下为使用save命令的一个简例:

who % 列出工作空间的变数

Your variables are:

B h j y

ans i x z

save test B y % 将变数B与y储存至test.mat

dir % 列出现在目录中的档案

. 2plotxy.doc fact.m simulink.doc test.m ~$1basic.doc

.. 3plotxyz.doc first.doc temp.doc test.mat

1basic.doc book.dot go.m template.doc testfile.dat

delete test.mat % 删除test.mat

以二进制的方式储存变数,通常档案会比较小,而且在载入时速度较快,但是就无法用普通的文书软体(例如pe2或记事本)看到档案内容。若想看到档案内容,则必须加上-ascii选项,详见下述:

save filename x -ascii:将变数x以八位数存到名为filename的ASCII档案。Save filename x -ascii -double:将变数x以十六位数存到名为filename的ASCII 档案。

另一个选项是-tab,可将同一列相邻的数目以定位键(Tab)隔开。

小提示:二进制和ASCII档案的比较在save命令使用-ascii选项後,会有下列现象:save命令就不会在档案名称後加上mat的副档名。

因此以副档名mat结尾的档案通常是MATLAB的二进位资料档。

若非有特殊需要,我们应该尽量以二进制方式储存资料。

load命令可将档案载入以取得储存之变数:

load filename:load会寻找名称为filename.mat的档案,并以二进制格式载入。若找不到filename.mat,则寻找名称为filename的档案,并以ASCII格式载入。load filename -ascii:load会寻找名称为filename的档案,并以ASCII格式载入。若以ASCII格式载入,则变数名称即为档案名称(但不包含副档名)。若以二进制载入,则可保留原有的变数名称,如下例:

clear all; % 清除工作空间中的变数

x = 1:10;

save testfile.dat x -ascii % 将x以ASCII格式存至名为testfile.dat的档案

load testfile.dat % 载入testfile.dat

who % 列出工作空间中的变数

Your variables are:

testfile x

注意在上述过程中,由於是以ASCII格式储存与载入,所以产生了一个与档案名称相同的变数testfile,此变数的值和原变数x完全相同。

1-7、结束MATLAB

有三种方法可以结束MATLAB:

1.键入exit

2.键入quit

3.直接关闭MATLAB的命令视窗(Command window)

2.数值分析

2.1微分

diff函数用以演算一函数的微分项,相关的函数语法有下列4个:

diff(f) 传回f对预设独立变数的一次微分值

diff(f,'t') 传回f对独立变数t的一次微分值

diff(f,n) 传回f对预设独立变数的n次微分值

diff(f,'t',n) 传回f对独立变数t的n次微分值

数值微分函数也是用diff,因此这个函数是靠输入的引数决定是以数值或是符号微分,如果引数为向量则执行数值微分,如果引数为符号表示式则执行符号微分。

先定义下列三个方程式,接著再演算其微分项:

>>S1 = '6*x^3-4*x^2+b*x-5';

>>S2 = 'sin(a)';

>>S3 = '(1 - t^3)/(1 + t^4)';

>>diff(S1)

ans=18*x^2-8*x+b

>>diff(S1,2)

ans= 36*x-8

>>diff(S1,'b')

ans= x

>>diff(S2)

ans=

cos(a)

>>diff(S3)

ans=-3*t^2/(1+t^4)-4*(1-t^3)/(1+t^4)^2*t^3

>>simplify(diff(S3))

ans= t^2*(-3+t^4-4*t)/(1+t^4)^2

2.2积分

int函数用以演算一函数的积分项,这个函数要找出一符号式F 使得diff(F)=f。如果积

分式的解析式(analytical form, closed form) 不存在的话或是MATLAB无法找到,则int 传回原输入的符号式。相关的函数语法有下列4个:

int(f) 传回f对预设独立变数的积分值

int(f,'t') 传回f对独立变数t的积分值

int(f,a,b) 传回f对预设独立变数的积分值,积分区间为[a,b],a和b为数值式

int(f,'t',a,b) 传回f对独立变数t的积分值,积分区间为[a,b],a和b为数值式

int(f,'m','n') 传回f对预设变数的积分值,积分区间为[m,n],m和n为符号式

我们示范几个例子:

>>S1 = '6*x^3-4*x^2+b*x-5';

>>S2 = 'sin(a)';

>>S3 = 'sqrt(x)';

>>int(S1)

ans= 3/2*x^4-4/3*x^3+1/2*b*x^2-5*x

>>int(S2)

ans= -cos(a)

>>int(S3)

ans= 2/3*x^(3/2)

>>int(S3,'a','b')

ans= 2/3*b^(3/2)- 2/3*a^(3/2)

>>int(S3,0.5,0.6)

ans= 2/25*15^(1/2)-1/6*2^(1/2)

>>numeric(int(S3,0.5,0.6)) % 使用numeric函数可以计算积分的数值

ans= 0.0741

2.3求解常微分方程式

MATLAB解常微分方程式的语法是dsolve('equation','condition'),其中equation 代表常微分方程式即y'=g(x,y),且须以Dy代表一阶微分项y'D2y代表二阶微分项y'',

condition则为初始条件。

假设有以下三个一阶常微分方程式和其初始条件

y'=3x2, y(2)=0.5

y'=2.x.cos(y)2, y(0)=0.25

y'=3y+exp(2x), y(0)=3

对应上述常微分方程式的符号运算式为:

>>soln_1 = dsolve('Dy = 3*x^2','y(2)=0.5')

ans= x^3-7.500000000000000

>>ezplot(soln_1,[2,4]) % 看看这个函数的长相

>>soln_2 = dsolve('Dy = 2*x*cos(y)^2','y(0) = pi/4')

ans= atan(x^2+1)

>>soln_3 = dsolve('Dy = 3*y + exp(2*x)',' y(0) = 3')

ans= -exp(2*x)+4*exp(3*x)

2.4非线性方程式的实根

要求任一方程式的根有三步骤:

先定义方程式。要注意必须将方程式安排成f(x)=0 的形态,例如一方程式为sin(x)=3,

则该方程式应表示为f(x)=sin(x)-3。可以m-file 定义方程式。

代入适当范围的x, y(x) 值,将该函数的分布图画出,藉以了解该方程式的「长相」。

由图中决定y(x)在何处附近(x0)与x 轴相交,以fzero的语法fzero('function',x0) 即可求出在x0附近的根,其中function 是先前已定义的函数名称。如果从函数分布图看出根不只一个,则须再代入另一个在根附近的x0,再求出下一个根。

以下分别介绍几数个方程式,来说明如何求解它们的根。

例一、方程式为

sin(x)=0

我们知道上式的根有,求根方式如下:

>> r=fzero('sin',3) % 因为sin(x)是内建函数,其名称为sin,因此无须定义它,选择x=3 附近求根

r=3.1416

>> r=fzero('sin',6) % 选择x=6 附近求根

r = 6.2832

例二、方程式为MATLAB 内建函数humps,我们不须要知道这个方程式的形态为何,不过我们可以将它划出来,再找出根的位置。求根方式如下:>> x=linspace(-2,3);

>> y=humps(x);

>> plot(x,y), grid % 由图中可看出在0和1附近有二个根

>> r=fzero('humps',1.2)

r = 1.2995

例三、方程式为y=x.^3-2*x-5

这个方程式其实是个多项式,我们说

明除了用roots 函数找出它的根外,也可以用这节介绍的方法求根,注意二者的解法及结果有所不同。求根方式如下:% m-function, f_1.m

function y=f_1(x) % 定义f_1.m 函数

y=x.^3-2*x-5;

>> x=linspace(-2,3);

>> y=f_1(x);

>> plot(x,y), grid % 由图中可看出在2和-1附近有二个根

>> r=fzero('f_1',2); % 决定在2附近的根

r = 2.0946

>> p=[1 0 -2 -5]

>> r=roots(p) % 以求解多项式根方式验证

r =

2.0946

-1.0473 + 1.1359i

-1.0473 - 1.1359i

2.5线性代数方程(组)求解

我们习惯将上组方程式以矩阵方式表示如下

AX=B

其中 A 为等式左边各方程式的系数项,X 为欲求解的未知项,B 代表等式右边之已知项

要解上述的联立方程式,我们可以利用矩阵左除\ 做运算,即是X=A\B。

如果将原方程式改写成XA=B

其中 A 为等式左边各方程式的系数项,X 为欲求解的未知项,B 代表等式右边之已知项

注意上式的X, B 已改写成列向量,A其实是前一个方程式中A 的转置矩阵。上式的X 可以矩阵右除/ 求解,即是X=B/A。

若以反矩阵运算求解AX=B, X=B,即是X=inv(A)*B,或是改写成XA=B, X=B,即是X=B*inv(A)。

我们直接以下面的例子来说明这三个运算的用法:

>> A=[3 2 -1; -1 3 2; 1 -1 -1]; % 将等式的左边系数键入

>> B=[10 5 -1]'; % 将等式右边之已知项键入,B要做转置

>> X=A\B % 先以左除运算求解

X = % 注意X为行向量

-2

5

6

>> C=A*X % 验算解是否正确

C = % C=B

10

5

-1

>> A=A'; % 将A先做转置

>> B=[10 5 -1];

>> X=B/A % 以右除运算求解的结果亦同

X = % 注意X为列向量

10 5 -1

>> X=B*inv(A); % 也可以反矩阵运算求解

3.基本xy平面绘图命令

MATLAB不但擅长於矩阵相关的数值运算,也适合用在各种科学目视表示(Scientific visualization)。

本节将介绍MATLAB基本xy平面及xyz空间的各项绘图命令,包含一维曲线及二维曲面的绘制、列印及存档。

plot是绘制一维曲线的基本函数,但在使用此函数之前,我们需先定义曲线上每一点的x 及y座标。

下例可画出一条正弦曲线:

close all;

x=linspace(0, 2*pi, 100); % 100个点的x座标

y=sin(x); % 对应的y座标

plot(x,y);

小整理:MATLAB基本绘图函数

plot: x轴和y轴均为线性刻度(Linear scale)

loglog: x轴和y轴均为对数刻度(Logarithmic scale)

semilogx: x轴为对数刻度,y轴为线性刻度

semilogy: x轴为线性刻度,y轴为对数刻度

若要画出多条曲线,只需将座标对依次放入plot函数即可:

plot(x, sin(x), x, cos(x));

若要改变颜色,在座标对後面加上相关字串即可:

plot(x, sin(x), 'c', x, cos(x), 'g');

若要同时改变颜色及图线型态(Line style),也是在座标对後面加上相关字串即可:

plot(x, sin(x), 'co', x, cos(x), 'g*');

小整理:plot绘图函数的叁数字元颜色字元图线型态y 黄色. 点k 黑色o 圆w 白色x xb 蓝色+ +g 绿色* *r 红色- 实线c 亮青色: 点线m 锰紫色-. 点虚线-- 虚线

图形完成後,我们可用axis([xmin,xmax,ymin,ymax])函数来调整图轴的范围:axis([0, 6, -1.2, 1.2]);

此外,MATLAB也可对图形加上各种注解与处理:

xlabel('Input Value'); % x轴注解

ylabel('Function Value'); % y轴注解

title('Two Trigonometric Functions'); % 图形标题

legend('y = sin(x)','y = cos(x)'); % 图形注解

grid on; % 显示格线

我们可用subplot来同时画出数个小图形於同一个视窗之中:

subplot(2,2,1); plot(x, sin(x));

subplot(2,2,2); plot(x, cos(x));

subplot(2,2,3); plot(x, sinh(x));

subplot(2,2,4); plot(x, cosh(x));

MATLAB还有其他各种二维绘图函数,以适合不同的应用,详见下表。小整理:其他各种二维绘图函数

bar 长条图

errorbar 图形加上误差范围

fplot 较精确的函数图形

polar 极座标图

hist 累计图

rose 极座标累计图

stairs 阶梯图

stem 针状图

fill 实心图

feather 羽毛图

compass 罗盘图

quiver 向量场图

以下我们针对每个函数举例。

当资料点数量不多时,长条图是很适合的表示方式:

close all; % 关闭所有的图形视窗

x=1:10;

y=rand(size(x));

bar(x,y);

如果已知资料的误差量,就可用errorbar来表示。下例以单位标准差来做资的误差量:

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

y = sin(x);

e = std(y)*ones(size(x));

errorbar(x,y,e)

对於变化剧烈的函数,可用fplot来进行较精确的绘图,会对剧烈变化处进行较密集的取样,如下例:

matlab入门经典范例

num1=[13]; den1=conv([1,1],[1,0]); G1=tf(num1,den1); num2=[5.096,13]; ssys1=conv([1,1],[1,0]); ssys2=conv([0.098,1],[1]); den2=conv( ssys1,ssys2); G2=tf(num2,den2); figure(1) margin(G1); hold on margin(G2); num1=[13]; den1=conv([1,1],[1,0]); G1=tf(num1,den1); num2=[5.096,13]; ssys1=conv([1,1],[1,0]); ssys2=conv([0.098,1],[1]); den2=conv( ssys1,ssys2); G2=tf(num2,den2); figure(1) margin(G1); hold on margin(G2); num=[4.56,10]; ssys1=conv([1,1],[1,0]); ssys2=conv([0.114,1],[1]); den=conv( ssys1,ssys2); G=tf(num,den); figure(1) bode(G) num=[4.56,10]; ssys1=conv([1,1],[1,0]); ssys2=conv([0.114,1],[1]); den=conv( ssys1,ssys2); G=tf(num,den); figure(1) msrgin(G); num1=[13]; den1=conv([1,1],[1,0]);

matlab经典习题及解答

第1章 MATLAB概论 1.1与其他计算机语言相比较,MATLAB语言突出的特点是什么? MATLAB具有功能强大、使用方便、输入简捷、库函数丰富、开放性强等特点。 1.2 MATLAB系统由那些部分组成? MATLAB系统主要由开发环境、MATLAB数学函数库、MATLAB语言、图形功能和应用程序接口五个部分组成。 1.4 MATLAB操作桌面有几个窗口?如何使某个窗口脱离桌面成为独立窗口?又如何将脱离出去的窗口重新放置到桌面上? 在MATLAB操作桌面上有五个窗口,在每个窗口的右上角有两个小按钮,一个是关闭窗口的Close按钮,一个是可以使窗口成为独立窗口的Undock按钮,点击Undock按钮就可以使该窗口脱离桌面成为独立窗口,在独立窗口的view菜单中选择Dock ……菜单项就可以将独立的窗口重新防止的桌面上。 1.5 如何启动M文件编辑/调试器? 在操作桌面上选择“建立新文件”或“打开文件”操作时,M文件编辑/调试器将被启动。在命令窗口中键入edit命令时也可以启动M文件编辑/调试器。 1.6 存储在工作空间中的数组能编辑吗?如何操作? 存储在工作空间的数组可以通过数组编辑器进行编辑:在工作空间浏览器中双击要编辑的数组名打开数组编辑器,再选中要修改的数据单元,输入修改内容即可。 1.7 命令历史窗口除了可以观察前面键入的命令外,还有什么用途? 页脚内容1

命令历史窗口除了用于查询以前键入的命令外,还可以直接执行命令历史窗口中选定的内容、将选定的内容拷贝到剪贴板中、将选定内容直接拷贝到M文件中。 1.8 如何设置当前目录和搜索路径,在当前目录上的文件和在搜索路径上的文件有什么区别? 当前目录可以在当前目录浏览器窗口左上方的输入栏中设置,搜索路径可以通过选择操作桌面的file 菜单中的Set Path菜单项来完成。在没有特别说明的情况下,只有当前目录和搜索路径上的函数和文件能够被MATLAB运行和调用,如果在当前目录上有与搜索路径上相同文件名的文件时则优先执行当前目录上的文件,如果没有特别说明,数据文件将存储在当前目录上。 1.9 在MATLAB中有几种获得帮助的途径? 在MATLAB中有多种获得帮助的途径: (1)帮助浏览器:选择view菜单中的Help菜单项或选择Help菜单中的MATLAB Help菜单项可以打开帮助浏览器; (2)help命令:在命令窗口键入“help”命令可以列出帮助主题,键入“help 函数名”可以得到指定函数的在线帮助信息; (3)lookfor命令:在命令窗口键入“lookfor 关键词”可以搜索出一系列与给定关键词相关的命令和函数 (4)模糊查询:输入命令的前几个字母,然后按Tab键,就可以列出所有以这几个字母开始的命令和函数。 注意:lookfor和模糊查询查到的不是详细信息,通常还需要在确定了具体函数名称后用help命令显示详细信息。 第2章MATLAB矩阵运算基础 页脚内容2

BP神经网络matlab实例(简单而经典)

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); %对BP网络进行仿真 anew=postmnmx(anewn,mint,maxt); %还原数据 y=anew'; 1、BP网络构建 (1)生成BP网络 = (,[1 2...],{ 1 2...},,,) net newff PR S S SNl TF TF TFNl BTF BLF PF R?维矩阵。 PR:由R维的输入样本最小最大值构成的2 S S SNl:各层的神经元个数。 [ 1 2...] TF TF TFNl:各层的神经元传递函数。 { 1 2...} 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网络的训练函数 训练方法训练函数 梯度下降法traingd 有动量的梯度下降法traingdm 自适应lr梯度下降法traingda 自适应lr动量梯度下降法traingdx 弹性梯度下降法trainrp Fletcher-Reeves共轭梯度法traincgf

matlab入门教程

MATLAB入门教程 1.MATLAB的基本知识 1-1、基本运算与函数 在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可。例如: >> (5*2+1.3-0.8)*10/25 ans =4.2000 MATLAB会将运算结果直接存入一变数ans,代表MATLAB运算後的答案(Answer)并显示其数值於萤幕上。 小提示: ">>"是MATLAB的提示符号(Prompt),但在PC中文视窗系统下,由於编码方式不同,此提示符号常会消失不见,但这并不会影响到MATLAB的运算结果。 我们也可将上述运算式的结果设定给另一个变数x: x = (5*2+1.3-0.8)*10^2/25 x = 42 此时MATLAB会直接显示x的值。由上例可知,MATLAB认识所有一般常用到的加(+)、减(-)、乘(*)、除(/)的数学运算符号,以及幂次运算(^)。 小提示:MATLAB将所有变数均存成double的形式,所以不需经过变数宣告(Variable declaration)。MATLAB同时也会自动进行记忆体的使用和回收,而不必像C语言,必须由使用者一一指定.这些功能使的MATLAB易学易用,使用者可专心致力於撰写程式,而不必被软体枝节问题所干扰。 若不想让MATLAB每次都显示运算结果,只需在运算式最後加上分号(;)即可,如下例: y = sin(10)*exp(-0.3*4^2); 若要显示变数y的值,直接键入y即可: >>y y =-0.0045 在上例中,sin是正弦函数,exp是指数函数,这些都是MATLAB常用到的数学函数。 下表即为MATLAB常用的基本数学函数及三角函数: 小整理:MATLAB常用的基本数学函数 abs(x):纯量的绝对值或向量的长度 angle(z):复数z的相角(Phase angle)

matlab经典编程例题

以下各题均要求编程实现,并将程序贴在题目下方。 1.从键盘输入任意个正整数,以0结束,输出那些正整数中的素数。 clc;clear; zzs(1)=input('请输入正整数:');k=1; n=0;%素数个数 while zzs(k)~=0 flag=0;%是否是素数,是则为1 for yz=2:sqrt(zzs(k))%因子从2至此数平方根 if mod(zzs(k),yz)==0 flag=1;break;%非素数跳出循环 end end if flag==0&zzs(k)>1%忽略0和1的素数 n=n+1;sus(n)=zzs(k); end k=k+1; zzs(k)=input('请输入正整数:'); end disp(['你共输入了' num2str(k-1) '个正整数。它们是:']) disp(zzs(1:k-1))%不显示最后一个数0 if n==0 disp('这些数中没有素数!')%无素数时显示 else disp('其中的素数是:') disp(sus) end 2.若某数等于其所有因子(不含这个数本身)的和,则称其为完全数。编程求10000以内所有的完全数。 clc;clear;

wq=[];%完全数赋空数组 for ii=2:10000 yz=[];%ii的因子赋空数组 for jj=2:ii/2 %从2到ii/2考察是否为ii的因子 if mod(ii,jj)==0 yz=[yz jj];%因子数组扩展,加上jj end end if ii==sum(yz)+1 wq=[wq ii];%完全数数组扩展,加上ii end end disp(['10000以内的完全数为:' num2str(wq)])%输出 3.下列这组数据是美国1900—2000年人口的近似值(单位:百万)。 (1)若. 2c + = y+ 与试编写程序计算出上式中的a、b、c; 的经验公式为 t at bt y (2)若.bt 的经验公式为 y= 与试编写程序计算出上式中的a、b; y ae t (3)在一个坐标系下,画出数表中的散点图(红色五角星),c + =2中 ax bx y+拟合曲线图(蓝色实心线),以及.bt y=(黑色点划线)。 ae (4)图形标注要求:无网格线,横标注“时间t”,纵标注“人口数(百万)”,图形标题“美国1900—2000年的人口数据”。 (5)程序中要有注释,将你的程序和作好的图粘贴到这里。 clf;clc;clear %清除图形窗、屏幕、工作空间 t=1900:10:2000; y=[76 92 106 123 132 151 179 203 227 250 281]; p1=polyfit(t,y,2);%二次多项式拟合

Matlab基础教程

1-1、基本运算与函数 在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可。例如: >> (5*2+1.3-0.8)*10/25 ans =4.2000 MATLAB会将运算结果直接存入一变数ans,代表MATLAB运算後的答案(Answer)并显示其数值於萤幕上。 小提示: ">>"是MATLAB的提示符号(Prompt),但在PC中文视窗系统下,由於编码方式不同,此提示符号常会消失不见,但这并不会影响到MATLAB的运算结果。 我们也可将上述运算式的结果设定给另一个变数x: x = (5*2+1.3-0.8)*10^2/25 x = 42 此时MATLAB会直接显示x的值。由上例可知,MATLAB认识所有一般常用到的加(+)、减(-)、乘(*)、除(/)的数学运算符号,以及幂次运算(^)。 小提示: MATLAB将所有变数均存成double的形式,所以不需经过变数宣告(Variable declaration)。MATLAB同时也会自动进行记忆体的使用和回收,而不必像C语言,必须由使用者一一指定.这些功能使的MATLAB易学易用,使用者可专心致力於撰写程式,而不必被软体枝节问题所干扰。 若不想让MATLAB每次都显示运算结果,只需在运算式最後加上分号(;)即可,如下例: y = sin(10)*exp(-0.3*4^2);

若要显示变数y的值,直接键入y即可: >>y y =-0.0045 在上例中,sin是正弦函数,exp是指数函数,这些都是MATLAB常用到的数学函数。 下表即为MATLAB常用的基本数学函数及三角函数: 小整理:MATLAB常用的基本数学函数 abs(x):纯量的绝对值或向量的长度 angle(z):复数z的相角(Phase angle) sqrt(x):开平方 real(z):复数z的实部 imag(z):复数z的虚部 conj(z):复数z的共轭复数 round(x):四舍五入至最近整数 fix(x):无论正负,舍去小数至最近整数 floor(x):地板函数,即舍去正小数至最近整数 ceil(x):天花板函数,即加入正小数至最近整数 rat(x):将实数x化为分数表示 rats(x):将实数x化为多项分数展开

matlab学习笔记(入门)

数据类:double,unit8,unit16,unit32,int8,int16,int32,single,char,logical!Matlab中所有数值计算都可以用double类来进行!,unit8实际中最常用的图像 图像类型:亮度图像,二值图像,索引图像,RGB图像 亮度图像:是数据矩阵,若是unit8或uint16则是【0,255】或者是【0,65535】,若是double 类,则像素取值是浮点数 二值图像只有:0和1的逻辑数组! 、 简单操作: 读图并显示详细情况 >> f=imread('E:\image\book.pgm');whos Name Size Bytes Class Attributes f 289x338 97682 uint8 将图像垂直翻转: >> f=imread('E:\image\book.pgm');fp=f(end:-1:1, : );imshow(fp) 将图像上下左右翻转: f=imread('E:\image\book.pgm');fc=f(end:-1:1,end:-1:1);imshow(fc) 将图像二次采样并显示详情: >> fs=f(1:2:end,1:2:end);imshow(fs) >> whos fs Name Size Bytes Class Attributes fs 145x169 24505 uint8 将图像取出一部分: >> fg=f(200:250,200:300);imshow(fg) 显示图像中的一条水平扫描线: >> plot(f(200, : ) 将两幅图像进行相乘: f=imread('c:\image\liangdian.jpg');g=imread('c:\image\shuiguo.jpg'); g=g(300:715,500:1149);f=f(1:416,1:650);f d=double(f);gd=double(g); p=fd.*gd;数组乘! pmax=max(p(:));pmin=min(p(:));取最大最小值! pn=mat2gray(p);figure,imshow(pn) 亮度变化: 函数imadjust是对灰度图像进行亮度变化的基本ipt工具: g=imadjust(f,[low-in high-in],[low-in high-in],gamma) Gamma为1线性映射,大于1,则映射被加权至更低(更暗的)输出值,小于一,加权至更高的输出值 明暗反转图像(负片)参数不同: >> f=imread('E:\image\book.pgm');g=imadjust(f, [0 1],[1 0 ]);imshow(g) >> f=imread('E:\image\book.pgm');g=imadjust(f, [0 1],[1 0 ],2);imshow(g) >> f=imread('E:\image\book.pgm');g=imadjust(f, [0 1],[1 0 ],0.5);imshow(g) 另外也可以这样:进行明暗反转: g=imcomplement(f);imshow(g) 将0.5到0.75之间的灰度级拓展到0-1,可用于突出我们感兴趣的亮度带

Matlab2012教程--经典教程

第1章基础准备及入门 1.1 最简单的计算器使用法 为易于学习,本节以算例方式叙述,并通过算例归纳一些MATLAB最基本的规则和语 法结构。建议读者,在深入学习之前,先读一读本节。 2 【例1.3-1】求[122(74)]3的算术运算结果。本例演示:最初步的指令输入形式 和必需的操作步骤。 (1)用键盘在MA TLAB指令窗中输入以下内容 >> (12+2*(7-4))/3^2 (2)在上述表达式输入完成后,按[Enter] 键,该指令被执行,并显示如下结果。 ans = 2 〖说明〗 本例在指令窗中实际运行的情况参见图 1.3-1。 指令行“头首”的“>>”是“指令输入提示符”,它是自动生成的。本书在此后的输入指令前将不再带提示符“>>”。理由是:(A)为使本书简洁;(B)本书用MATLAB 的M-book写成,而在M-book中运行的指令前是没有提示符的。 5

MATLAB的运算符(如+、- 等)都是各种计算程序中常见的习惯符号。 一条指令输入结束后,必须按[Enter] 键,那指令才被执行。 由于本例输入指令是“不含赋值号的表达式”,所以计算结果被赋给MATLAB的一个默认变量“ans”。它是英文“answer”的缩写。 【例1.3-2】“续行输入”法。本例演示:或由于指令太长,或出于某种需要,输入指令行必 须多行书写时,该如何处理。 S=1-1/2+1/3-1/4+ ... 1/5-1/6+1/7-1/8 S = 0.6345 〖说明〗 MA TLAB用3个或3个以上的连续黑点表示“续行”,即表示下一行是上一行的继续。 本例指令中包含“赋值号”,因此表达式的计算结果被赋给了变量S。 指令执行后,变量S被保存在MA TLAB 的工作空间(Workspace)中,以备后用。如果用户不用clear 指令清除它,或对它重新赋值,那么该变量会一直保存在工作空间中, 直到本MATLAB 指令窗被关闭为止。 1.3.3数值、变量和表达式 前节算例只是表演了“计算器”功能,那仅是MA TLAB全部功能中小小一角。为深入 学习MA TLAB,有必要系统介绍一些基本规定。本节先介绍关于变量的若干规定。 一数值的记述 MATLAB的数值采用习惯的十进制表示,可以带小数点或负号。以下记述都合法。 3 -99 0.001 9.456 1.3e-3 4.5e33 在采用IEEE浮点算法的计算机上,数值通常采用“占用64位内存的双精度”表示。 其相对精度是eps (MATLAB的一个预定义变量),大约保持有效数字16位。数值范围大308308 致从10到10。 二变量命名规则 变量名、函数名是对字母大小写敏感的。如变量myvar和MyVar表示两个不同的变量。 sin是MATLAB定义的正弦函数名,但SIN,Sin等都不是。 变量名的第一个字符必须是英文字母,最多可包含63个字符(英文、数字和下连符)。 如myvar201是合法的变量名。 变量名中不得包含空格、标点、运算符,但可以包含下连符。如变量名my_var_201是合法的,且读起来更方便。而my,var201由于逗号的分隔,表示的就不是一个变量名。 6

MATLAB基础及应用教程

第4章程序设计 在前面我们已经看到,MATLAB不但可以在命令窗直接输入命令并运行,而且还可以生成自己的程序文件,这就是我们通常说的一类以M为后缀的M文件,本章我们就来研究这类文件的形成方法。 M文件可分分为两大类,一是命令式M文件(也称为脚本文件,script),二是函数式M 文件(function)。两类文件的区别在于: (1)命令式文件可以直接运行,函数式文件不能直接运行,只能调用。 (2)命令式文件运行时没有输入输出参量,函数式文件在调用时需要进行输入输出参量设置。 (3)命令式文件运行中可以调用工作空间的数据,运行中产生的所有变量为全局变量。 (4)函数式文件不能调用工作空间的数据,运行中产生的所有变量为局部变量。命令式文件运行中产生的所有变量为全局变量,可以调用和存储到工作空间的数据。 4.1 MATLAB的程序文件-M文件 4.1.1 脚本文件(Scripts) 当我们需要在命令窗进行大量的命令集合运行时,直接从命令窗口输入比较麻烦,这时就可以将这些命令集合存放在一个脚本文件(Scripts)中,运行时只需要输入其文件名就可以自动执行这些命令集合。需要注意的是,脚本文件运行所产生的变量都驻留在MATLAB 的工作空间中,同时脚本文件也可以调用工作空间中的数据。因此,脚本文件所涉及的变量是全局变量。前几章所涉及到的M文件都是这类脚本文件。 编辑一个脚本文件可以直接在命令窗口的左上角打开编辑窗进行编辑。 4.1.2 函数文件(function) 函数式文件(function)的构成 (1)函数定义行: Function [输出参量]=gauss(输入参量) (2): 完成函数的功能。 (3)函数说明。 (4)函数行注。 从上面构成的情况看,函数式文件实际上是完成输入参量与输出参量的转换,这样的转换是由函数文件名为gauss的文件来完成的。函数体的功能必须说明清楚输入参量与输出参量的关系。函数说明是用来解释该函数的功能的,函数行注是对程序行进行说明的。上面(1)和(2)是必须的。 【例4-1】分析下面函数文件。 %一个数列,任意项等于前两项之和,输入项数可以给出这个数列

Matlab经典案例

1、三维曲线 >> t=0:pi/50:10*pi; >> plot3(sin(2*t),cos(2*t),t) >> axis square >> grid on 2、一窗口多图形 >> t=-2*pi:0.01:2*pi; >> subplot(3,2,1) >> plot(t,sin(t)) >> subplot(3,2,2) >> plot(t,cos(t)) >> subplot(3,2,3) >> plot(t,tan(t)) >> axis([-pi pi -100 100]) >> subplot(3,2,4) >> plot(t,cot(t)) >> axis([-pi pi -100 100]) >> subplot(3,2,5) >> plot(t,atan(t)) >> subplot(3,2,6) >> plot(t,acot(t)) 3、图形样式、标注、题字(也可以利用菜单直接 Insert) >> x=0:pi/20:2*pi; >> plot(x,sin(x),'b-.') >> hold on >> plot(x,cos(x),'r--') >> hold on >> plot(x,sin(x)-1,'g:')

>> hold on >> plot(x,cos(x)-1) >> xlabel('x'); >> xlabel('x轴'); >> ylabel('y轴'); >> title('图形样式、标注等'); >> text(pi,sin(pi),'x=\pi'); >> legend('sin(x)','cos(x)','sin(x)-1','cos(x)-1'); >> [x1,y1]=ginput(1) %利用鼠标定位查找线上某点的值x1 = 2.0893 y1 = -0.5000 >> gtext('x=2.5') %鼠标定位放置所需的值在线上 4、 >> fplot('[sin(x),cos(x),sqrt(x)-1]',[0 2*pi]) M文件:myfun.m 内容如下: function y=myfun(x) y(:,1)=sin(x); y(:,2)=cos(x); y(:,3)=x^(1/2)-1; 再运行:>> fplot('myfun',[0 2*pi]) 同样可以得到右图 5、 >> [x,y]=fplot('sin',[0 2*pi]); >> [x1,y1]=fplot('cos',[0 2*pi]); >> plot(x,y,'-r',x1,y1,'-.k') >> legend('y=sinx','y=cosx') 6、

matlab经典代码大全

哈哈哈 MATLAB 显示正炫余炫图:plot(x,y1,'* r',x,y2,'o b') 定义【0,2π】;t=0:pi/10:2*pi; 定义函数文件:function [返回变量列表]=函数名(输入变量列表) 顺序结构:选择结构 1)if-else-end语句 其格式为: if 逻辑表达式 程序模块1; else 程序模块2; End 图片读取:%选择图片路径 [filename, pathname] = ... uigetfile({'*.jpg';'*.bmp';'*.gif'},'选择图片'); %合成路径+文件名 str=[pathname,filename]; %为什么pathname和filename要前面出现的位置相反才能运行呢???%读取图片 im=imread(str); %使用图片 axes(handles.axes1); %显示图片 imshow(im); 边缘检测: global im str=get(hObject,'string'); axes (handles.axes1); switch str case ' 原图' imshow(im); case 'sobel' BW = edge(rgb2gray(im),'sobel'); imshow(BW); case 'prewitt' BW = edge(rgb2gray(im),'prewitt');

imshow(BW); case 'canny' BW = edge(rgb2gray(im),'canny'); imshow(BW);Canny算子边缘定位精确性和抗噪声能力效果较好,是一个折中方案 end; 开闭运算: se=[1,1,1;1,1,1;1,1,1;1,1,1]; %Structuring Element I=rgb2gray(im); imshow(I,[]);title('Original Image'); I=double(I); [im_height,im_width]=size(I); [se_height,se_width]=size(se); halfheight=floor(se_height/2); halfwidth=floor(se_width/2); [se_origin]=floor((size(se)+1)/2); image_dilation=padarray(I,se_origin,0,'both'); %Image to be used for dilation image_erosion=padarray(I,se_origin,256,'both'); %Image to be used for erosion %%%%%%%%%%%%%%%%%% %%% Dilation %%% %%%%%%%%%%%%%%%%%% for k=se_origin(1)+1:im_height+se_origin(1) for kk=se_origin(2)+1:im_width+se_origin(2) dilated_image(k-se_origin(1),kk-se_origin(2))=max(max(se+image_dilation(k-se_origin(1):k+halfh eight-1,kk-se_origin(2):kk+halfwidth-1))); end end figure;imshow(dilated_image,[]);title('Image after Dilation'); %%%%%%%%%%%%%%%%% %%% Erosion %%% %%%%%%%%%%%%%%%%% se=se'; for k=se_origin(2)+1:im_height+se_origin(2) for kk=se_origin(1)+1:im_width+se_origin(1) eroded_image(k-se_origin(2),kk-se_origin(1))=min(min(image_erosion(k-se_origin(2):k+halfwidth -1,kk-se_origin(1):kk+halfheight-1)-se)); end end figure;imshow(eroded_image,[]);title('Image after Erosion'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Opening(Erosion first, then Dilation) %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

(完整版)matlab经典习题及解答

第1章 MATLAB 概论 1.1 与其他计算机语言相比较,MATLAB 语言突出的特点是什么? MATLAB 具有功能强大、使用方便、输入简捷、库函数丰富、开放性强等特点。 1.2 MATLAB 系统由那些部分组成? MATLAB 系统主要由开发环境、MATLAB 数学函数库、MATLAB 语言、图形功能和应用程序接口五个部分组成。 1.4 MATLAB 操作桌面有几个窗口?如何使某个窗口脱离桌面成为独立窗口?又如何将脱离出去的窗口重新放置到桌面上? 在MATLAB 操作桌面上有五个窗口,在每个窗口的右上角有两个小按钮,一个是关闭窗口的Close 按钮,一个是可以使窗口成为独立窗口的Undock 按钮,点击Undock 按钮就可以使该窗口脱离桌面成为独立窗口,在独立窗口的view 菜单中选择Dock ……菜单项就可以将独立的窗口重新防止的桌面上。 1.5 如何启动M 文件编辑/调试器? 在操作桌面上选择“建立新文件”或“打开文件”操作时,M 文件编辑/调试器将被启动。在命令窗口中键入edit 命令时也可以启动M 文件编辑/调试器。 1.6 存储在工作空间中的数组能编辑吗?如何操作? 存储在工作空间的数组可以通过数组编辑器进行编辑:在工作空间浏览器中双击要编辑的数组名打开数组编辑器,再选中要修改的数据单元,输入修改内容即可。 1.7 命令历史窗口除了可以观察前面键入的命令外,还有什么用途? 命令历史窗口除了用于查询以前键入的命令外,还可以直接执行命令历史窗口中选定的内容、将选定的内容拷贝到剪贴板中、将选定内容直接拷贝到M 文件中。 1.8 如何设置当前目录和搜索路径,在当前目录上的文件和在搜索路径上的文件有什么区别? 当前目录可以在当前目录浏览器窗口左上方的输入栏中设置,搜索路径可以通过选择操作桌面的file 菜单中的Set Path 菜单项来完成。在没有特别说明的情况下,只有当前目录和搜索路径上的函数和文件能够被MATLAB 运行和调用,如果在当前目录上有与搜索路径上相同文件名的文件时则优先执行当前目录上的文件,如果没有特别说明,数据文件将存储在当前目录上。 1.9 在MATLAB 中有几种获得帮助的途径? 在MATLAB 中有多种获得帮助的途径: (1)帮助浏览器:选择view 菜单中的Help 菜单项或选择Help 菜单中的MATLAB Help 菜单项可以打开帮助浏览器; (2)help 命令:在命令窗口键入“help ” 命令可以列出帮助主题,键入“help 函数名”可以得到指定函数的在线帮助信息; (3)lookfor 命令:在命令窗口键入“lookfor 关键词”可以搜索出一系列与给定关键词相关的命令和函数 (4)模糊查询:输入命令的前几个字母,然后按Tab 键,就可以列出所有以这几个字母开始的命令和函数。 注意:lookfor 和模糊查询查到的不是详细信息,通常还需要在确定了具体函数名称后用help 命令显示详细信息。 第2章 MATLAB 矩阵运算基础 2.1 在MATLAB 中如何建立矩阵?? ? ???194375,并将其赋予变量a ? >> a=[5 7 3;4 9 1] 2.2 有几种建立矩阵的方法?各有什么优点? 可以用四种方法建立矩阵: ①直接输入法,如a=[2 5 7 3],优点是输入方法方便简捷; ②通过M 文件建立矩阵,该方法适用于建立尺寸较大的矩阵,并且易于修改; ③由函数建立,如y=sin(x),可以由MATLAB 的内部函数建立一些特殊矩阵; ④通过数据文件建立,该方法可以调用由其他软件产生数据。 2.3 在进行算术运算时,数组运算和矩阵运算各有什么要求? 进行数组运算的两个数组必须有相同的尺寸。进行矩阵运算的两个矩阵必须满足矩阵运算规则,如矩阵a 与b 相乘(a*b )时必须满足a 的列数等于b 的行数。

(完整word版)matlab_gui初学者教程

什么是GUI呢? GUI是Graphical User Interface 图形用户界面的意思。象很多高级编程语言一样。Matlab也有图形用户界面开发环境。随着计算机技术的飞速发展。人与计算机的通信方式也发生的很大的变化。从原来的命令行通讯方式(例如很早的DOS系统)变化到了现在的图形界面下的交互方式。而现在绝大多数的应用程序都是在图形化用户界面下运行的。 记得读书的时候。大学开学不久。学校很多同学就开始报考全国计算机等级考试了。当然我也是其中的一分子。其中C语言是大多数人选择的科目。当时在学C语言的时候。经常也会遇到人机交互的例子。譬如一个计算两个数相加的程序。运行程序后便切换到了Dos模式。然后在此模式下输入两个数。再回车。才能返回运算结果。当时就觉得很不方便。也不友好。后来才得知C语言是面向过程的语言。是非面向对象的语言(VC++,VB,Matlab等是面向对象的)。那么下面我们就来看看Matlab是如何简单、快速而友好地解决这类问题的吧。 Matlab GUI编程教程(适用于初学者) 1.首先我们新建一个GUI文件:File/New/GUI 如下图所示; 选择Blank GUI(Default) 2.进入GUI开发环境以后添加两个编辑文本框。6个静态文本框。和一个按钮。布置如下图所示;

布置好各控件以后。我们就可以来为这些控件编写程序来实现两数相加的功能了。3.我们先为数据1文本框添加代码; 点击上图所示红色方框。选择edit1_Callback。光标便立刻移到下面这段代码的位置。function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a double 然后在上面这段代码的下面插入如下代码: %以字符串的形式来存储数据文本框1的内容. 如果字符串不是数字。 则现实空白内容 input = str2num(get(hObject,'String')); %检查输入是否为空. 如果为空,则默认显示为0 if(isempty(input)) set(hObject,'String','0')

MATLAB基础教程薛山第二版课后习题答案讲解

《MATLAB及应用》实验指导书《MATLAB及应用》实验指导书 班级: T1243-7 姓名:柏元强 学号: 20120430724 总评成绩: 汽车工程学院 电测与汽车数字应用中心

目录 实验04051001 MATLAB语言基础 (1) 实验04051002 MATLAB科学计算及绘图 (18) 实验04051003 MATLAB综合实例编程 (31)

实验04051001 MATLAB语言基础 1实验目的 1)熟悉MATLAB的运行环境 2)掌握MATLAB的矩阵和数组的运算 3)掌握MATLAB符号表达式的创建 4)熟悉符号方程的求解 2实验内容 第二章 1.创建double的变量,并进行计算。 (1)a=87,b=190,计算 a+b、a-b、a*b。 clear,clc a=double(87); b=double(190); a+b,a-b,a*b (2)创建 uint8 类型的变量,数值与(1)中相同,进行相同的计算。 clear,clc a=uint8(87); b=uint8(190); a+b,a-b,a*b 2.计算: (1) () sin 60

(2) e3 (3) 3cos 4??π ??? clear,clc a=sind(60) b=exp(3) c=cos(3*pi/4) 3.设2u =,3v =,计算: (1) 4 log uv v (2) () 2 2 e u v v u +- (3) clear,clc u=2;v=3; a=(4*u*v)/log(v) b=((exp(u)+v)^2)/(v^2-u) c=(sqrt(u-3*v))/(u*v) 4.计算如下表达式: (1) ()() 3542i i -+ (2) () sin 28i - clear,clc (3-5*i)*(4+2*i) sin(2-8*i) 5.判断下面语句的运算结果。 (1) 4 < 20 (2) 4 <= 20

matlab入门经典教程--第四章 数值计算

第四章数值计算 4.1引言 本章将花较大的篇幅讨论若干常见数值计算问题:线性分析、一元和多元函数分析、微积分、数据分析、以及常微分方程(初值和边值问题)求解等。但与一般数值计算教科书不同,本章的讨论重点是:如何利用现有的世界顶级数值计算资源MATLAB。至于数学描述,本章将遵循“最低限度自封闭”的原则处理,以最简明的方式阐述理论数学、数值数学和MATLAB计算指令之间的在联系及区别。 对于那些熟悉其他高级语言(如FORTRAN,Pascal,C++)的读者来说,通过本章,MATLAB 卓越的数组处理能力、浩瀚而灵活的M函数指令、丰富而友善的图形显示指令将使他们体验到解题视野的豁然开朗,感受到摆脱烦琐编程后的眉眼舒展。 对于那些经过大学基本数学教程的读者来说,通过本章,MATLAB精良完善的计算指令,自然易读的程序将使他们感悟“教程”数学的基础地位和局限性,看到从“理想化”简单算例通向科学研究和工程设计实际问题的一条途径。 对于那些熟悉MATLAB基本指令的读者来说,通过本章,围绕基本数值问题展开的容将使他们体会到各别指令的运用场合和在关系,获得综合运用不同指令解决具体问题的思路和借鉴。 由于MATLAB的基本运算单元是数组,所以本章容将从矩阵分析、线性代数的数值计算开始。然后再介绍函数零点、极值的求取,数值微积分,数理统计和分析,拟合和插值,Fourier分析,和一般常微分方程初值、边值问题。本章的最后讨论稀疏矩阵的处理,因为这只有在大型问题中,才须特别处理。 从总体上讲,本章各节之间没有依从关系,即读者没有必要从头到尾系统阅读本章容。读者完全可以根据需要阅读有关节次。除特别说明外,每节中的例题指令是独立完整的,因此读者可以很容易地在自己机器上实践。 MATLAB从5.3版升级到6.x版后,本章容的变化如下: ●MATLAB从6.0版起,其矩阵和特征值计算指令不再以LINPACK和EISPACK库为基础, 而建筑在计算速度更快、运行更可靠的LAPACK和ARPACK程序库的新基础上。因此,虽然各种矩阵计算指令没有变化,但计算结果却可能有某些不同。这尤其突出地表现在涉及矩阵分解、特征向量、奇异向量等的计算结果上。对此,用户不必诧异,因为构成空间的基向量时不唯一的,且新版的更可信。本书新版全部算例结果是在6.x版上给出的。 ●在5.3版本中,泛函指令对被处理函数的调用是借助函数名字符串进行的。这种调用 方式在6.x版中已被宣布为“过渡期允许使用但即将被淘汰的调用方式”;而新的调用方式是借助“函数句柄”进行的。因此,关于述泛函指令,本章新版着重讲述如何使用“函数句柄”,同时兼顾“函数名字符串”调用法。 ●MATLAB从6.0版起,提供了一组专门求微分方程“边值问题”数值解的指令。适应这 种变化,本章新增第4.14.5节,用2个算例阐述求解细节。 ● 5.3版中的积分指令quad8已经废止;6.x版启用新积分指令quad l;6.5版新增三重 积分指令triplequad。本章新版对此作了相应的改变。 4.2LU分解和恰定方程组的解

Matlab100个实例程序

程序代码:(代码标记[code]...[/code] ) 1-32是:图形应用篇 33-66是:界面设计篇 67-84是:图形处理篇 85-100是:数值分析篇 实例1:三角函数曲线(1) function shili01 h0=figure('toolbar','none',... 'position',[198 56 350 300],... 'name','实例01'); h1=axes('parent',h0,... 'visible','off'); x=-pi:0.05:pi; y=sin(x); plot(x,y); xlabel('自变量X'); ylabel('函数值Y'); title('SIN( )函数曲线'); grid on 实例2:三角函数曲线(2) function shili02 h0=figure('toolbar','none',... 'position',[200 150 450 350],... 'name','实例02'); x=-pi:0.05:pi; y=sin(x)+cos(x); plot(x,y,'-*r','linewidth',1); grid on xlabel('自变量X'); ylabel('函数值Y'); title('三角函数');

实例3:图形的叠加 function shili03 h0=figure('toolbar','none',... 'position',[200 150 450 350],... 'name','实例03'); x=-pi:0.05:pi; y1=sin(x); y2=cos(x); plot(x,y1,... '-*r',... x,y2,... '--og'); grid on xlabel('自变量X'); ylabel('函数值Y'); title('三角函数'); 实例4:双y轴图形的绘制 function shili04 h0=figure('toolbar','none',... 'position',[200 150 450 250],... 'name','实例04'); x=0:900;a=1000;b=0.005; y1=2*x; y2=cos(b*x); [haxes,hline1,hline2]=plotyy(x,y1,x,y2,'semilogy','plot'); axes(haxes(1)) ylabel('semilog plot'); axes(haxes(2)) ylabel('linear plot'); 实例5:单个轴窗口显示多个图形 function shili05 h0=figure('toolbar','none',... 'position',[200 150 450 250],... 'name','实例05'); t=0:pi/10:2*pi;

相关主题