数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
楼主: HUASHI3483

Matlab详细教程

  [复制链接]
 楼主| 发表于 2004-4-14 20:00:13 | 显示全部楼层
2.4.1 简易阵列

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

MATLAB的运算事实上是以阵列 (array) 及矩阵 (matrix) 方式在做运算,而这二者在MATLAB的基本运算性质不同,阵列强调元素对元素的运算,而矩阵则采用线性代数的运算方式。在此只说明如何定义矩阵,至于矩阵的详细运算语法,我们将留待第四章再说明。  


而宣告一变数为阵列或是矩阵时,如果是要个别键入元素,须用中括号[ ] 将元素置于其中。阵列为一维元素所构成,而矩阵为多维元素所组成,例如  

>> x = [1 2 3] % 一维 1x3 阵列  

>> x = [1 2 3; 4 5 6] % 二维 2x3 矩阵,以;区隔各列的元素  

>> x = [1 2 3 % 二维 2x3 矩阵,各列的元素分二行键入  

4 5 6]


假设要计算 y = sin (x), 0 x π而x = 0, 0.2π, 0.4π,...,π,即可用阵列方式运算,例如  

>> x = [0 0.2*pi 0.4*pi 0.6*pi 0.8*pi pi] % 注意阵列内也可作运算  

x =  

0 0.6283 1.2566 1.8850 2.5133 3.1416  

>> y=sin(x)  

y =  

0 0.5878 0.9511 0.9511 0.5878 0.0000


要找出阵列的某个元素或数个元素,可参考以下的例子  

>> x(3) % 第三个x的元素  

ans =  

1.2566  

>> y(5) % 第五个y的元素  

ans =  

0.5878  

>> x(1:5) % 列出第一到第五个x的元素  

ans =  

0 0.6283 1.2566 1.8850 2.5133  

>> y(3:-1:1) % 列出第三到第一个y的元素,3为起始值,1为终止值,-1为增量  

ans =  

0.9511 0.5878 0  

>> x(2:2:6) % 列出第二到第六个x的元素,2为起始值,6为终止值,2为增量  

ans =  

0.6283 1.8850 3.1416  

>> y([4 2 5 1]) % 列出y元素,排列元素依序为原来y阵列的4,2,5,1个  

ans =  

0.9511 0.5878 0.5878 0


--------------------------------------------------------------------------------
 楼主| 发表于 2004-4-14 20:00:49 | 显示全部楼层
2.4.1 简易阵列

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

MATLAB的运算事实上是以阵列 (array) 及矩阵 (matrix) 方式在做运算,而这二者在MATLAB的基本运算性质不同,阵列强调元素对元素的运算,而矩阵则采用线性代数的运算方式。在此只说明如何定义矩阵,至于矩阵的详细运算语法,我们将留待第四章再说明。  


而宣告一变数为阵列或是矩阵时,如果是要个别键入元素,须用中括号[ ] 将元素置于其中。阵列为一维元素所构成,而矩阵为多维元素所组成,例如  

>> x = [1 2 3] % 一维 1x3 阵列  

>> x = [1 2 3; 4 5 6] % 二维 2x3 矩阵,以;区隔各列的元素  

>> x = [1 2 3 % 二维 2x3 矩阵,各列的元素分二行键入  

4 5 6]


假设要计算 y = sin (x), 0 x π而x = 0, 0.2π, 0.4π,...,π,即可用阵列方式运算,例如  

>> x = [0 0.2*pi 0.4*pi 0.6*pi 0.8*pi pi] % 注意阵列内也可作运算  

x =  

0 0.6283 1.2566 1.8850 2.5133 3.1416  

>> y=sin(x)  

y =  

0 0.5878 0.9511 0.9511 0.5878 0.0000


要找出阵列的某个元素或数个元素,可参考以下的例子  

>> x(3) % 第三个x的元素  

ans =  

1.2566  

>> y(5) % 第五个y的元素  

ans =  

0.5878  

>> x(1:5) % 列出第一到第五个x的元素  

ans =  

0 0.6283 1.2566 1.8850 2.5133  

>> y(3:-1:1) % 列出第三到第一个y的元素,3为起始值,1为终止值,-1为增量  

ans =  

0.9511 0.5878 0  

>> x(2:2:6) % 列出第二到第六个x的元素,2为起始值,6为终止值,2为增量  

ans =  

0.6283 1.8850 3.1416  

>> y([4 2 5 1]) % 列出y元素,排列元素依序为原来y阵列的4,2,5,1个  

ans =  

0.9511 0.5878 0.5878 0


--------------------------------------------------------------------------------
   
 楼主| 发表于 2004-4-14 20:01:07 | 显示全部楼层
2.4.2 建立阵列

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

前一节提到阵列产生的方式须个别键入其元素,这方法只适用于阵列元素很少时。如果要建立的阵列的元素多达数百个,则须采用以下的数种方式  

>> x=(0:0.0.2:1) % 以:区隔起始值=0、增量值=0.0.2、终止值=1  

>> x=linspace(0,1,51) % 利用linspace,以区隔起始值=0终止值=1之间的元素数目=51  

>> x=(0:0.01:1)*pi % 注意阵列外也可作运算  

>> a=1:5, b=1:2:9 % 这二种方式更直接  

a =  

1 2 3 4 5  

b =  

1 3 5 7 9  

>> c=[b a] % 可利用先前建立的阵列 a 及阵列 b ,组成新阵列  

c =  

1 3 5 7 9 1 2 3 4 5  

>> d=[b(1:2:5) 1 0 1] % 由阵列 b 的三个元素再加上三个元素组成  

d =  

1 5 9 1 0 1


--------------------------------------------------------------------------------
   
 楼主| 发表于 2004-4-14 20:01:23 | 显示全部楼层
2.4.3 阵列运算

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

以下将阵列的运算符号及其意义列出,除了加减符号外其余的阵列运算符号均须多加 . 符号。  

阵列运算功能 功能  

+ 加  

- 减  

.* 乘  

./ 左除  

.^ 次方  

.' 转置


>> a=1:5; a-2 % 从阵列a减2  

ans =  

-1 0 1 2 3  

>> 2*a-1 % 以2乘阵列a再减1  

ans =  

1 3 5 7 9  

>> b=1:2:9; a+b % 阵列a加阵列b  

ans =  

2 5 8 11 14  

>> a.*b % 阵列a及b中的元素与元素相乘  

ans =  

1 6 15 28 45  

>> a./b % 阵列a及b中的元素与元素相除  

ans =  

1.0000 0.66667 0.6000 0.5714 0.5556  

>> a.^2 % 阵列中的各个元素作二次方  

ans =  

1 4 9 16 25  

>> 2.^a % 以2为底,以阵列中的各个元素为次方  

ans =  

2 4 8 16 32  

>> b.^a % 以阵列b中的各个元素为底,以阵列a中的各个元素为次方  

ans =  

1 9 125 2401 59049  

>> b=a' % 阵列b是阵列a的转置结果  

b =  

1  

2  

3  

4  

5



--------------------------------------------------------------------------------
 楼主| 发表于 2004-4-14 20:03:39 | 显示全部楼层
2.4.5 阵列运算的特色

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

MATLAB 在许多运算皆是以阵列为对象,即是以阵列的元素为对象。因此除了+, - 这二个运算外,其余的运算符号(乘、除、次方)皆须加上.来强调阵列之间的运算。以下几个例子可以说明阵列运算的特色。如果a,b各代表二个不同的阵列,a与b 之间的运算是元素对元素的方式,例如  

  

几个例子如下:  

>> x = 1.5; % x 是纯量  

>> y = exp(x^2); % exp(x^2) 是纯量运算  

>> y1 = x/y % x/y 是纯量运算  

>> x = 1:0.1:2; % x 是阵列


>> y = exp(x.^2); % exp(x.^2) 是阵列运算  

>> y1= x./y % x./y 是阵列运算


这个例子的算式较长,一样也须注意纯量与阵列运算的差别  

  

>> x=2.0 % x 是一纯量  

>> nume = x^3 - 2*x^2 + x - 6.3;  

>> deno = x^2 + 0.05*x - 3.14;  

>> f = nume/deno


>> x=1:5; % 注意 x 是一阵列  

>> nume = x.^3 - 2*x.^2 + x - 6.3;  

>> deno = x.^2 + 0.05*x - 3.14;  

>> f = nume./deno



--------------------------------------------------------------------------------
   
 楼主| 发表于 2004-4-14 20:04:03 | 显示全部楼层
2.5 简易绘图

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

MATLAB 的绘图功能很强,我们先从最简单的二维绘图指令plot介绍起。plot是用来划函数x对函数y的二维图,例如要划出 y = sin (x), 0 x 2π。plot可以在一个图上划数条曲线,且以不同的符号及颜色来标示曲线,其指令见线上说明help  
plot。如要在x及y轴及全图加注说明,则可利用指令xlabel, ylabel, title,其指令见线上说明help xlabel, help ylabel, help title。三维图的指令为plot3,其指令见线上说明help plot3。此外二维图及三维图皆可使用指令grid  
加上格线。MATLAB会将绘图结果展示在另一个视窗称为MATLAB Figure Windows,如果你看不到此视窗,别担心它只是被盖住,可以进入Windows再选择Figure。接著我们就来看以下的例子  

>> v1=linspace(0,2*pi,20); v2=sin(v1); % 建立 v1 及 v2 阵列  

>> plot(v1,v2) % 利用 plot,输入的变数为 x 轴接著的变数为 y 轴  

>> v3=cos(v1); % 建立 v3 阵列  

>> plot(v1,v2,v1,v3) % 划二条曲线,一条代表 v1-v2 函数关系  

%一条代表 v1-v3 函数关系  

>> plot(v1,v2,v1,v2,'+') % 一样划二条曲线,不过第二条曲线以符号 + 标示  

>> plot(v1,v2,v1,v2.*v3,'--') % 划二条曲线,一条代表 v1-v2 函数关系,一条  

% 代表 v1-(v2.*v3) 函数关系且以符号'标示  

>> xlabel('x-axis') % 加上 x 轴的说明,在二个单引号 ' 之间键入文字的说明  

>> ylabel('y-axis') % 加上 y 轴的说明  

>> title('2D plot') % 加上图的说明  

>> plot3(v2,v3,v1), grid % 将 v2-v1-v3 函数关系分别以x轴y轴及z轴划,并加上格线



--------------------------------------------------------------------------------
   
 楼主| 发表于 2004-4-14 20:04:30 | 显示全部楼层
2.6.1 交谈式的输入

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

我们来看一个已经讲过的算式:要计算面积 Area=,可利用指令input在萤幕印出提示文字做为交谈式的输入。  

>> r = input('Type radius:') % 在两个单引号 ' 之间键入提示文字  

Type radius: % 现在键入 2 做为半径值  

r =  

2  

>> area=pi*r^2; % 键入面积算式  

>> name = input('Your name please: ','s') % 要键入文字则须在加上's',s 是代表字串(string)  

Your name please: % 键入名字 J.C. Wu  

name =  

J.C. Wu



--------------------------------------------------------------------------------
   
 楼主| 发表于 2004-4-14 20:05:07 | 显示全部楼层
2.6.2 输出格式

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

至于输出有二种格式:自由格式 (disp) 和格式化输出 (fprintf)。要直接输出文字或是一数值,可使用disp,例如  

>> temp=20;  

>> disp(temp); disp('degrees C'); disp('度 C') %中文也接受呢!  

20  

degrees C  

度 C


而指令fprintf则是用来控制输出数据及文字的格式,它的基本格式如  

>> fprintf('The area is %8.5f\n', area)  


在二个单引号间包括输出的字串The area is,接著是输出数据的格式%8.5f,再来是跳行符号以避免下一个输出数据或是提示符号也挤在同一行,最后键入要输出的数据名area。例如  

>> fprintf('The area is %8.5f\n', area) % 注意输出格式前须有%符号,跳行符号须有\符号  

The area is 12.56637 % 输出值为8位数含5位小数  


在此要稍加说明的是输出数据的格式,以下的例子各说明了不同型态的输出格式  

>> fprintf('f_form: %12.5f\n',12345.2) % 输出值为12位数,含5位小数  

f_form: 12345.20000  

>> fprintf('f_form: %12.3f\n',1.23452) % 输出值为12位数,含3位小数  

f_form: 1.235  

>> fprintf('e_form: %12.5e\n',12345.2) % 输出值为指数格式的12位数,含5位小数  

e_form: 1.23452e+004  

>> fprintf('f_form: %12.0f\n',12345.2) % 输出值为整数格式的12位数  

f_form: 12345



--------------------------------------------------------------------------------
   
 楼主| 发表于 2004-4-14 20:05:29 | 显示全部楼层
2.7 如何撰写 MATLAB 程式

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

我们前面各节所介绍在MATLAB所做的运算,是适合于所要计算的算式不太长或是想以交谈式方式做运算,如果要计算的算式很长有数十行或是须要一再执行的算式,则那样的方式就行不通了。MATLAB提供了所谓的 M-file  
的方式,可让使用者自行将指令及算式写成巨集程式然后储存成个特别的档案,其附加档是m,譬如 test.m,其中的test就是档案名称。至于要撰写程式可以用任何一种编辑软体(如 Win3.1的记事本或是Dos下的 PE2)或是文书处理软体(如 Word, AmiPro),但是储存格式必须是  
Ascii 的格式。在指令视窗中的功能选单可以选择File 再选择New,即进入指定的编辑软体或是文书处理软体。当程式写完后要存档时,必须以.m 档名称储存。要执行 M-file 可以在指令视窗下直接键入该档名如test;或是选择功能表上的Run M-file来找到 M-file  
的所在目录再执行M-file。Open M-file, Run M-file。如果要修改 M-file 可以选择功能表上的Open M-file ,即可搜寻要修改的 M-file,修改后再存档。


以下的tutex1.m档是一个简易绘图程式做为示范使用M-file  

% M-file, tutex1.m  

% Simple plot for illustration of using M-file.  

% 简易绘图以做为示范使用M-file  

x=linspace(0,2*pi,20); y=sin(x);  

plot(x,y,'r+')  

xlabel('x-value')  

ylabel('y-value')  

title('2D plot')  

写好上述程式后即可在指令视窗下键入tutex1,即可执行已建立的tutex1.m 程式。


再来看另一个 M-file: tutex2.m 的例子  

% M-file, tutex2.m  

% 计算一个球的体积  

r = input('Type radius:');  

area=pi*r^2;  

volume=(4/3)*pi*r^3;  

fprintf('The radius is %12.5f\n',r)  

fprintf('The area of a circle is %12.5f\n',area)  

fprintf('The volume of a sphere is %12.5f\n',volume)  



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

2.7 如何撰写 MATLAB 程式  
2.7.1 如何在自己的目录执行程式  

 楼主| 发表于 2004-4-14 20:05:53 | 显示全部楼层
2.7.1 如何在自己的目录执行程式

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

当在执行M-file时,我们最好是将自己的M-file储存在自己的工作目录下,而不要放在MATLAB内建的目录下,这样做的好处是不会干扰到 MATLAB 程式的目录下的各个档案。要在自己的工作目录执行程式可分为二个步骤:(1)建立搜寻路径,(2) 切换目录。


(1) 建立搜寻路径  

MATLAB 将许多内建函数分门别类放在不同的次目录下,因此它在工作时须依序的搜寻这些次目录,这个过程称为「搜寻路径」。MATLAB的指令path可以让我们将自己的工作目录加在原来 MATLAB 的搜寻路径之前或之后,如此  

>> path(path,'c:\wufile\my_work') % 将自己的目录 \wufile\my_work 加在  

% MATLAB的搜寻路径之后


>> path('c:\wufile\my_work',path) % 将自己的目录 \wufile\my_work 加在  

% MATLAB的搜寻路径之前


如果你不想每次进入MATLAB都要键入path指令,下面的方式可以将path指令设为自动启用。你可以定义一个特别的M-file称为startup.m内容如下,将它存在 MATLAB 的主目录下,这样每次MATLAB启动时就会自动的执行这个startup.m档,即与上述的自行设定path的作用是相同的。  


(2) 切换目录  

设好搜寻路径后,接著即可用cd指令将目录切换到自己的工作目录之下来安安心心的使用MATLAB。以下的范例说明如何使用与切换目录相关的指令:  

>> cd \wufile\my_work % 切换至目录\wufile\my_work  

>> cd % 如果只用 cd 则会显示目前的目录  

c:\WUFILE\MY_WORK  

>> dir % 列出目录下的档案  

. tutex1.m tutex2.m  

.. test.txt  

>> delete test.txt % 删除 test.txt  



--------------------------------------------------------------------------------
   
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-4-28 00:50 , Processed in 0.048173 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表