Advertisement
Misipuk

NM_Lab9

Oct 22nd, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.47 KB | None | 0 0
  1. import numpy as np
  2. import math
  3. import pandas as pd
  4.  
  5. a, b, c, d, f = 0.3, 0.9, 0.7, 0.5, 0.5
  6. l1, l2 = 1.1, 1.1
  7.  
  8. eps = 1e-5
  9. n1, n2 = 5, 5
  10.  
  11. h1 = l1 / n1
  12. h2 = l2 / n2
  13.  
  14. def u(x, y):
  15.     return a * (x*x - y*y) + b*x*y + c*x + d*y + f
  16.  
  17. def ux(x, y):
  18.     return 2*a*x + b*y + c
  19.  
  20.  
  21. def uy(x, y):
  22.     return -2*a*y + b*x + d
  23.  
  24.  
  25. def bx(x, y):
  26.     if x == l1:
  27.         return u(l1, y)
  28.     if x == 0:
  29.         return ux(0, y)
  30.     return 0
  31.  
  32.  
  33. def by(x, y):
  34.     if y == l2:
  35.         return uy(x, l2)
  36.     if y == 0:
  37.         return u(x, 0) - uy(x, 0)
  38.     return 0
  39.  
  40.  
  41.  
  42. def norm(A, B):
  43.     sum = 0
  44.     for i in range(n1 + 1):
  45.         for j in range(n2+1):
  46.             sum += (A[i, j] - B[i, j]) ** 2
  47.  
  48.     return math.sqrt(sum)
  49.  
  50.  
  51. def iter(t1, t2, t3, t4):
  52.     c = ((h1 * h2) ** 2) / (2 * ((h1 ** 2) + (h2 ** 2)))
  53.     return c * ((t1 + t3) / (h1 ** 2) + (t2 + t4) / (h2 ** 2))
  54.  
  55.  
  56. inp = open("result.txt", "w")
  57.  
  58. X = [i*h1 for i in range(n1+1)]
  59. Y = [i*h2 for i in range(n2+1)]
  60.  
  61. M = np.zeros((n1+1, n2+1))
  62. for i in range(n2 + 1):
  63.     M[n1, i] = bx(l1, Y[i])
  64. T = np.copy(M)
  65. k = 0
  66.  
  67. T1 = [0 for i in range(n1+1)]
  68. T2 = [0 for i in range(n1+1)]
  69. T3 = [0 for i in range(n2+1)]
  70. inp.write("Iteration process:")
  71. while 1:
  72.     k += 1
  73.     T = np.copy(M)
  74.     for i in range(n1 + 1):
  75.         T1[i] = 2 * h2 * by(X[i], 0) + T[i, 1] - 2 * h2 * T[i, 0]
  76.         T2[i] = 2 * h2 * by(X[i], l2) + T[i, n2 - 1]
  77.     for i in range(n2+1):
  78.         T3[i] = -2* h1 * bx(0, Y[i]) + T[1, i]
  79.     M[0,0] = iter(T3[0], T[0, 1], T[1, 0], T1[0])
  80.     M[0, n2] = iter(T3[n2], T2[0], T[1, n2], T[0, n2-1])
  81.     for i in range(1, n1):
  82.         M[i, 0] = iter(T[i-1, 0], T[i, 1], T[i+1, 0], T1[i])
  83.         M[i, n2] = iter(T[i-1, n2], T2[i], T[i+1, n2], T[i, n2 - 1])
  84.     for j in range(1, n2):
  85.         M[0, j] = iter(T3[j], T[0, j+1], T[1, j], T[0, j - 1])
  86.     for i in range(1, n1):
  87.         for j in range(1, n2):
  88.             M[i, j] = iter(M[i-1, j], M[i, j+1], M[i + 1, j], M[i, j - 1])
  89.  
  90.  
  91.     norma = norm(M, T)
  92.     inp.write("\ni=" + str(k) + "  Norm = " + str(norma))
  93.     if norma <= eps:
  94.         break
  95.  
  96. P = np.zeros((n1+1, n2+1))
  97. for i in range(n1+1):
  98.     for j in range(n2+1):
  99.         P[i,j] = u(X[i], Y[j])
  100.  
  101. E = P - M
  102.  
  103. P1 = pd.DataFrame(P)
  104. M1 = pd.DataFrame(M)
  105. E1 = pd.DataFrame(E)
  106. writer = pd.ExcelWriter('output.xlsx')
  107. M1.to_excel(writer, 'Метод')
  108. P1.to_excel(writer, 'Точне значення')
  109. E1.to_excel(writer, 'Похибка')
  110. writer.save()
  111. writer.close()
  112.  
  113. inp.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement