La corriente del inductor y(t) para t≥0 se deriva para tener la expresión solo derivadas:
δtδy(t)+2y(t)+5∫−∞ty(τ)δτ=10μ(t)
Para t>0 que es donde transcurre el experimento, el escalón es una constante, se tiene que:
δt2δ2y(t)+2δtδy(t)+5y(t)=0
tomando las condiciones iniciales dadas para t=0, y(0)=2, y'(0)=–4
literal a
EL resultadoes perado es el planteamiento del problema. Se reescribe la ecuación con la nomenclatura simplificada y se resordena segun el modelo del método:
y′′=−2y′−5y
luego se sustituye la variable y se convierte a las ecuaciones:
z=y′=fx(t,y,z)z′=−2z−5y=gz(t,y,z)
se usa una tabla para llevar el registro de operaciones:
Se plantea las operaciones:
K1y = h * f(ti,yi,zi)
K1z = h * g(ti,yi,zi)
K2y = h * f(ti+h, yi + K1y, zi + K1z)
K2z = h * g(ti+h, yi + K1y, zi + K1z)
yi = yi + (K1y+K2y)/2
zi = zi + (K1z+K2z)/2
ti = ti + h
literal b
El resultado esperado es la aplicación correcta de los valores en las expresiones para al menos tres iteraciones usando h=0.01
Runge-Kutta 2do Orden tiene error de truncamiento O(h3)
por lo que el error está en el orden de (0.01)3 = 0.000001
Literal d
Se requiere presentar el resultado para el intervalo t entre [0,5]. Siendo el tamaño de paso h=0.01 que es pequeño, se requieren realizar (5-0)/0.01=500 iteraciones, que es más práctico realizarlas usando el algoritmo.
Instrucciones en Python
# Respuesta a entrada cero# solucion para (D^2+ D + 1)y = 0import numpy as np
import matplotlib.pyplot as plt
defrungekutta2_fg(f,g,x0,y0,z0,h,muestras):
tamano = muestras + 1
estimado = np.zeros(shape=(tamano,7),dtype=float)
# incluye el punto [x0,y0]
estimado[0] = [x0,y0,z0,0,0,0,0]
xi = x0
yi = y0
zi = z0
for i inrange(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,K1z,K2y,K2z]
return(estimado)
# PROGRAMA
f = lambda t,y,z: z
g = lambda t,y,z: -2*z -5*y + 0
t0 = 0
y0 = 2
z0 = -4
h = 0.01
tn = 5
muestras = int((tn-t0)/h)
tabla = rungekutta2_fg(f,g,t0,y0,z0,h,muestras)
ti = tabla[:,0]
yi = tabla[:,1]
zi = tabla[:,2]
# SALIDA
np.set_printoptions(precision=4)
print('ti, yi, zi, K1y, K1z, K2y, K2z')
print(tabla)
# GRAFICA
plt.plot(ti,yi, color = 'orange', label='y_RK(t)')
plt.ylabel('y(t)')
plt.xlabel('t')
plt.title('y(t) con Runge-Kutta 2do Orden d2y/dx2 ')
plt.legend()
plt.grid()
plt.show()