Cómo utilizar el método Runge-Kutta para resolver problemas mecánicos, gracias. El tema está en el libro y requiere procedimientos detallados, incluido el dibujo.
v'=g-k*v^2/m
Donde v' es la derivada de la velocidad con respecto al tiempo, es decir, la aceleración.
Utilice el método RK4, debido a que la ecuación diferencial ordinaria solo está relacionada con V y no directamente con T, por lo que el método RK4 se puede escribir simplemente como
k1=f(v (n))
k2=f(v(n) h/2*k1)
k3=f(v(n) h/2*k2)
k4 =f(v(n) h*k3)
v(n 1)= v(n) h/6 *(k 1 2k 2 2k 3 k4)
Según la pregunta, si el valor inicial v(0)=0 (la velocidad inicial es 0), se puede resolver.
Como no tenía VB instalado a mano, reescribí el programa en lenguaje Tcl. Tcl/tk funciona bien. De todos modos, puedes consultarlo. Todas las ideas de programación de lenguajes son similares.
Adjunto lo que Tcl/Tk escribió primero:
Establecer g 9.81
Establecer k 29.4
Establecer m 75
#Definir funciones diferenciales ordinarias
Proceso f {v}
Global General Motors Corporation
Establecer f[expresión $g-$k*$ v **2/$m]
}
#La siguiente es la parte principal del cálculo, llamando a la función anterior.
Establecer h 0.1
Establecer v(0) 0
Establecer n 0
Establecer dv 1
Y { $ dv gt10**-3} {
establecer k1 [f $v($n)]
establecer k2[f[expr $ v($ n) $ h /2 * $ k 1]]
establecer k3 [f [expr $v($n) $h / 2 * $k2]]
establecer k4 [f [ expr $ v($n) $h * $k3]]
Establecer nn[expresión $n 1]
Establecer v($ nn)[expresión v($ n ) $ h/6 *(k 1 2 * $ k2 2 * $ k3 $ k4)]
Colocar [expresión $h * $n], $v($nn)
set dv[expr ABS($ v($ n)-v($ nn))]
Incremento
}
Resultados de la operación de Tcl/Tk :
Tiempo, velocidad
0.1 0.968603324806
0.2 1.86719840948
0.3 2.64465167179
0.4 3.27770943734
0,5 3,76821957195
0,6 4,13386114838
0,7 4,39864064439
0,8 4,58638649863
0,9 4,71753254441
1,0 4.80818704498
1.1 4.87039891085
1.2 4.9128797342
1.3 4.94178878159
1.4 4.96141640673
1.5 4.974721 9
1.6 4.98373107432
1.7 4.98982752078
1.8 4.99395074243
1.9 4.99673848624
2.0 4.99862288083
2.1 4 .99989645764
2.2 5.00075712243
2.3 5.00133870705
2.4 5.00173168802
2.5 5.00199721975
2.6 2 p>
2.7 5.00229785401
2.8 5.0023797583
2.9 5.002435097
3.0 5.00247248647
3.1 5.00249774851
3,2 5,002 51481666
3,3 5,00252634865
3,4 5,00253414015
3,5 5,00253940442
3,6 5,00254296119
3,7 4536429 p>
3.8 5.00254698792
3.9 5.00254808492
4.0 5.00254882609
4
.1 5.00254932686
4.2 5.0025496652
4.3 5.0025498938
4.4 5.00255004825
4.5 5.0025501526
4.6 5.00255 1< / p>
4.7 5.00255027074
4.8 5.00255030293
4.9 5.00255032467
5.0 5.00255033936
5.1 5.00255034929
5,2 5,002550356
5,3 5,00255036053
5,4 5,00255036359
5,5 5,00255036566
5,6 5,00255036706
5,7 5,002 368
5.8 5.00255036864
5.9 5.00255036907
6.0 5.00255036936
6.1 5.00255036956
6.2 5.00255036969
6,3 5,00255036978
6,4 5,00255036984
6,5 5,00255036988
6,6 5,00255036991
6,7 5,00255036993
6,8 5,00255 036994
6.9 5.00255036995
7.0 5.00255036996
7.1 5.00255036996
Para ser precisos, la velocidad máxima es de 5,5 millas. 56500.68866868661
El siguiente es el código VB (no depurado):
Constante privada g = 9,81
Constante privada k = 29,4
Constante privada m = 75
La función f (ByVal v) tiene la misma longitud
f = g - k * v ^ 2 / m
Fin de función
Sub-RK4() privado
Las dimensiones h, k1, k2, k3, k4, dv tienen la misma longitud
La dimensión v(100) es la misma longitud
h = 0.1
v(0) = 0
n = 0
dv = 1
dv gt10 ^ -5 p>
k1 = f(v(n))
k2 = f(v(n) h / 2 * k1)
k3 = f(v(n) h / 2 * k2)
k4 = f(v(n) h * k3)
v(n 1)= v(n ) h/6 *(k 1 2 * k2 2 * k3 k4)
Imprimir v(n 1)
dv = Abs(v(n) - v(n 1) )
n = n 1
Bucle
Conector final
Creo que es más fácil escribir directamente en Matlab o dibujar en Excel , así que no escribiré el código relevante. Después de todo, esa parte es mucho más complicada.