Advertisement
Ryuketzu

Untitled

Apr 27th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.36 KB | None | 0 0
  1. %matplotlib inline
  2. import matplotlib.pyplot as plt #Paquete para graficar
  3. import numpy as np
  4. from numpy import linalg
  5. import scipy as sp
  6. from scipy.optimize import broyden2
  7.  
  8. # condiciones iniciales
  9. ya=1 # valor de la funcion en el borde
  10. yb=3 # valor de la funcion en el borde
  11. a=0 # inicio intervalo
  12. b=1 # fin intervalo
  13. n=100 # numero de intervalos utilizados en solver
  14. h=(b-a)/n
  15. solucion=np.zeros(n+1)
  16.  
  17. # BVP -> IVP
  18. def Y_prima(u, y, x):
  19.     Y = np.zeros(2)
  20.     Y[0] = y**2+np.sin(x)
  21.     Y[1] = u
  22.     return Y
  23.  
  24. # Euler's method
  25. def euler_method(a, b, n, Y0, Yprima):
  26.     Yi = Y0
  27.     for i in range(n+1):
  28.         solucion[i]=Yi[1]
  29.         Yi = Yi + h*Yprima(Yi[0], Yi[1], i*h+a)
  30.     solucion[i]=Yi[1]
  31.     return Yi
  32.  
  33.  
  34. # Función error a la que debemos encontrar raíces
  35. def F(s):
  36.     Y_0=np.array((s, ya))
  37.     yaprox=euler_method(a, b, n, Y_0, Y_prima)
  38.     return yaprox[1]-yb  
  39.  
  40.  
  41. s=1
  42. # Ejemplo de la funcion error
  43. print("Error usando s={}: {}".format(s,F(s)))
  44.  
  45.  
  46. # Root finder
  47. print("Raíz encontrada por método Broyden: {}".format(broyden2(F,10)))
  48. alpha=broyden2(F,10)
  49.  
  50. # Aplicación de solver con la raíz encontrada
  51. Ysol=euler_method(a, b, n, np.array((alpha,1)), Y_prima)
  52. print("Solución de BVP | y({})={} | y'({})={}".format(b,Ysol[1],b,Ysol[0]))
  53.  
  54. # Grafico solucion
  55. plt.plot(np.arange(a,b+h,h), solucion,'r',label='p = 0')
  56. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement