Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.34 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. import matplotlib.pyplot as plt
  3.  
  4. def p(x):
  5.     return 2.0
  6.  
  7. def q(x):
  8.     return 1.0 / x
  9.  
  10. def f(x):
  11.     return -3.0
  12.  
  13. sigma1, sigma2 = 1.0, 0.5
  14. gamma1, gamma2 = 0.0, -1.0
  15. delta1, delta2 = 2.0, 1.0
  16.  
  17.  
  18. def solve():
  19.     N = 100
  20.     l, r = 0.2, 0.5
  21.     h = (r - l) / N
  22.  
  23.     def x(i):
  24.         return l + i * h
  25.  
  26.     F = [-2.0 * h * h * f(x(i))         for i in range(N + 1)]
  27.     A = [2.0 - p(x(i)) * h              for i in range(N + 1)]
  28.     C = [2.0 * q(x(i)) * h * h - 4.0    for i in range(N + 1)]
  29.     B = [2.0 + p(x(i)) * h              for i in range(N + 1)]
  30.  
  31.     p0 = gamma1 / (gamma1 - sigma1 * h)
  32.     q0 = h * delta1 / (sigma1 * h - gamma1)
  33.     pn = gamma2 / (gamma2 + sigma2 * h)
  34.     qn = h * delta2 / (sigma2 * h + gamma2)
  35.  
  36.     F[1] -= A[1] * q0
  37.     C[1] += A[1] * p0
  38.     F[N - 1] -= B[N - 1] * qn
  39.     C[N - 1] += B[N - 1] * pn
  40.  
  41.     alpha = [0, p0]
  42.     beta = [0, q0]
  43.  
  44.     for i in range(1, N):
  45.         alpha.append(-B[i] / (A[i] * alpha[i] + C[i]))
  46.         beta.append((F[i] - A[i] * beta[i]) / (A[i] * alpha[i] + C[i]))
  47.    
  48.     y = [0] * (N + 1)
  49.     y[N] = (qn + pn * beta[N]) / (1.0 - pn * alpha[N])
  50.  
  51.     for i in range(N - 1, -1, -1):
  52.         y[i] = alpha[i + 1] * y[i + 1] + beta[i + 1]
  53.    
  54.     xl = [x(i) for i in range(N + 1)]
  55.     plt.plot(xl[1:], y[1:])
  56.     plt.show()
  57.  
  58. solve()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement