搜档网
当前位置:搜档网 › Matlab常用函数

Matlab常用函数

matlab

表2.1 用于创始化变量的MATLAB 函数
函数 作用
zeros(n) 创建一个n×n 零矩阵
zeros(n,m) 创建一个n×m 零矩阵
zeros(size(arr)) 创建一个与数组arr 的零矩阵
ones(n) 创建一个n×n 元素全为1 矩阵
ones(n,m) 创建一个n×m 元素全为1 矩阵
eye(n) 创建一个n×n 的单位矩阵
eye(n,m) 创建一个n×m 的单位矩阵
length(arr) 返回一个向量的长度或二维数组中最长的那一维的长度
size(arr) 返回指定数组的行数和列数



2.2.4 用关键字input 初始化变量
关键字input 用来提示使用者和直接从键盘输入初始化变量.当脚本文件(Script files)时,
它可以用来提示使用者输入.input 函数在命令窗口(The Command Windows)显示提示语句,并
等待用户输入一个值.例如,下面的赋值语句:
my_val = input('Enter an input value:')
当这个语句被编译时,MATLAB 打印出字符串enter an input value:,然后等待用户回复.
如果要只输入一个数,那么只需要直接键入,如果要输入一个数组,则必须带上中括号([]).不管
怎样,当按下回车键时.在窗口输入的任何值都会被储入变量my_val.如果只按下回车键,那么
这个变量就存储了一个空矩阵.
如果input 函数中有字符's'做为它的第二个参数,输入的数据就被当字符串.因此,语句
>> in1 = input('enter data:');
Enter data:1.23
把数值1.23 存储到in1 中.而语句
>> in2 = input('enter data:','s')
Enter data:123
把字符串1.23 存储到in2 中.

表3.1 关系运算符

运算符 运算
== 等于
~= 不等于
> 大于
>= 大于或等于
< 小于
<= 小于或等于
下面是一些关系运算和它的结果运算结果
运算 结果
3 < 4 1
3 <= 4 1
3 == 4 0
3 > 4 0
4 <= 4 1
'A' < 'B' 1
最后一个运算得到的结果为1,是因为字符之间的求值要按照子母表的顺序。

表3.2 逻辑运算符
& 逻辑与
| 逻辑或
xor 逻辑与或
~ 逻辑非

标量和数组之间也可进行逻辑运算。例如,

a=[0 1;1 0],b=0,那么表达式a&b 将会产
生结果a=[0 0;0 0]。两数组之间也可进行逻辑运算,只要它们具有相同的大小。例如,
a=[0 1;1 0] , b=[0 0;1 1] 则a|b 产生的结果[0 1;1 1]。如果两个数的大小不相同,那么将会
产生运行时错误。
在运算的顺序中,逻辑运算在所有的数学运算和关系运算之后进行。
表达式中的运算顺序如下:
1.所有的数学运算按照前面描述的顺序的进行。
2.从左向右依次进行关系运算
3.执行所有~运算
4.从左向右依次进行&运算
5.从左向右依次进行|运算和数学运算一样,括号能够改变括号的默认顺序。

3.3.4 逻辑函数
MATLAB 中有大量的逻辑函数,在条件满足时,函数返回1。条件不满足时,返回0。
这些函数和逻辑运算与关系联合在组成选择结构和循环结构。表3.4 列出了一系

列的逻辑函
数。
表3.4 MATLAB 逻辑函数
函数 用途
ischar(a) a 是字符数组返回1,否则返回0
isempty(a) a 是空数组返回1,否则返回0
isinf(a) a 是无穷大,则返回1,否则返回0
isnan(a) a 不是一个数则返1,否则返回0
isnumeric(a) a 是一个数值数组返回1,否则返回0

3.4.1 if 结构

if (b^2 - 4*a*c) < 0
disp('This equation has two complex roots.');
elseif (b^2 - 4*a*c) == 0
disp('This equation has two identical real roots.');
else
disp('This equation has two distinct real roots.');
end

语法:

if control_expr_1

Block 1

elseif control_expr_2

Block 2

else

Block 3

end

例子:

你可以在一行内写完一个完整的if 结构,只需把结构的每一部分后面加上
分号或逗号,所以下面的两个结构是等价的:
if x < 0
y = abs(x);
end

if x < 0; y = abs(x); end
但是这种方式只适用于简单的结构。

%Script file: calc_roots.m
%
% Purpose:
% This program solves for the roots of a quadratic equation
% of the form a*x^2 + b*x + c = 0. It calculates the answers
% regardless of the type of roots that the equation possesses.
%
% Record of revisions:
% Date Programmer Description of change
% ====== =========== ================
% 12/04/98 S. J. Chapman Original code
%
% Define variables:
% a --Coefficient of x^2 term of equation
% b --Coefficient of x term of equation
% c --Constant term of equation
% discriminant --Discriminant of the equation
% imag_part --Imag part of equation (for complex roots)
% real_part --Real part of equation (for complex roots)
% x1 --First solution of equation (for real roots)
% x2 --Second solution of equation (for real roots)
% Prompt the user for the coefficients of the equation
disp ('This program solves for the roots of a quadratic ');
disp ('equation of the form A*X^2 + B*X + C = 0.');
a = input('Enter the coefficient A: ');
b = input('Enter the coefficient B: ');
c = input('Enter the coefficient C: ');
% Calculate discriminant
discriminant = b^2 - 4 * a * c;
% Solve for the roots, depending on the vlaue of the discriminant.
if discriminant > 0 % there are two real roots, so ...
x1 = (-b + sqrt(discriminant)) / (2*a);
x2 = (-b - sqrt(discriminant)) / (2*a);
disp('This equation has two real roots:');
fprintf('x1 = %f\n', x1);
fprintf('x2 = %f\n', x2);
elseif discriminant == 0 % there is one repeated root, so ...
x1 = ( -b ) / (2*a);
disp('This equation has two identical real roots:');
fprintf('x1 = x2 = %f\n', x1);
else % there are complex roots, so ...
real_part = (-b) / (2*a);
imag_part = sqrt( abs(discriminant)) / (2*a);
disp('This equation has complex roots:');
fprintf('x1 = %f + i %f \n',real_part, imag_part);
fprintf('x1 + %f - i %f \n', real_part, imag_part);
end



给出等级分数
假设我们要编写一个程序,输入一个数值分数,输出等级分数,即是A 级,B 级和C


grade > 95 A
95 ≥ grade > 86 B
86 ≥ grade > 76 C
76 ≥ grade > 66 D
66 ≥ grade > 0 F
用两种方式写出这个程序,第一种方式用多个elseif 语句,第二种方式用if 的嵌套。
答案:
(a)用多个elseif 语句
if grade > 95.0
disp('The grade is A.');
elseif grade > 86.0
disp('The grade is B.');
elseif grade >76.0
disp('The grade is C.');
elseif grade > 66.0
disp('The grade is D.');
else
disp('The grade is F.');
end
(b)用if 嵌套结构
if grade > 95.0
disp('The grade is A.');
else
if grade > 86.0
disp('The grade is B.');
else
if grade > 76.0
disp('The grade is C.');
else
if grade > 66.0
disp('The grade is D.');
else
disp('The grade is F.');
end
end
end
end
从上面的例子中,我们可以看到如果有多个选项的话,在一个if 结构中用到多个else if
语句将会比if 的嵌套结构简单的多。

3.4.4 switch 结构

switch 结构是另一种形式的选择结构。程序员可以根据一个单精度整形数,字符或逻辑
表达式的值来选择执行特定的代码语句块。
switch (switch_expr)
case case_expr_1,
Statement 1
Statement 2
...
case case_expr_2
Statement 1
Statement 2
...
...
otherwise,
Statement 1
Statement 2
...

end

让我们看一个简单的关于switch 结构的例子。下面的语句用来判断1 到10 之间的数是
奇数还是偶数。它用来说明一系列的case 选项值的应用和otherwise 语块的应用。
switch (value)
case {1, 3, 5, 7, 9},
disp('The value is odd.');
case {2, 4, 6, 8, 10},
disp('The value is even.');
otherwise,
disp('The value is out of range.');
end

3.4.5 try/catch 结构的应用

try
Statement 1
Statement 2
...
catch
Statement 1
Statement 2
...
end



3.5.1 控制x,y 轴绘图的上下限
在默认的情况下,图象的X,Y 轴的范围宽到能显示输入值的每一个点。但是有时只显
3.5 附加的画图特性 | 71
示这些数据的一部分非常有用,这时你可以应用axis 命令/函数。
axis 命令/函数的一些形式展示在表3.5 中。其中两个最重要的形式在表中用黑体字标出
——它允许程序员设定和修改坐标的上下限。所有形式的完全列表将会在MATLAB 的在线
文件中找到。
为了说明axis 的应用,我们将画出函数f(x)=sinx 从-2π 到2π 之间的图象,然后限定坐
标的区域为0≤x≤π,0≤y≤1。
表3.5axis 函数/命令的形式
命令 功能
v=axis 此函数将会返回一个4 元素行向量[xmin xmax ymin ymax],其
中xmin xmax ymin ymax 代表x,y 轴的上下限

axis([xmin xmax ymin ymax]) xmin xmax 设定横轴的下限及上限, ymin ymax 设定纵轴的下
限及上限
axis equal 将横轴纵轴的尺度比例设成相同值
axis square 横轴及纵轴比例是1:1
axis normal 以预设值画纵轴及横轴
axis off 将纵轴及横轴取消
axis on 这个命令打开所有的轴标签,核对符号,背景(默认情形)

一些MATLAB 命令似乎不能确定它是个函数还是一个命令。例如,有时axis 它好像是
命令,有时它好像是函数。有时我们把它当作命令:axis on,在其他时候,我们把他当作函
数:axis([0 20 0 35])。遇到这样的情况怎么办?
一个简单的答案是MATLAB 命令是通过函数来实现的。MALTAB 编译器无论什么时
候遇到这个命令,它都能转化为相应的函数。它把命令直接当作函数来用,而不是应用命令
语法。下面的两个语句是等价的:
axis on;
axis ('on');
无论什么时候MATLAB 遇到一个命令时,它都会转化一个函数,当命令的参数当作字
符串看作相对应函数的参数。所以编译器翻译如下命令:
garbage 1 2 3

garbage ('1', '2', '3')
注意只有带有字符参数的函数才能当作命令。带有数字参数的函数只能被当作函数。这
就是为什么axis 有时当作命令,有时被当作函数。

3.5.2 在同一坐标系内画出多个图象
在一般情况下,创建一个新的图象就要用到一个plot 命令,前面的数据就会自动消失。
这种行为可以通过使用hold 命令得到修改。当hold on 命令执行后,所有的新的图象都会叠
加在原来存在的图象。hold off 命令可恢复默认情况,用新的图象来替代原来的图象。
例如,在同一坐标轴内的画出sinx 和cosx 的图象。产生的图象如图3.4 所示。
x = -pi:pi/20:pi;
y1 = sin(x);
y2 = cos(x);
plot(x,y1,'b-');
hold on;
plot(x,y2,'k--');
hold off;
legend ('sin x','cos x');



图3.4 用hold 命令在一个坐标轴内画出两个函数的图象 3.5.4 子图象
在一个图象窗口中有一系列的坐标系,创建出多个子图象。创建子图象要用到subplot
命令其形式如下
subplot(m,n,p)
这个命令在当前图象窗口创建了m×n 个子图象,按m 行,n 列排列,并选择子图象p
来接受当前所有画图命令。
这些子图象以从左向右从上到下编号。例如,命令subplot(2,3,4)将会创建6 个子图象,
而且subplot 4 是当前子图象。
如果subplot 命令创建的新坐标系与原来的坐标系相冲突,那么原来的坐标系将会被自
动删除。
下面的命令将会在同一窗口中创建两个子图象,每一个子图象独立地展示不同的图象。
产生的图象为图3.5。
图3.5 包含多个子图象的图象
figure(1);
subplot(2,1,1);
x = -pi:pi/20:pi;
y = sin(x);
plot(x,y);
title('Subplot

1 title');
subplot(2,1,2);
x = -pi:pi/20:pi;
y = cos(x);
plot(x,y);
title('Subplot 2 title'); 3.5.5 对画线的增强控制
在第二章中,我们学习了如何设置画线的颜色,样式,符号形式。我们还可以设置其中
的4 种附加的属性。
属性 说明
LineWidth 用来指定线的宽度
MarkerEdgeColor 用来指定标识表面的颜色
MarkerFaceColor
填充标识的颜色
MarkerSize 指定标识的大小
在plot 命令中,在自变量和函数之后被指定,形式如下:
plot(x,y,'PropertyName',value,...)
例如,下面的命令将画出一个图象,轨迹的宽度为3,颜色为黑色,圆圈标识的宽度为
6,每个标识为红色边缘和绿色内核,如图3.6。 4.1 while 循环
只要满足一定的条件,While 循环是一个重复次数不能确定的语句块。它的基本形如下
while expression
...
... end
如果expression 的值非零(true),程序将执行代码块(code block),然后返回到while 语句
执行。如果expression 的值仍然非零,那么程序将会再次执行代码。直到expression 的值变
为0,这个重复过程结束。当程序执行到while 语句且expression 的值为0 之后,程序将会
执行end 后面的第一个语

相关主题