Fortran Differential equation in fortran

AI Thread Summary
The discussion focuses on implementing the fourth-order Runge-Kutta algorithm in Fortran for a system of differential equations involving imaginary numbers. The user struggles with defining complex functions correctly, initially defining x and y as real, which leads to errors during computation. A suggested solution is to define all variables, including x, y, f, and g, as complex numbers to avoid type errors. Alternatively, the equations can be reformulated into a system of four real variables by separating the real and imaginary parts of x and y. This approach allows for proper handling of the imaginary components in the numerical computations.
nirajaryal
Messages
1
Reaction score
0
I need to do numerical computation by fourth order Runge Kutta Algorithm
in fortran. But I stuck in programming because the differential
equation contains imaginary part.

Take for e.g. the set of diff.equation are
x'=(i)y *exp(iwt) ;where i is imaginary no. and w is constant!
y'=(i)x*exp(iwt)

I tried to define complex function f and g as
f=(0,y *exp(iwt))
g=(0,x *exp(iwt))

and i defined x and y as real (because the argument of the complex
no.has to be real,right?/otherwise it doesn't accept)
But after every iteration,the x and y becomes real as
x=x0+some linear combination of the function f(which is complex)//and
real +complex gives complex no. and hence shows error!
So i unable to proceed further! So how should I proceed?
 
Technology news on Phys.org
nirajaryal said:
Take for e.g. the set of diff.equation are
x'=(i)y *exp(iwt) ;where i is imaginary no. and w is constant!
y'=(i)x*exp(iwt)

I tried to define complex function f and g as
f=(0,y *exp(iwt))
g=(0,x *exp(iwt))

and i defined x and y as real (because the argument of the complex
no.has to be real,right?

That is wrong, because your definitions of f and g are not the same as your differential equation.

Try something like this:
define ZI as a complex constant = (0.0, 1.0)
Make X, Y, F and G all complex
and then do
F = ZI * X * exp(ZI * W * T)

Alternatively, you could convert this to a set of equations in 4 real variables, the real and imaginary parts of x and y. Since exp(iwt) = cos wt + i sin wt

If you write x = xr + i xi and y = yr + i yi, where xr, xi, yr, yi are real, then

i * y *exp(iwt) = (i yr - yi) (cos wt + i sin wt)
= -yi cos wt + yr sin wt + i (yr cos wt - yi sin wt)

So you would have

xr' = -yi cos wt + yr sin wt
xi' = yr cos wt - yi sin wt
and similar equations for yr' and yi'
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I had a Microsoft Technical interview this past Friday, the question I was asked was this : How do you find the middle value for a dataset that is too big to fit in RAM? I was not able to figure this out during the interview, but I have been look in this all weekend and I read something online that said it can be done at O(N) using something called the counting sort histogram algorithm ( I did not learn that in my advanced data structures and algorithms class). I have watched some youtube...

Similar threads

Replies
3
Views
2K
Replies
59
Views
11K
Replies
8
Views
2K
Replies
4
Views
2K
Replies
8
Views
4K
Replies
3
Views
2K
Replies
5
Views
9K
Replies
9
Views
2K
Back
Top