MATLAB Examples

# ANGLE, UNWRAP, and branches of complex chebfuns

Nick Trefethen, May 2011

(Chebfun example complex/Arguments.m)

A complex number z has a modulus or absolute value in [0,infty), which Matlab computes with ABS(z), and an argument in (-pi,pi], which Matlab computes with ANGLE(z). For example:

```angle(1) ```
```ans = 0 ```
```angle(-1) ```
```ans = 3.141592653589793 ```
```angle(-1-.01i) ```
```ans = -3.131592986903128 ```

Chebfun overloads the ANGLE command in the obvious fashion, analogous to CEIL, FLOOR, and ROUND. For example, here is a spiral in the complex plane:

```LW = 'linewidth'; lw = 1.6; FS = 'fontsize'; fs = 14; t = chebfun('t',[1 20]); f = t.*exp(1i*t); plot(f,LW,lw), axis equal title('f(t) in complex plane',FS,fs) ```

And here is its angle:

```plot(angle(f),'m',LW,lw) xlabel t, ylabel angle(f(t)) ```

Often one would prefer to define a continuous argument, and for this purpose Matlab has the command UNWRAP. For example:

```unwrap(angle([-1 -1-.01i])) ```
```ans = 3.141592653589793 3.151592320276458 ```

If we apply the Chebfun overload, we get a continuous argument for that spiral that makes more sense:

```plot(unwrap(angle(f)),'m',LW,lw), ylim([-1 21]) xlabel t, ylabel argument ```

An important area of application of these commands is to functions in the complex plane, where keeping track of branch cuts is often a headache. For example, suppose we want to take the square root of that function f. The result is not very useful. (For the moment we have to construct the function again with 'splitting on' to make this experiment work, though in principle Chebfun should be clever enough to introduce a breakpoint without splitting on.)

```g = chebfun('sqrt(t.*exp(1i*t))',[1 20],'splitting','on'); plot(g,LW,lw), axis(5*[-1 1 -1 1]), axis square title('sqrt(f(t)) in complex plane',FS,fs) ```

We can get the right effect with UNWRAP:

```g = sqrt(abs(f)).*exp(.5i*unwrap(angle(f))); plot(g,LW,lw), axis(5*[-1 1 -1 1]), axis square title('sqrt(f(t)) in complex plane',FS,fs) ```