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
AI Thread 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)
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
Back
Top