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:

- Shouldn’t the
`Plus[2,Times[3,[ImaginaryI]]]`

match with`Plus[Pattern[a,Blank[]],Times[Complex[0,1],Pattern[b,Blank[]]]]`

? - 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. - 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

1 Asked on May 24, 2021

1 Asked on May 24, 2021

1 Asked on May 24, 2021 by rfrasier

1 Asked on May 23, 2021

4 Asked on May 23, 2021

1 Asked on May 23, 2021

1 Asked on May 23, 2021

approximation asymptotics calculus and analysis functions numerical integration

2 Asked on May 22, 2021 by berniethejet

1 Asked on May 22, 2021

2 Asked on May 22, 2021

1 Asked on May 22, 2021

0 Asked on May 21, 2021

0 Asked on May 21, 2021

0 Asked on May 21, 2021

Get help from others!

Recent Answers

- haakon.io on Why fry rice before boiling?
- Peter Machado on Why fry rice before boiling?
- Lex on Does Google Analytics track 404 page responses as valid page views?
- Joshua Engel on Why fry rice before boiling?
- Jon Church on Why fry rice before boiling?

Recent Questions

- How Do I Get The Ifruit App Off Of Gta 5 / Grand Theft Auto 5
- Iv’e designed a space elevator using a series of lasers. do you know anybody i could submit the designs too that could manufacture the concept and put it to use
- Need help finding a book. Female OP protagonist, magic
- Why is the WWF pending games (“Your turn”) area replaced w/ a column of “Bonus & Reward”gift boxes?
- Does Google Analytics track 404 page responses as valid page views?

© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP