资源描述
第一章 MATLAB简介
………………………………………
1
第二章 进阶的绘图功能
………………………………………
18
第三章 MATLAB函数
………………………………………
24
第四章 线形代数与矩阵
………………………………………
32
第五章 联立线性方程组
………………………………………
37
第六章 内插及曲线拟合
………………………………………
38
第七章 方程组的根
………………………………………
43
第八章 数值积分与微分
………………………………………
46
第九章 常微分方程组
………………………………………
49
第十章 MATLAB的数值计算实习
………………………………………
52
第一章 MATLAB简介
1.1 MATLAB 的视窗环境
进入MATLAB之后,会看道到一个视窗MATLAB Command Window称为指令视窗,它是你键入指令的地方也是 MATLAB将计算结果显示在此。而在它的功能菜单一共有File, Edit, View, Web, Windows, Help六个主要功能,每一个之下各又有下一层的功能,我们会在后面相关的地方说明。
1.2 简易数学
我们先从MATLAB的数学运算开始说明。就像你的计算器一样,数学式的计算是直接了当。如果我们要算 1+2+3及1×10+2×20+3×30这二个式子,以下例子接著提示符号>>之后的是要键入的算式,MATLAB将计算 的结果以ans显示。如果算式是x=1+2+3,MATLAB将计算的结果以x显示。
>> 1+2+3
ans =
6
>> 1*10 + 2*20 + 3*30
ans =
140
>> x=1+2+3
x =
6
如果在上述的例子结尾加上’;’,则计算结果不会显示在指令视窗上,要得知计算值只须键入该变量值即可
>> x=1+2+3;
>> x
x =
6
以下的例子,显示MATLAB对使用变量的弹性
>> apple=5
apples =
5
>> orange=10
orange =
10
>> total_cost=apple*2+orange*4
total_cost =
50
>> average_cost=total_cost/(apple+orange)
average_cost =
3.33334
MATLAB提供基本的算术运算有:
加 (+)、减 (-)、乘 (*)、除 (/)、幂次方 (^),范例为:5+3, 5-3, 5*3, 5/3, 5^3
其它在计算常用的功能我们来看一个算式来说明。要计算面积Area = ,半径r = 2,则可键入
>> r=2;
>> area=pi*r^2;
>> area =
12.5664
我们也可以将上述指令打在同一行,以, 或是; 分开,例如
>> r=2, area=pi*r^2
>> r=2; area=pi*r^2;
请注意上述二式的差异,前者有计算值显示,而后者则无。如果一个指令过长可以在结尾加上...(代表此行指 令与下一行连续),例如
>> r=2;
>> area = pi ...
*r^2
另外一个符号注解是由%起头,也就是说在%之后的任何文字都被视为程序的注解。注解的功能是简要的说明 程序的内容,过多的注解在程序中或许没有必要,但是我们写程序时往往用了太少的注解。任何可能产生混淆 的地方都应该省用注解,将适量的注解可在往后想了解程序时能节省一些不必要的时间与「有看没有懂」的痛 苦。例如
>> r=2; % 键入半径
>> area=pi*r^2; % 计算面积
MATLAB可以将计算结果以不同的精确度的数字格式显示,我们可以在指令视窗上的功能菜单上的Options下 选 Numerical Format,或者直接在指令视窗键入以下的各个数字显示格式的指令,以π值为例
指令
数字值
说明
format short
3.1416
预设的 4 位有效小数位数
format long
3.14159265358979
15 位有效小数位数
format short e
3.1416e+000
4 位有效小数位数加上指数表格式
1.3 变量
MATLAB对使用变量名称的规定:
1. 变量名称的英文大小写是有区别的(apple, Apple, AppLe,三个变量不同)。
2. 变量的长度上限为 19 个字元。
3. 变量名的第一个字必须是一英文字,随后可以掺杂英文字、数字或是底线。
以下列出MATLAB所定义的特别变量及其意义
变量名
意义
help
线上说明, 如 help quit
who
列出所有定义过的变量名称
ans
最近一次计算结果的变量名
eps
MATLAB定义的正的极小值=2.2204e-16
pi
内建的π值
inf
∞值,正无穷大
NaN
不定值
i 或 j
虚数单位
Version
MATLAB版本
NARGIN
函数输入参数的个数
NARGOUT
函数输出参数的个数
1.4 其它功能
MATLAB利用了↑↓二个光标键可以将所下过的指令叫回来重覆使用。按下↑则前一次指令重新出现,之后再 按Enter键,即再执行前一次的指令。而↓键的功用则是往后执行指令。
其它在键盘上的几个键如→←, Delete, Insert,其功能则显而易见,试用即知无须多加说明。
当要暂时执行操作系统(例如Dos)的指令而还要执行MATLAB,可以利用!加上原操作系统的指令,例如 !dir, !format a:。
键入who可以查看所有定义过的变量名称。而键入clear则是去除所有定义过的变量名称;如果只是要去除x及y 二个变量则可以键入clear x y。
Ctrl-C(即同时按Ctrl及C二个键)可以用来中止执行中的MATLAB的工作。
1.5 在线帮助
在MATLAB系统中相关的线上(on-line)求助方式有三:
1. 是利用help指令,如果你已知要找的题材 (topic) 为何的话,直接键入help <topic>。所以即使身旁没有使用手册,也可以使用help指令查询不熟悉的指令或是题材之用法,例如help sqrt, help topic。
2. 是利用lookfor指令,它可以从你键入的关键字(key-word)(即始这个关键字并不是MATLAB的指令)列出 所有相关的题材,例如lookfor cosine, lookfor sine。
3. 是利用指令视窗的功能菜单中的Help,从中选取Table of Contents(目录)或是Index(索引)。
例如
>> help sqrt
SQRT Square root.
SQRT(X) is the square root of the elements of X. Complex
results are produced if X is not positive.
>> help monkey
monkey not found.
>>* lookfor tangent
ACOT Inverse cotangent.
ACOTH Inverse hyperbolic cotangent.
ATAN Inverse tangent.
ATANH Inverse hyperbolic tangent.
ATAN2 Four quadrant inverse tangent.
COT Cotangent.
COTH Hyperbolic cotangent.
TAN Tangent.
TANH Hyperbolic tangent.
>> help atan
ATAN Inverse tangent.
ATAN(X) is the arctangent of the elements of X. See also ATAN2.
1.6 简易数组
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
1.7 建立数组
前一节提到数组产生的方式须个别键入其元素,这方法只适用于数组元素很少时。如果要建立的数组的元素多 达数百个,则须采用以下的数种方式
>> 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
1.8 数组运算
以下将数组的运算符号及其意义列出,除了加减符号外其余的数组运算符号均须多加 . 符号。
数组运算功能 功能
+ 加
- 减
.* 乘
./ 左除
.^ 次方
.' 转置
>> 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
1.9 特殊矩阵
虽然矩阵的运算要等到第五章才详细说明,但是一些特别矩阵的定义,如元素皆为0, 1或是单位矩阵,因为在 运算时常会用到,所以在此先介绍。 zeros函数是形成元素皆为0 的矩阵;ones函数是形成元素皆为 1 的矩阵; eye则是产生一个单位矩阵,之所以称为eye是取其发音与原来单位矩阵符号I相同,而又避免与定义复数中的虚 部所用的符号i雷同,所以改以eye替代。上述三个函数的使用语法都相似,如zeros(m)可以产生一个m×m的正方 矩阵,而zeros(m,n)产生的是m×n的矩阵。也可以使恶用这三个函数将一m×n矩阵原来元素全部取代成0, 1 或 是单位矩阵的值,不过要加上size指令来指出其矩阵大小是m,n,所以语法为zeros(size(A)),其中A是原来矩阵。
>> A=zero(2) % 0 的矩阵
A =
0 0
0 0
>> B=zeros(2,3)
B =
0 0 0
0 0 0
>> C=[1 2; 3 4; 5 6];
>> size(C) % 使用 size 指令得到C矩阵的大小
ans =
3 2
>> D=zeros(size(C)) % 加上size指令将矩阵C 原来的元素全部以 0 取代
>> A=ones(2), B=ones(2,3) % 1 的矩阵
A =
1 1
1 1
B =
1 1 1
1 1 1
>> C=[1 2; 3 4; 5 6];
>> D=ones(size(C));
>> A=eye(2), B=eye(2,3) % 单位矩阵
A =
1 0
0 1
B =
1 0 0
0 1 0
>> C=[1 2; 3 4; 5 6];
>> D=eye(size(C));
1.10 数组运算的特色
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
1.11 简易绘图
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-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 on % 将 v2-v1-v3 函数关系分别以x轴y轴及z轴划,并加上格线
1.12 交谈式的输入
我们来看一个已经讲过的算式:要计算面积 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
1.13 输出格式
至于输出有二种格式:自由格式 (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
1.14 如何撰写 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)
1.15 使用者自定函数
M-file 除了可以撰写程序外,还有另一个重要的用途,就是可以用来定义函数。这样的函数称为M-档定义的函数, 然后储存起来,就可以和那些内建的函数(如sin, cos,log等)一样的自由使用。举例来说,我们可以定义一函 数cirarea是计算圆的面积,以下的 M-file: cirarea.m就是定义这个函数
% M-file function, cirarea.m
% Calculate the area of a circle with raduis r
% r can be a scalar or an array
function c=cirarea(r)
c=pi*r.^2;
令一个例子是MATLAB内建的函数linspace
function y = linspace(d1, d2, n)
% LINSPACE Linearly spaced vector.
% LINSPACE(x1, x2) generates a row vector of 100 linearly
% equally spaced points between x1 and x2.
% LINSPACE(x1, x2, N) generates N points between x1 and x2.
%
% See also LOGSPACE, :.
% Copyright (c) 1984-94 by The MathWorks, Inc.
if nargin == 2
n = 100;
end
y = [d1+(0:n-2)*(d2-d1)/(n-1) d2];
M-file定义的函数有其语法的一些规定:
1. 第一行指令以function这个字做为起头,接著是输出的变量,等号,函数名称,输入的变量是接著函数名 称放在括号之内。function out1=userfun(in1),这行的out1是输出的变量,userfun是函数名称,in1是输入的 变量。function [out1, out2]= serfun(in1, in2) 如果输出变量 [out1,out2] 和输入变量 (in1, in2)不只一个时,则在 输出变量部份须加上 [ ]。
2. 上述的输入变量是经由使用函数时输入的,而输出的变量即是函数传回的值。
3. 函数名称的取法的规定与一般变量相同。
4. 在定义函数程序之前,最好加上注解行来说明这个函数的特色及如何使用,如此的话使用指令如help cirarea,该函数的注解行会出现在指令视窗。
>> r=1:3;
>> ar=cirarea(r) % 呼叫 cirarea.m 函数,以数组 r 为输入变量
ar =
3.1416 12.5664 28.2743
>> disp(ar) % 指令 disp 可以将变量值直接列出
3.1416 12.5664 28.2743
1.16 如何在自己的目录执行程序
当在执行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
1.17 储存及读取数据
我们在使用MATLAB过程中,免不了希望将运算过程中的某些数据「储存」起来,以便下次使用再「读取」利 用。「储存」和「读取」的指令分别是save及load,而save的数据型态又分为:(1)双位元格式 (binary format) 的 MAT-file,(2) ASCII 格式的 ASCII-file。MAT-file 是以双位元字元储存,可让电脑在读出/入(input/output) 速率加 快,其格式为test.mat(test为档名),MATLAB将档案的型态预设为MAT-file;而ASCII-file则是以可辨识的字元 储存,但会降低电脑在读出/入的速率,其格式为test.dat(test为档名)。如果你的数据是只在MATLAB中产生 及被使用,那最好使用MAT-file。ASCII-file则必须用在当数据档要为其它不是MATLAB的应用软体读取时。
另外要注意,当save成MAT档是储存变量本身,而非直接储存变量的数据;而save成ASCII档则是直接储存变量的数值。
这二者储存的差异,造成在读取MAT档和ASCII档的数据有所不同,详见以下的范例。
须注意的是在储存及读取数据时,MAT-file或是ASCII-file的档最好为矩阵型态,否则可能在读取时有困难。数 据储存成矩阵的大小可以为m×n,其中m是列的数目,n则为行的数目。
以下就是几个save, load的使用范例
>> x=1:5; y=11:15; % 先产生二个列数组 (row array} x, y
>> save data1 x y % 是将 x,y 二个变量的数值存入 data1 这个MAT-file,
%即data1其实是data1.mat。data1.mat 的内容为变量x, y,而非(1:5, 11:15) 的数据
>> save data2.dat x y -ascii % 如果要将data1改以ASCII格式储存,则须加上-ascii
% 的选项。data2.dat 的内容为(1:5, 11:15) 的数据
>> type data2.dat % type 指令可以将 data2.dat 的内容列出
>> load data1 % 读取 data1.mat 档
>> x, y % 叫出 data1.mat中的变量来读取其内容(1:5, 11:15)
>> load data2.dat % 读取 data2.dat 档
>> x2=data2(1,:); y2=data2(2,:); % 将data2中的第一及第二列数据分别以x2及y2
%变量读入,之后在运算中即可使用这二列数据
>> x=21:25; y=31:35;
>> save data3.dat x y -ascii
>> load data3.dat;
>> x3=data3(1,:); y3=data3(2,:); % 将data3中的第一及第二列数据分别以x3及y3 变量读入
%,之后在运算中即可使用这二列数据
>> A=[1 2 3; 4 5 6];
>> save data4.dat A -ascii %是将A数组的数值存入data4这个ASCII-file
>> load data4.dat
>> x4=data4(:,1); % 令 x4 为 data4 的第一行数据
>> y4=data4(:,2); % 令 y4 为 data4 的第二行数据
>> z4=data4(:,3); % 令 z4 为 data4 的第三行数据
1.18 其它绘图功能
我们在前面多少都说明过简易的二维绘图功能,例如在图上加注说明的指令有title, xlabel,ylabel,除此之外还有 二个指令 text, gtext 可以在图中加上文字用以说明图中的曲线或图形代表什么。text是依据所绘图的座标来放置 文字说明,其语法为text(x,y, 'string'),x, y是要放置说明的座标值,string是说明的文字。gtext则是依据滑鼠或上下左右光标键来放置文字说明,其语法 为gtext('string')。 我们来看几个例子:
>> x=linspace(0,2*pi,30); y=sin(x); z=cos(x);
>> plot(x,y,x,z) % 划二条曲线 y=sin(x), z=cos(x)
>> text(2.5,0.7,'sin(x)') % (2.5,0.7)是依据绘图大小的座标值
>> gtext('cos(x)') % 将滑鼠移至适当位置再按滑鼠键
一般的 x-y 图在横轴及纵轴皆是以线性尺度来绘图,如果要绘图的数据的 x 或 y 值变化范围太大,就须要改用 对数 (log) 尺度来绘图才可得到合理的图。MATLAB 提供三种对数尺度的绘图指令:semilogx,semilogy, loglog, 它们的作用分别是x轴以对数尺度绘图,y 轴以对数尺度绘图,x 和 y 轴以对数尺度绘图。我们来看几个例子, 藉以说明在何种场合须要用对数尺度绘图。
>> y=0:0.1:10; x=10.^y
>> plot(x,y) % 会画出的看不出所以然的图
>> semilogx(x,y) % 改以对数尺度绘图就清楚多了
>> x=[0 2 5 7 10 12 15 17 20 21];
>> y=[0.1 0.2 0.5 0.6 0.9 1 1.2 1.26 1.22 1.2];
>> plot(x,y) % 先以线性尺度绘图,再分别以三种对数尺度绘
>> semilogx(x,y) % 图,注意各个图长像会改变
>> semilogy(x,y)
>> loglog(x,y)
1.19 关系及逻辑运算
在执行关系及逻辑运算时,MATLAB 将输入的不为零的数值都视为真 (True)而为零的数值则视为否 (False)。 运算的输出值将判断为真者以 1 表示而判断为否者以 0 表示。MATLAB 提供以下的关系判断及逻辑的运算 元:
符号 关系的意义
< 小于
<= 小于等于
> 大于
>= 大于等于
== 等于
~= 不等于
& 逻辑 and
| 逻辑 or
~ 逻辑 not
上述的各个运算元须用在二个大小相同的数组或是矩阵的比较,以下有几个例子:
>> a=1:5, b=5-a,
a =
1 2 3 4 5
b =
4 3 2 1 0
>> tf= a>4
tf =
0 0 0 0 1
>> tf= a==b
tf =
0 0 0 0
展开阅读全文