Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.82 KB | None | 0 0
  1. import numpy as np
  2. import math
  3. #from scipy.interpolate import lagrange
  4. #from scipy.interpolate import interp1d
  5.  
  6. a = 0.4
  7. k1 = 64
  8. k2 = 64
  9.  
  10. def u(x,t):
  11.     return np.sin(math.pi * (x - a * t)) + (x - a * t)**3
  12.  
  13. def getGrids(n_x, n_t, x_0 = 0., x_n = 1., t_0 =0., t_n = 1):
  14.     xGrid = np.linspace(x_0, x_n, n_x)
  15.     tGrid = np.linspace(t_0, t_n, n_t)
  16.     h, tau = xGrid[1], tGrid[1]
  17.     c = a * tau / h
  18.     if c <= 1:
  19.         return xGrid, tGrid, c/2
  20.     else:
  21.         print("Incorrect h and tau")
  22.         return None
  23.  
  24. def fillEdges(xGrid, tGrid):
  25.     lx, lt = len(xGrid), len(tGrid)
  26.     u1 = np.zeros((lx, lt))
  27.     u1[:,0] = [u(xGrid[i],tGrid[0]) for i in range(lx)]
  28.     u1[0] = [u(xGrid[0],tGrid[i]) for i in range(lt)]
  29.     #u1[-1] = [u(xGrid[-1],tGrid[i]) for i in range(lt)]
  30.     return u1
  31.  
  32. def fillReal(xGrid, tGrid):
  33.      lx, lt = len(xGrid), len(tGrid)
  34.      u1 = np.zeros((lx, lt))
  35.      u1 = [[u(xGrid[i], tGrid[j]) for j in range(lt)] for i in range(lx)]
  36.      return u1
  37.  
  38. def Laks(u1, xGrid, tGrid, c):
  39.     u2 = u1.copy()
  40.     lx, lt = len(xGrid) - 1, len(tGrid) - 1
  41.     xp = [xGrid[k] for k in range(lx - 4,lx)]
  42.     for j in range(lt):
  43.         for i in range(1 ,lx):
  44.             u2[i][j + 1] = u2[i + 1][j] * (0.5 - c) + u2[i - 1][j] * (0.5 + c)
  45.         fp = [u2[k][j] for k in range(lx - 4,lx)]
  46.         u2[-1][j + 1] = np.interp(xGrid[-1],xp, fp)
  47.         #print(u2, "\n\n")
  48.         #f = interp1d(xp, fp)
  49.         #u2[-1][j] = f(xGrid[-1])
  50.         #poly = lagrange(xp,fp)
  51.         #u2[-1][j] = poly(xGrid[-1])
  52.         #print(xp, fp)
  53.    
  54.     return u2
  55.        
  56.  
  57. xGrid, tGrid, c = getGrids(k1, k2)
  58. u1 = fillEdges(xGrid, tGrid)
  59. u2 = fillReal(xGrid, tGrid)
  60. u3 = Laks(u1, xGrid, tGrid, c)
  61. #print(u2, '\n')
  62. #print(u3)
  63. error = abs(u2 - u3).max()
  64. print('\nn_h = ', k1,'  n_t = ', k2)
  65. print('\nError = ', error)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement