# Pattern-matching complex numbers as a + bi

Mathematica Asked by ppln on October 24, 2020

I just started working with Mathematica and am toying with pattern matching. There may be something obvious I’m missing in this, but I can’t figure it out by myself.

I want to write down a function that takes a complex number as arguments. So f[1 + 2 I] should be a valid input, as well as f[a + b I]. I want, however, to make my function parse this as two numbers of the form a + bi, getting a and b by pattern matching. I made several attempts similar to this:

f[a_ + b_ I] := NSolve[a^2 + b^2 == 1/2 (1 + z), z]
SetAttributes[f, HoldAll]


(I guess the NSolve doesn’t matter in this case, but let it there in case it’s part of the issue.)

This doesn’t work as I planned. Any attempt to call it, like f[1 + 2 I], just echoes itself, but it does work fine when I call it with symbolic arguments, such as f[a + b I].

I guessed this should be due to some difference in the internal representation of symbolic expressions and complex numbers. Indeed, whenever I try to MatchQ[m + n I, a_ + b_ I], it says it’s True. But when I try the sorts of MatchQ[Unevaluated[2 + 3 I], a_ + b_ I], it’s False.

In trying to figure it out, I asked

FullForm[a + b I]
FullForm[Unevaluated[2 + 3 I]]
FullForm[a_ + b_ I]


and got

Plus[a,Times[Complex[0,1],b]]
Unevaluated[Plus[2,Times[3,[ImaginaryI]]]]
Plus[Pattern[a,Blank[]],Times[Complex[0,1],Pattern[b,Blank[]]]]


My questions are:

1. Shouldn’t the Plus[2,Times[3,[ImaginaryI]]] match with Plus[Pattern[a,Blank[]],Times[Complex[0,1],Pattern[b,Blank[]]]]?
2. What is the difference between [ImaginaryI] and Complex[0,1]? I know the first is a symbol as much as [Alpha] is, and I guess me asking for Unevaluated is preventing it from being cast as a Complex[0,1]. Probably this would be needed for the matching, but I don’t know a workaround.
3. Is there a better way to do what I’m attempting with my function?

Thanks!

f[a_. + b_ I | Complex[a_, b_]] := {a, b}


You need to catch both the unevaluated form for symbolic work and the evaluated Complex representation for numerical work. Note that the first a_. allows the real part to be omitted so that purely imaginary parts can be matched as well.

Note that this might break on sufficiently complicated polynomial forms, but it hasn't blown up on the examples I've tried.

Correct answer by eyorble on October 24, 2020

## Related Questions

### How to simplify sqrt without imaginary unit

0  Asked on June 9, 2021 by daaan

### Programming language prototyping in Mathematica

1  Asked on June 9, 2021 by math-gaudium

### Singularities forming on boundary while solving system of pde’s

1  Asked on June 9, 2021 by woody

### Plotting imaginary part on y-axis against real part on x-axis of complex momentum

0  Asked on June 9, 2021 by anwar

### SphericalPlot3D for a list

1  Asked on June 9, 2021

### Is this second solution to this ODE correct?

1  Asked on June 8, 2021

### MapThread over sublists of different length

6  Asked on June 8, 2021 by rmma

### Curve fitting by running through hundreds of models and return the one with best fit

2  Asked on June 8, 2021 by mathlind

### Is it possible to ask Mathematica to draw a plot like the given one?

2  Asked on June 8, 2021

### How to import and cut n images in 6 parts hopefully proportional to the written and export them to a directory?

1  Asked on June 8, 2021 by juan-muoz

### Plotting a Phase Portrait

3  Asked on June 8, 2021 by covertbob

### How to express the function $a(t)$ knowing a parametrization $a(eta)$ and $t(eta)$?

3  Asked on June 8, 2021

### AngularDegrees^2 and Steradians are incompatible units

2  Asked on June 7, 2021

### More Issues With Units

2  Asked on June 7, 2021 by fiz

### Export Latin Modern Math Greek: spurious spacing on Windows

0  Asked on June 7, 2021

### Nmaximize error : The function value Indeterminate is not a number at

0  Asked on June 7, 2021 by natacha-raffin

### DateListPlot to DateListHistogram

2  Asked on June 7, 2021 by z-ming-ma

### Manipulate giving errors when I plot the product of a step function and a continuous function

1  Asked on June 7, 2021

### Strange limitation of Z value of contour plot

1  Asked on June 7, 2021