表达式

与其他程序语言类似,MATLAB也提供了数学表达式功能。但是,与大多数程序语言不同的是,这些表达式主要是针对矩阵进行操作的。[大谦MATLAB,dqmatlab点com]

数值表示

MATLAB使用传统的数值表示方法,例如对于比较长的数,使用科学记数法;虚数用i或j作为后缀。

【例3-1】一些合法的数值表示

code.matlab
3              -99            0.0001
9.6397238      1.60210e-20    6.02252e23
1i             -3.14159j      3e5i

所有数值在MATLAB内部被保存为IEEE浮点标准指定的long型格式。浮点数据的精度为16个小数位,范围大约为10-308~10+308。

运算符

1.算术运算符

算术运算符可以实现四则运算以及幂、转置等运算。MATLAB表达式采用的算术运算符如表3-1所示。

表3-1 MATLAB表达式采用的算术运算符

运 算 符 说 明 运 算 符 说 明
+ \ 左除
^
* ' 复数共轭转置
/ () 指定计算顺序

2.比较运算符

比较运算符用于比较两个数的大小,如表3-2所示。

表3-2 比较运算符

运 算 符 描 述 运 算 符 描 述
< 小于 >= 大于或等于
<= 小于或等于 == 等于
> 大于 ~= 不等于

3.逻辑运算符

逻辑运算符用于判断对象或对象之间的某种逻辑关系。

【例3-2】

假设有下面3个数组和矩阵

code.matlab
A = [0 1 1 0 1];
B = [1 1 0 0 1];
C=[0 1 2;
   03 8;
   0 5 0];

表3-3列出了各种运算符及对应函数的逻辑运算结果。

表3-3 逻辑运算符

运算符 函 数 描 述 示 例
& and 两个数组中相同位置的值都为非0时返回1,否则返回0 A & B=01001 或 and(A,B)
| or 两个数组中相同位置的值有一个为非0时返回1,否则返回0 A | B=11101 或 or(A,B)
~ not 对数组中的元素取反,即非0值变为0,0变为1 ~A=10010 或 not(A)
xor 两个数组中相同位置的元素只有一个为非0时返回1,否则返回0 xor(A,B)=10100
any(C) 如果矢量中有任何一个元素为非0,则返回1;否则返回0 any(C) ans= 0 1 1
all(C) 如果矢量中所有元素为非0,则返回1,否则返回0 all(C) ans= 0 1 0

续表

运算符 函 数 描 述 示 例
&& 如果符号两端的表达式均为真,则返回true(1);否则返回0 a=8; a>5 && a<10 ans= 1
|| 如果符号两端的表达式有一个为真,则返回true(1);否则返回0 a=11; a>5 || a<10 ans= 1

4.运算符的优先级

按照优先级别,各种运算符的先后次序如下所示。

小括号();

转置(.')、幂(.^)、复数共轭转置(')、矩阵的幂(^);

一元的加(+)、一元的减(-)、逻辑否(~);

乘(.*)、右除(./)、左除(.\)、矩阵乘(*)、矩阵右除(/)、矩阵左除(\);

加(+)、减(-);

冒号操作符(:);

小于(<)、小于或等于(<=)、大于(>)、大于或等于(>=)、等于(==)、不等于(~=);

逐元素AND(&);

逐元素OR(|);

&&;

||。

处理字符串表达式

处理字符串表达式需要使用eval函数和feval函数。

eval函数可以处理包含MATLAB表达式、语句或函数调用的字符串。使用该函数的最简单的语法格式为:

code.matlab
eval('string')

【例3-3】用eval函数生成n阶Hilbert矩阵。

code.matlab
t = '1/(m + n - 1)';
k=3;
for m = 1:k
    for n = 1:k
        a(m,n) = eval(t);
    end
end

feval函数与eval函数的区别在于,feval函数执行的是函数而不是MATLAB表达式。要执行的函数通过函数句柄或包含函数名称的字符串在第1个参数中指定。