Fortran complex number syntax error with exponential

  • Context: Fortran 
  • Thread starter Thread starter Matterwave
  • Start date Start date
  • Tags Tags
    Complex Fortran
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
12 replies · 2K views
Science Advisor
Homework Helper
Gold Member
Messages
4,176
Reaction score
473
Hey, so I just have a quick question. I am trying to set a complex variable (in an array) as ##e^{i\alpha_1}## and the line I used in my code looks like this:

Code:
  hmajphasemix(2,2)=(cos(alpha1),sin(alpha1))

But the compiler is telling me that it "expects a right parenthesis" at this line. I'm kind of confused cus I'm counting the right number of parenthesis. Is this the correct way to set this variable or have I messed something up?
 
Physics news on Phys.org
Only literal constants can be assigned that way:
Code:
cnumber = (1.2, 2.3)
When using variables, as you are doing, then you need:
Code:
hmajphasemix(2,2) = cmplx(cos(alpha1),sin(alpha1))
 
Ah, so I can only use (X,Y) when X and Y are just numbers, but if X and Y are some functions of some variable then I need to use cmplx(X,Y) is that right?
 
Not even functions, even if they just variables... Without cmplx they need to be literal contacts
 
Ah, thanks! What if X and Y are parameters? Would the simpler one work then?
 
Don't think so...anyway, you can do your own testing now that you know what's going on.
 
  • Like
Likes   Reactions: jim mcnamara
Alrighty. Thanks again. :)
 
One question: why would you ever still program in fortran lol?
 
serp777 said:
One question: why would you ever still program in fortran lol?
Apparently there are good reasons to do so. There is a ton of existing Fortran code for scientific and engineering applications. Also, Fortran code lends itself more easily to highly parallelized applications than do C and C++ programs, or so I understand. One of the drawbacks in C/C++ code is that data can be accessed indirectly (via pointers), which can be problematic where a block of data has to be accessed by multiple threads. The relatively new restrict keyword in C (C99) is an effort to restrict the access to data by only a single pointer.
 
The last time I programmed in FORTRAN (an FM multipath simulation) it was because of the ease of working with complex numbers.
(and I happened to have a graphing package)
I'd probably do it in MATLAB now and it would take forever to run.

Maybe there are some good complex math packages for C or C++ now.