Advertisement
myloyo

№11 Решение интегрального уравнения Фредгольма в случае вырожденного ядра

Dec 12th, 2024
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.29 KB | None | 0 0
  1. eps = 1e-6
  2. V = 8.0
  3.  
  4. def f(x):
  5.     return V * (4 / 3 * x + 1 / 4 * x ** 2 + 1 / 5 * x ** 3)
  6.  
  7. def check_y(x):
  8.     return V * x
  9.  
  10. def gauss(sole):
  11.     n = len(sole)
  12.     m = len(sole[0])
  13.     x_coords = list(range(n))
  14.  
  15.     for j in range(m - 1):
  16.         mx = j
  17.         for i in range(j, n):
  18.             if abs(sole[i][j]) > abs(sole[mx][j]):
  19.                 mx = i
  20.  
  21.         if abs(sole[mx][j]) < eps:
  22.             continue
  23.  
  24.         sole[j], sole[mx] = sole[mx], sole[j]
  25.  
  26.         mx = j
  27.         for i in range(j, n):
  28.             if abs(sole[j][i]) > abs(sole[j][mx]):
  29.                 mx = i
  30.  
  31.         x_coords[j], x_coords[mx] = x_coords[mx], x_coords[j]
  32.         for i in range(n):
  33.             sole[i][j], sole[i][mx] = sole[i][mx], sole[i][j]
  34.  
  35.         if abs(sole[j][mx]) < eps:
  36.             raise ValueError("Division by zero!")
  37.  
  38.         for i in range(j + 1, n):
  39.             d = sole[i][j] / sole[j][j]
  40.             for k in range(m):
  41.                 sole[i][k] -= sole[j][k] * d
  42.  
  43.     for j in range(n - 1, -1, -1):
  44.         for i in range(j - 1, -1, -1):
  45.             d = sole[i][j] / sole[j][j]
  46.             sole[i][j] -= sole[j][j] * d
  47.             sole[i][m - 1] -= sole[j][m - 1] * d
  48.  
  49.     s = [0] * n
  50.     for i in range(n):
  51.         s[x_coords[i]] = sole[i][m - 1] / sole[i][i]
  52.  
  53.     return s
  54.  
  55. def gauss_with_b(A, B):
  56.     for i in range(len(A)):
  57.         A[i].append(B[i])
  58.     return gauss(A)
  59.  
  60. def print_results(vx, vy):
  61.     k = 5
  62.     for i in range(0, len(vx), k):
  63.         m = min(i + k, len(vx))
  64.         print("\t".join(f"{vx[j]:.5f}" for j in range(i, m)))
  65.         print("\t".join(f"{vy[j]:.5f}" for j in range(i, m)))
  66.         print("\t".join(f"{check_y(vx[j]):.5f}" for j in range(i, m)))
  67.         print("\t".join(f"{vy[j] - check_y(vx[j]):.5f}" for j in range(i, m)))
  68.         print()
  69.  
  70. def solve():
  71.     n = 3
  72.     A = [[1 / (i + j + 3) for j in range(n)] for i in range(n)]
  73.     for i in range(n):
  74.         A[i][i] += 1
  75.  
  76.     B = [4 * V / 3 / (i + 3) + V / 4 / (i + 4) + V / 5 / (i + 5) for i in range(n)]
  77.     vq = gauss_with_b(A, B)
  78.  
  79.     m = 3
  80.     l, r = 0, 1
  81.     h = (r - l) / (m - 1)
  82.     vx = [l + i * h for i in range(m)]
  83.  
  84.     vy = [f(x) - sum(vq[k] * x ** (k + 1) for k in range(n)) for x in vx]
  85.     print_results(vx, vy)
  86.  
  87.  
  88. if __name__ == "__main__":
  89.     solve()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement