Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.27 KB | None | 0 0
  1. import numpy
  2. from math import sqrt
  3. import sys
  4. from sympy import *
  5.  
  6.  
  7. T = 20
  8. N = 200
  9. x0 = 3
  10. eps = 1e-4
  11.  
  12. #x[i]=x[i-1]+h*f(x[i-1], t[i-1])
  13.  
  14. def ExplicitSchemeMethod1(N, T, x0):
  15.     h = T/N
  16.     x1 = x0
  17.     t = numpy.linspace(0, T, N+1)
  18.     x_exact = exactSolution(t[0])    
  19.     header = str('%4s| %9s| %8s| %9s| %8s|' % ('N', 't', 'x_exact', 'x1', 'x2'))
  20.     table = []
  21.  
  22.     for i in range(len(t)):
  23.         table.append(
  24.             str('%4d| %8.4f |%8.4f | %8.4f | %8.4f|' % (i, t[i], x_exact, x1, x1))
  25.         )
  26.         if (i != 0):
  27.             x1 = x1 + h * f(x1, t[i-1])
  28.             x_exact = exactSolution(t[i])
  29.  
  30.     return header, table
  31. #x[i+1]=x[i-1]+ 2*h*f(x[i], t[i])
  32.  
  33.  
  34. def ExplicitSchemeMethod2(N, T, x0):    
  35.     table = []
  36.     h = T/N
  37.     t = numpy.linspace(0, T, N+1)
  38.     x2 = x0
  39.     header = str('%3s| %8s | %8s |' % ('N', 't', 'x3') + '\n')  
  40.  
  41.     for i in range(len(t)):
  42.         table.append(
  43.             str('%4d| %8.4f |%8.4f |' % (i, t[i],  x2))
  44.         )
  45.         if (i == 0):
  46.             x2_prev_i = x0
  47.             continue
  48.  
  49.         if (i == 1):
  50.             x2 = x0
  51.             continue
  52.  
  53.         if (i > 1):
  54.             x2_prev_i_1 = x2  # c предыдущего шага нашли и запомнили
  55.  
  56.             x2 = x2_prev_i + 2*h*f(x2, t[i])
  57.  
  58.             x2_prev_i = x2_prev_i_1  # запомнили как последующий для вычисления
  59.  
  60.     return header, table
  61. # Implicit Scheme
  62.  
  63.  
  64. def ImplicitScheme(N, T, x0, eps):
  65.  
  66.     h = T/N
  67.     x_next, x_prev, i = x0, x0+1, 0
  68.     while(numpy.abs(x_next-x_prev) > eps) and i <= N:
  69.         t = i*h
  70.         x_next = x_prev - f(x_prev, t)
  71.         i = i+1
  72.     return x_next, t
  73.  
  74. def f(x, t):
  75.     return pow(t, 2)/x
  76.  
  77.  
  78. def df(x, t):
  79.     return diff(f(x, t), x)
  80.  
  81.  
  82. def exactSolution(t):
  83.     return sqrt(2/3*pow(t, 3)+9)
  84.  
  85.  
  86. def printTable(header1, header2, leftHalth, rightHalth):
  87.     delimeter = '  :)   '
  88.     print(header1, delimeter, header2)
  89.    
  90.     for i in range(len(leftHalth)):
  91.         print(leftHalth[i], delimeter, rightHalth[i])
  92.  
  93. if __name__ == '__main__':
  94.     leftHeader, leftHalth = ExplicitSchemeMethod1(N, T, x0)
  95.     rightHeader, rightHalth = ExplicitSchemeMethod2(N, T, x0)
  96.     printTable(leftHeader, rightHeader, leftHalth, rightHalth)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement