Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import math
- import pandas as pd
- a, b, c, d, f = 0.3, 0.9, 0.7, 0.5, 0.5
- l1, l2 = 1.1, 1.1
- eps = 1e-5
- n1, n2 = 5, 5
- h1 = l1 / n1
- h2 = l2 / n2
- def u(x, y):
- return a * (x*x - y*y) + b*x*y + c*x + d*y + f
- def ux(x, y):
- return 2*a*x + b*y + c
- def uy(x, y):
- return -2*a*y + b*x + d
- def bx(x, y):
- if x == l1:
- return u(l1, y)
- if x == 0:
- return ux(0, y)
- return 0
- def by(x, y):
- if y == l2:
- return uy(x, l2)
- if y == 0:
- return u(x, 0) - uy(x, 0)
- return 0
- def norm(A, B):
- sum = 0
- for i in range(n1 + 1):
- for j in range(n2+1):
- sum += (A[i, j] - B[i, j]) ** 2
- return math.sqrt(sum)
- def iter(t1, t2, t3, t4):
- c = ((h1 * h2) ** 2) / (2 * ((h1 ** 2) + (h2 ** 2)))
- return c * ((t1 + t3) / (h1 ** 2) + (t2 + t4) / (h2 ** 2))
- inp = open("result.txt", "w")
- X = [i*h1 for i in range(n1+1)]
- Y = [i*h2 for i in range(n2+1)]
- M = np.zeros((n1+1, n2+1))
- for i in range(n2 + 1):
- M[n1, i] = bx(l1, Y[i])
- T = np.copy(M)
- k = 0
- T1 = [0 for i in range(n1+1)]
- T2 = [0 for i in range(n1+1)]
- T3 = [0 for i in range(n2+1)]
- inp.write("Iteration process:")
- while 1:
- k += 1
- T = np.copy(M)
- for i in range(n1 + 1):
- T1[i] = 2 * h2 * by(X[i], 0) + T[i, 1] - 2 * h2 * T[i, 0]
- T2[i] = 2 * h2 * by(X[i], l2) + T[i, n2 - 1]
- for i in range(n2+1):
- T3[i] = -2* h1 * bx(0, Y[i]) + T[1, i]
- M[0,0] = iter(T3[0], T[0, 1], T[1, 0], T1[0])
- M[0, n2] = iter(T3[n2], T2[0], T[1, n2], T[0, n2-1])
- for i in range(1, n1):
- M[i, 0] = iter(T[i-1, 0], T[i, 1], T[i+1, 0], T1[i])
- M[i, n2] = iter(T[i-1, n2], T2[i], T[i+1, n2], T[i, n2 - 1])
- for j in range(1, n2):
- M[0, j] = iter(T3[j], T[0, j+1], T[1, j], T[0, j - 1])
- for i in range(1, n1):
- for j in range(1, n2):
- M[i, j] = iter(M[i-1, j], M[i, j+1], M[i + 1, j], M[i, j - 1])
- norma = norm(M, T)
- inp.write("\ni=" + str(k) + " Norm = " + str(norma))
- if norma <= eps:
- break
- P = np.zeros((n1+1, n2+1))
- for i in range(n1+1):
- for j in range(n2+1):
- P[i,j] = u(X[i], Y[j])
- E = P - M
- P1 = pd.DataFrame(P)
- M1 = pd.DataFrame(M)
- E1 = pd.DataFrame(E)
- writer = pd.ExcelWriter('output.xlsx')
- M1.to_excel(writer, 'Метод')
- P1.to_excel(writer, 'Точне значення')
- E1.to_excel(writer, 'Похибка')
- writer.save()
- writer.close()
- inp.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement