MATLAB复数类型

复数是指既包含实部又包含虚部的数,虚部的单位是 -1 的开平方根,在 MATLAB 中用字母 i 或 j 中的一个表示,i 和 j 的作用是完全一样的。

复数出现在许多科研工作问题上,例如,在电力工程中,可以用复数代表交变电压、交变电流和阻抗。描述电气系统行为的公式经常用到复数。

作为一个工程师,如果没有很好地理解和运用复数,将无法工作。复数的一般形式如下:

C = a + bi

其中 C 为复数,a 和 b 均为实数,i 代表 -1 的开平方根。a、b 分别为 C 的实部和虚部。

由于复数有两个部分,所以它能在平面内标出。这个平面的横轴是实轴,纵轴是虚轴,所以复数在这个平面内为一个点,横轴为 a,纵轴为 b。用上面的方式表示一个复数,称为直角坐标表示,坐标的横轴与纵轴分别代表复数的实部与虚部。

若复数在一个平面内,则有另一种表达方式,即极坐标表示,公式如下:

c = a + bi = z∠θ

其中 z 代表向量的模,θ 代表辐角。直角坐标中的 a、b 和极坐标 z、θ 之间的关系为:

a = z cosθ
b = z sinθ
z = ( a2+b2) 1/2
θ = tan-1 (b/a)

创建复数

在 MATLAB 中创建复数有两种方法:直接生成或者使用 complex() 函数生成。

1) 直接生成,请看下面的代码:
>> x = 2 + 3i
x = 
    2.0000 + 3.0000i
所谓直接生成,也就是将复数直接写出来。

2) 使用 complex() 函数生成,请看下面的代码:
>> x=2
>> y=4
>> z=complex(x, y)

z =
    2.0000 + 4.0000i
其中 x、y 为实数,得到的 z 是以 x 为实部,y 为虚部的复数。

也可以这样使用 complex() 函数,具体代码如下:
>> x=2
>> z=complex(x)

z =
    2.0000 + 0.0000i
其中 x 为实数,得到的 z 是以 x 为实部,以 0 为虚部的复数。

再来看一个更加复杂的例子:
>> x = rand(3) * 5;
>> y= rand(3) * -8;
>> z = complex(x,y)
z = 
    4.0736 - 7.7191i  4.5669 - 7.6573i  1.3925 - 1.1351i
    4.5290 - 1.2609i  3.1618 - 3.8830i  2.7344 - 3.3741i
    0.6349 - 7.7647i  0.4877 - 6.4022i  4.7875 - 7.3259i
上例中应用 rand(3) 函数生成 3×3 的随机数矩阵。

通过 real() 和 imag() 函数可以把复数分为实数和虚数部分,此处不再举例,有兴趣的读者请自行测试。

下表为常见的支持复数运算的 MATLAB 函数。

复数运算函数
函数名 描述
conj(c) 计算 c 的共轭复数,如果 c=a+bi,那么 conj(c)=a-bi
real(c) 返回复数 c 的实部
inag(c) 返回复数 c 的虚部
isreal(c) 如果数组 c 中没有一个元素有虚部,函数 isreal(c) 将返回 1;所以如果一个数组 c 是 复数组成,那么 isreal(c) 将返回 0
abs(c) 返回复数 c 的模
angle(c) 返回复数 c 的幅角

在本节的最后,将上面介绍过的数据类型汇总成表,如下表所示,给出适合 MATLAB 支持的数据类型函数。

数据类型函数
函数名 描述
double 创建或转化为双精度数据类型
single 创建或转化为单精度数据类型
int8,int16,int32,int64 创建或转化为有符号整数数据类型
uint8,uint16,uint32,uint64 创建或转化为无符号整数数据类型
isnumeric 若是整数或浮点数据类型,返回 true
isinteger 若是整数数据类型,返回 true
isfloat 若是单精度或双精度数据类型,返回 true
isa(x,'type') type 包括 numeric、integer 和 float,当 x 类型为 type 时,返回 true
case(x,'type') 将 x 类型置为 type
intmax('type') type 数据类型的最大整数值
intmin('type') type 数据类型的最小整数值
realmax('type') type 数据类型的最大浮点实数值
realmin('type') type 数据类型的最小浮点实数值
eps('type') type 数据类型的 eps 值(浮点值)
eps(x) x 的 eps 值,即 x 与 MATLAB 能表示的和其相邻的同数据类型的那个数之间的距离
zeros(...,'type') 创建数据类型为 type 的全 0 阵列
ones(...,'type') 创建数据类型为 type 的全 1 阵列
eye(...,'type') 创建数据类型为 type 的单位阵列