Advertisement
Guest User

Tu puta madre

a guest
Jan 17th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. --------- Solucion general de EDO ------------------
  2. a)
  3. x = var('x')
  4. y = function('y',x)
  5. ed = diff(y,x) == x + 3*y /(x+4)
  6.  
  7. sol_gen = desolve(ed,[y,x])
  8. show(sol_gen) // mostrar bonito
  9.  
  10. ---------- Solucion exacta del PVI -----------------
  11. b)
  12. sol_ex = desolve(ed,[y,x], ics=[1,1/2])
  13. show(sol_ex)
  14.  
  15. ---------- Valor exacto y(2) para 10 decimales -----
  16. c)
  17. sol_ex(2).n(digits=11)
  18.  
  19. ---------- Euler -----------------------------------
  20. d)
  21. def Euler(f, a, b, N, y0):
  22. h =(b-a)/N #paso
  23. nodos = [a] #Inicializamos una lista nodos con el n primer nodo
  24. aprox = [y0] #Inicializamos una lista aprox con la n condicióninicial
  25. for k in range(N):
  26. nodos.append(nodos[k]+h) # Siguiente nodo
  27. aprox.append(aprox[k]+h*f(nodos[k], aprox[k])) # Siguiente aproximacion
  28. return matrix(zip(nodos, aprox)) # Devolvemos en forma matricial cada nodo con su aproximación
  29.  
  30. def error(sol, metodo_numerico):
  31. filas = metodo_numerico.dimensions()[0]
  32. nodos = [n(metodo_numerico[0][0])]
  33. aprox = [n(metodo_numerico[0][1])]
  34. exact = [n(sol(metodo_numerico[0][0]))]
  35. error = [0]
  36. for k in range(filas-1):
  37. nodos.append(n(metodo_numerico[k+1][0]))
  38. aprox.append(n(metodo_numerico[k+1][1]))
  39. exact.append(n(sol(metodo_numerico[k+1][0])))
  40. error.append(n(abs(sol(metodo_numerico[k+1][0])-metodo_numerico[k+1][1])))
  41. print('Error global = %r' % n(max(error)))
  42. return matrix(zip(nodos, aprox, exact, error))
  43.  
  44. N = var('N')
  45. N = (3-1)/0.02
  46. f(x, y) = x+3*y/(x+4)
  47. euler1 = Euler(f, 1, 3, N, 1/2).n(digits=11)
  48. show(euler1)
  49. errorEuler1 = error(sol_ex, euler1.n(digits=22))
  50.  
  51. ----------------- Range Kuta -------------------
  52. e)
  53. def RK4(f,a,b,N,y0):
  54. h=(b-a)/N #paso
  55. nodos = [a] #Inicializamos una lista nodos con el n primer nodo
  56. aprox = [y0] #Inicializamos una lista aprox con la n condicióninicial
  57. for k in range(N):
  58. K1=f(nodos[k], aprox[k])
  59. K2=f(nodos[k]+0.5*h, aprox[k]+0.5*h*K1)
  60. K3=f(nodos[k]+0.5*h, aprox[k]+0.5*h*K2)
  61. K4=f(nodos[k]+h, aprox[k]+h*K3)
  62. nodos.append(nodos[k]+h) #Siguiente nodo
  63. yRK4=aprox[k]+h*(K1+2*K2+2*K3+K4)/6
  64. aprox.append(yRK4) #Siguiente aproximacion
  65. return matrix(zip(nodos, aprox)) #Devolvemos cada nodo con su aproximación
  66.  
  67. RK4_ej1 = RK4(f,1,3,N,1/2).n(digits=11)
  68. show(RK4_ej1)
  69. errorRK4_ej1 = error(sol_ex, RK4_ej1.n(digits=22))
  70.  
  71. ----------------- EDO segundo orden -------------
  72. a)
  73. x = var('x')
  74. y = function('y',x)
  75. edo2 = diff(y,x,2)-4*diff(y,x)+6*y == 10*e^(x/2)
  76. sol_gen2 = desolve(edo2,[y,x])
  77. show(sol_gen2)
  78.  
  79. b)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement