Red de conocimiento informático - Conocimiento del nombre de dominio - 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.

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.

Para utilizar el método RK, primero se debe obtener la ecuación diferencial ordinaria del problema y analizarla y resolverla en detalle. Debido a que el tema es muy simple, no entraré en él aquí. De todos modos, este tema es relevante.

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

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

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

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.