Ok, also versuche ich ein Anfangswertproblem zu lösen, versuche die Geschwindigkeit zu finden, die von der f
Funktion mit Runge-Kutta 2 gegeben wird. Mein Programm kompiliert, aber wenn ich es laufe gibt mir den gleichen Wert für v
jederzeit, aber ich kann einfach nicht finden, wo ich es falsch mache. Könnte mir jemand helfen?Nur Nullen mein Fortran Runge-Kutta
program runge
implicit none
real(8) :: f,t,y,g,v,c1
real(8) a,b,h
real(8) k1,k2,l1,l2,v0,gr,m
integer i,n,j
n=10
a=0
b=100
h=(b-a)/n
gr=9.8100
m=70.0
c1=15.0
v0=20.0
y=0.0
v=v0
t=a
open(1, file="velocidad.txt")
write(1,*) a,v
print*, " t", " v"
do i=1,n
k1 = f(t,v)
k2 = f(t + h, v + h*k1)
v = v + h*(k1 + k2)/2
t = a + i*h
write(1,*) t, v
print*, t, v
end do
close(1)
end program runge
real(8) function f(t,y)
implicit none
real(8) :: t,y,c1,gr,v,m
f = -(gr)-((c1/m)*v)
end function f
wenn ich es benutze ich bekommen und Ausgabe wie folgt:
t v
10.000000000000000 20.000000000000000
20.000000000000000 20.000000000000000
30.000000000000000 20.000000000000000
40.000000000000000 20.000000000000000
50.000000000000000 20.000000000000000
60.000000000000000 20.000000000000000
70.000000000000000 20.000000000000000
80.000000000000000 20.000000000000000
90.000000000000000 20.000000000000000
100.00000000000000 20.000000000000000
In der zu integrierenden Funktion sollte 'v' als 'y' gelesen werden. h. "f = - (gr) - ((c1/m) · y)". 'v' sollte in der Funktion überhaupt nicht referenziert werden. – RussF