薛定宇教授大讲堂(卷Ⅱ):MATLAB微积分运算
上QQ阅读APP看书,第一时间看更新

2.4 复变函数与映射

自变量为实数的函数称为实函数,自变量为复数的函数称为复变函数。本节将介绍复变函数的基本定义与简单运算,并介绍复变函数的映射及复变函数Riemann面的绘制方法。

2.4.1 复数矩阵及其变换

MATLAB可以直接表示复数矩阵。假设已知一个复数矩阵Z,则可以使用简单函数对该矩阵进行如下变换:

(1)共轭复数矩阵Z1=conj(Z)。

(2)实部、虚部提取R=real(Z),I=imag(Z)。

(3)幅值、相位表示A=abs(Z),P=angle(Z),其中相位的单位为弧度。

其实,这里的Z并不局限于矩阵,还可以是多维数组或符号表达式。

2.4.2 复变函数的映射

定义2-14 若某函数f(z)的自变量z为复数,则该函数称为复变函数。

由于复数是MATLAB最基本的数据结构,在大多数算法中均未特别区分实数和复数,所以前面介绍的绝大多数内容均可以直接用于复变函数的分析。

例2-16 已知某复变函数为,其中z为复数变量,试求

由下面语句即可得出所需的结果为

     >> syms z; f(z)=(z^2+3*z+4)/(z-1)^5; f1=simplify(f(-sqrt(-5)))

在复变函数中,一种很重要的数学变换形式是映射,即函数可以从一个变量z变换成另一个变量w的函数,其中z=g(w)为给定的函数。经常使用的映射是平移映射z=w+γ,反演映射z=1/w和双线性映射z=(aw+b)/(cw+d)。这里γ为给定复数,abcd为给定实数。平移映射将函数的原点平移到γ点;反演映射可以将单位圆内外的点相互映射;双线性映射实现直线与圆的相互映射。

例2-17 考虑例2-16中给出的复变函数f(z),试得出z=(s−1)/(s+1)下的映射函数F(s)。

映射问题可以由下面命令直接得出,得出的结果需要化简。

该语句可以直接得出映射函数为

例2-18 试将左半平面内的数据s通过双线性变换z=(s+1)/(s−1)映射成z平面内的点,并观察其分布。

假设实轴范围选择为(−a,0),纵轴范围选择为(−b,b),并令a=1,b=3,则可以用网格方法生成一些s左半平面的点。另外,还可以在区域内绘制一条垂直直线x=−0.55和一条水平直线y=1.65,如图2-9所示。

图2-9 s域的样本点分布示意图

通过双线性变换的直接映射,可以得出z平面内的映射点,如图2-10所示,该图还给出了s平面内水平、垂直线的映射结果。

图2-10 z域的映射效果

可见,通过双线性变换,可以将左半平面内的点映射成z平面单位圆中的点。不过从图2-10中给出的结果看,映射不是很完全,因为ab取值不是足够大,增加ab的值则可能得出覆盖全单位圆的映射结果。

一般情况下,人们只知道通过这种变换,s左半平面上的点可以映射到单位圆内,但不知道具体会如何映射,如果借助计算机工具就可以更好地观察具体的映射方式。

2.4.3 Riemann曲面的绘制

复变函数映射的三维图形表示和实函数是不一致的,复变函数映射应该首先采用函数cplxgrid()生成极坐标网格,用户可以根据给定的单值复变函数公式计算出变量f,然后由cplxmap()函数绘制该复变函数的映射曲面,这类曲面又称为Riemann面。这些函数具体调用格式为

z=cplxgrid(n);%给出语句计算f;cplxmap(z,f)

例2-19 试绘制出复变函数f(z)=z3 sin z2的映射曲面。

由下面的语句可以立即绘制出相应的复变函数的映射曲面,如图2-11所示。

     >> z=cplxgrid(50); f=z.^3.*sin(z.^2); cplxmap(z,f)

图2-11 复变函数的Riemann面

对于复数变量z,多值复变函数的Riemann面可能有多个分支,这些分支又称为Riemann叶(Riemann sheet),例如就有n个分支。MATLAB提供了绘制其各次方根Riemann曲面的函数cplxroot(n),可以直接绘制出的Riemann曲面。

例2-20 试绘制的Riemann曲面。

绘制这些方根函数的Riemann前面甚至不用事先生成网格,由cplxroot()函数可以直接绘制出的Riemann面,如图2-12、图2-13所示。

图2-12 三次方根函数的Riemann面

图2-13 四次方根函数的Riemann面

从上面给出的cplxroot()函数可见,其局限性在于只能绘制出方根函数的Riemann面,对其他类型的多值复变函数无能为力,所以可以考虑扩展cplxmap()函数,将该函数另存为cplxmap1()函数,再删除掉其中的mesh()函数和hold语句,这样就可以考虑多值复变函数Riemann面的绘制了。

例2-21 利用上述思路重新绘制的Riemann面。

首先考虑重新绘制函数的Riemann面。如果一个函数f1(z)是的一个分支,则另两个分支可以由f1(z)e2jπ/3f1(z)e4jπ/3求出。这样可以由下面语句直接绘制的Riemann面,与图2-12给出的结果完全一致。

例2-22 试绘制出复变函数的Riemann面。

可以生成复数型网格,求出第一Riemann叶的曲面数据,乘以标量e2πj/2就能得到另外一个Riemann叶,将它们在一个坐标系下绘制出来,可以得出完整的Riemann面,如图2-14所示。

图2-14 两个Riemann叶构成的曲面