Guest User

Untitled

a guest
Dec 11th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. from pylab import *
  2. from numpy import *
  3.  
  4. h = 0.1
  5. x = array([-0.24, -.10, 0.00, 0.10, 0.20, 0.30, 0.40, 0.50, 0.60, 0.75, 0.97])
  6. t = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
  7.  
  8. def F(t):
  9. return 3*cos(3*t) - 2*sin(3*t)
  10.  
  11. def g(x, t, h, i):
  12. x2 = (x[i-1]-2.0*x[i]+x[i+1])/(h**2)
  13. x1 = (x[i+1] - x[i-1])/(2*h)
  14. x0 = x[i]
  15. return (2.0*x2) - (3.0*(x1**2)/4.0) + 3.0*x0 - F(t[i])
  16.  
  17. def par1(h=h):
  18. return -4.0/h**2 + 3.0
  19.  
  20. def par2(p1, p2, h=h):
  21. return 2.0/h**2 - (6.0/(16.0*h**2))*(p2-p1)
  22.  
  23. def Jac(x, h=h):
  24. Jacob = array([[par1(),par2(x[0],x[2]),0,0,0,0,0,0,0],
  25. [par2(x[1],x[3]),par1(),par2(x[1],x[3]),0,0,0,0,0,0],
  26. [0,par2(x[2],x[4]),par1(),par2(x[2],x[4]),0,0,0,0,0],
  27. [0,0,par2(x[3],x[5]),par1(),par2(x[3],x[5]),0,0,0,0],
  28. [0,0,0,par2(x[4],x[6]),par1(),par2(x[4],x[6]),0,0,0],
  29. [0,0,0,0,par2(x[5],x[7]),par1(),par2(x[5],x[7]),0,0],
  30. [0,0,0,0,0,par2(x[6],x[8]),par1(),par2(x[6],x[8]),0],
  31. [0,0,0,0,0,0,par2(x[7],x[9]),par1(),par2(x[7],x[9])],
  32. [0,0,0,0,0,0,0,par2(x[8],x[10]),par1()]])
  33. return Jacob
  34.  
  35. def corr(x, t=t):
  36. xnew = zeros((9,))
  37. for i in range(1,10):
  38. xnew[i-1] = -g(x, t, h, i)
  39. return xnew
  40.  
  41. def corr_solver(x, t=t):
  42. Jacob = Jac(x)
  43. xnew = corr(x)
  44. return solve(Jacob, xnew)
  45.  
  46. def damp(x,d):
  47. P = x
  48. P[1:-1] = (1/(2**(1.0*d)))*corr_solver(x) + array(x[1:-1])
  49. return P
  50.  
  51. def fdam(x, t, h, d):
  52. X = norm(corr(damp(x,d)))
  53. return X
  54.  
  55. def guess(x, t, h):
  56. for d in range(0,100):
  57. P = damp(x,d)
  58. if fdam(x, t, h, d)<(1-1/(2**(1.0*d+2)))*norm(array(corr(P))):
  59. break
  60. return damp(x,d)
  61.  
  62. def Newton(P, tol=10**(-9)):
  63. iterations = 0
  64. while norm(corr_solver(P))>tol:
  65. P[1:-1] += corr_solver(P)
  66. iterations += 1
  67. return P
  68.  
  69. def Damped_Newton(x, t=t, h=h):
  70. W = guess(x, t, h)
  71. while norm(W - x)>10**(-9):
  72. x = W
  73. return x
  74.  
  75. print Damped_Newton(x)
  76. print "done"
  77. plot(t,Damped_Newton(x),'o')
  78. title('Position vs Time for spring damped system')
  79. hold('true')
  80. xlabel('Time (seconds)')
  81. ylabel('Position (meters)')
  82. show()
  83. print "Done"
Add Comment
Please, Sign In to add comment