Ejercicio: 2Eva2023PAOII_T2 EDO Cable cuelga entre apoyos A y B
Literal a
La ecuación diferencial a resolver es:
\frac{d^2y}{dx^2} = \frac{w_0}{T_0} \Big[ 1+ \sin \Big(\frac{\pi x}{2l_B} \Big) \Big]donde w0 = 1 000 lbs/ft, T0. = 0.588345×106.
dy(0)/dx = 0 y lB=200 de la gráfica presentada.
Para usar Runge Kutta para segunda derivada:
z= y' = f(x,y,z) z' = (y')' = 0z + \frac{1000}{0.588345×10^6} \Big[ 1+ \sin \Big(\frac{\pi x}{2(200)} \Big) \Big] g(x,y,z) = \frac{1}{0.588345×10^3} \Big[ 1+ \sin \Big(\frac{\pi x}{2(200)} \Big) \Big]los valores iniciales para el ejercicio acorde al enunciado son: x0 = 0, y0=0, z0 = 0, con h=0.5
literal b
para itera 0
K1y = h*z = 0.5*0 = 0 K1z = (0.5)\frac{1}{0.588345×10^3} \Big[ 1+ \sin \Big(\frac{\pi (0)}{2(200)} \Big) \Big] = 0.0008498 K2y = h*(z+K1z) = (0.5) (0+0.00084984) = 0.0004249 K2z = (0.5)\frac{1}{0.588345×10^3} \Big[ 1+ \sin \Big(\frac{\pi (0+0.5)}{2(200)} \Big) \Big] =0.0008531 y = 0+\frac{0+0.0004249}{2} = 0.0002124 z = 0+\frac{0.0008498+0.0008531}{2} = 0.0008515 x = 0 + 0.5 = 0.5...
Desarrollar dos iteraciones adicionales como tarea.
Para las primeras iteraciones de un total de 400+1, los valores con Python y en resultados.txt :
estimado[xi,yi,zi,K1y,K2y,K1z,K2z]
[0.0000 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00]
[0.5000 2.124603761398499073e-04 8.515101601627471980e-04 0.000000000000000000e+00 4.249207522796998146e-04 8.498415045593996292e-04 8.531788157660947667e-04]
[1.0000 8.515101601627470896e-04 1.706357605799455881e-03 4.257550800813735990e-04 8.523444879644209281e-04 8.531788157660947667e-04 8.565160755073224913e-04]
[1.5000 1.918817981939305653e-03 2.564542259712321911e-03 8.531788028997279406e-04 1.281436840653389295e-03 8.565160755073224913e-04 8.598532323184093513e-04]
[2.0000 3.416052419875068892e-03 3.426063993239661116e-03 1.282271129856160955e-03 1.712197746015365740e-03 8.598532323184093513e-04 8.631902347362692754e-04]
...
literal c
resultado en archivo.txt al ejecutar el algoritmo.
literal d

Algoritmo con Python
# 2Eva_2023PAOII_T2 Cable cuelga entre apoyos A y B
import numpy as np
def rungekutta2_fg(f,g,x0,y0,z0,h,muestras):
tamano = muestras + 1
estimado = np.zeros(shape=(tamano,3+4),dtype=float)
# incluye el punto [x0,y0,z0]
estimado[0] = [x0,y0,z0,0,0,0,0]
xi = x0
yi = y0
zi = z0
for i in range(1,tamano,1):
K1y = h * f(xi,yi,zi)
K1z = h * g(xi,yi,zi)
K2y = h * f(xi+h, yi + K1y, zi + K1z)
K2z = h * g(xi+h, yi + K1y, zi + K1z)
yi = yi + (K1y+K2y)/2
zi = zi + (K1z+K2z)/2
xi = xi + h
estimado[i] = [xi,yi,zi,K1y,K2y,K1z,K2z]
return(estimado)
# PROGRAMA PRUEBA
# Ref Rodriguez 9.1.1 p335 ejemplo.
# prueba y'-y-x+(x**2)-1 =0, y(0)=1
# INGRESO
T0 = 0.588345e6
LB = 200
f = lambda x,y,z: z
g = lambda x,y,z: (1000/T0)*(1+np.sin(np.pi*x/(2*LB)))
x0 = 0
y0 = 0
z0 = 0
h = 0.5
muestras = 401
# PROCEDIMIENTO
puntosRK2 = rungekutta2_fg(f,g,x0,y0,z0,h,muestras)
xi = puntosRK2[:,0]
yiRK2 = puntosRK2[:,1]
# SALIDA
np.set_printoptions(precision=4)
print('estimado[xi,yi,zi,K1y,K2y,K1z,K2z]')
print(puntosRK2)
np.savetxt("tablaRk2.txt",puntosRK2)
# Gráfica
import matplotlib.pyplot as plt
plt.plot(xi[0],yiRK2[0],
'o',color='r', label ='[x0,y0]')
plt.plot(xi[1:],yiRK2[1:],
color='m',
label ='y Runge-Kutta 2 Orden')
plt.title('EDO: Solución con Runge-Kutta 2do Orden')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid()
plt.show()