C/C++ Solving C++ Complex Array with Time-Dependent Schrodinger Equation

  • Thread starter Thread starter castusalbuscor
  • Start date Start date
  • Tags Tags
    Array C++ Complex
Click For Summary
The discussion centers on programming issues related to using complex numbers in C++ for solving the time-dependent Schrödinger equation. The initial problem involves incorrectly assigning values to a complex array, where the user attempts to use the comma operator, leading to unexpected outputs. The correct way to create and assign complex numbers is emphasized, specifically using the constructor `complex<double>(real, imaginary)` instead of the comma operator. The user is guided to ensure proper syntax for outputting complex numbers, with examples demonstrating successful assignments and outputs. The conversation highlights the importance of understanding operator behavior in C++ and provides code snippets that successfully illustrate the correct implementation of complex numbers in an array.
castusalbuscor
Messages
15
Reaction score
0
Hi, I've been trying to write a program to solve a propagation of a wave packet using the time dependent schrodinger equation.
and I noticed I would need to use complex numbers.

I know that I need to use #include<complex>

I declare my array, and I started with a simple 1-d array.
complex<double>a[2]
When inputting data to the array I know that I would need something like this:
a[0] = (1,5);
a[1] = (2,8);


however when I output the data I only get:

a[0] = (5,0)
a[1] = (8,0)


Any idea how I can get around it?

And what about taking the complex conjugate of an array?
 
Technology news on Phys.org
Unfortunately, it did exactly what you asked it to!

The (default) comma operator is defined to:
(1) Evaluate its first argument
(2) Discard the result
(3) Evaulate and return its second argument


So, the expression (1, 5) correctly evaluates to 5. For example, try this statement:

std::cout << (1, 5) << std::endl


Your problem is that you wanted to assign a complex number into the array, and so you must create the one you want to put into the array. An example of invoking the two-argument constructor to create a complex number is the expression

complex<double>(1, 5)

which evaluates to the complex number 1+5i.
 
Hurkyl said:
Unfortunately, it did exactly what you asked it to!

The (default) comma operator is defined to:
(1) Evaluate its first argument
(2) Discard the result
(3) Evaulate and return its second argument


So, the expression (1, 5) correctly evaluates to 5. For example, try this statement:

std::cout << (1, 5) << std::endl


Your problem is that you wanted to assign a complex number into the array, and so you must create the one you want to put into the array. An example of invoking the two-argument constructor to create a complex number is the expression

complex<double>(1, 5)

which evaluates to the complex number 1+5i.

Yeah, I just tried it and it did not work.

using cout << complex<double>(1,5) does indeed output (1,5).

However, when I use
Code:
complex<double> a;
a = complex<double>(1,5);
cout << a;

I get (5,0). And when I use std::cout << (1, 5) << std::endl I still get (5,0)
 
Are you sure you doing it right? It works fine here.

Code:
#include <iostream>
#include <complex>

int main()
{
    std::cout << std::complex<double>(1.0, 5.0) << std::endl;

    std::complex<double>a[2];
    a[0] = std::complex<double>(2.0, 4.0);
    a[1] = std::complex<double>(3.0, 3.0);

    std::cout << a[0] << '\n' << a[1] << std::endl;

    std::complex<double> b;
    b = std::complex<double>(4.0, 2.0);
    std::cout << b << std::endl;

    return 0;
}
gives
(1,5)
(2,4)
(3,3)
(4,2)
 
Learn If you want to write code for Python Machine learning, AI Statistics/data analysis Scientific research Web application servers Some microcontrollers JavaScript/Node JS/TypeScript Web sites Web application servers C# Games (Unity) Consumer applications (Windows) Business applications C++ Games (Unreal Engine) Operating systems, device drivers Microcontrollers/embedded systems Consumer applications (Linux) Some more tips: Do not learn C++ (or any other dialect of C) as a...

Similar threads

  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 11 ·
Replies
11
Views
2K
Replies
1
Views
2K
  • · Replies 17 ·
Replies
17
Views
3K
  • · Replies 5 ·
Replies
5
Views
9K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 6 ·
Replies
6
Views
3K
Replies
2
Views
2K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 3 ·
Replies
3
Views
3K