Загрузка данных


import numpy as np

# 1. Задание параметров сетки и границ
nx = 5
nt = 4

x1, xn = 0, 1
t1, tn = 0, 1  # (или y1, yn)

hx = (xn - x1) / (nx - 1)
ht = (tn - t1) / (nt - 1)

# Инициализация сетки U
u = [[1 for j in range(nt)] for i in range(nx)]

X = [hx * i for i in range(nx)]
T = [ht * j for j in range(nt)]

ti = [4 * 24 * t * (1 - t) for t in T]
psi = [14 * x * (1 - x) for x in X]

f = -368

u = np.array(u, dtype=float)

# Граничные и начальные условия
u[0, :] = ti
u[-1, :] = ti

u[:, 0] = psi
u[:, -1] = psi

e = 0.1  # Допустимая ошибка
z = 1.0  # Оценочная ошибка

uk = u.copy()
k = 0    # Счетчик итераций

# Итерационный цикл методом Зейделя / Пуассона
while z >= e:
    # Пересчет внутренних узлов
    for i in range(1, nx - 1):
        for j in range(1, nt - 1):
            u[i, j] = 0.25 * (u[i+1, j] + u[i-1, j] + u[i, j+1] + u[i, j-1] - (hx**2) * f)
            
    # Расчет погрешности
    z = np.max(np.abs(u - uk))
    uk = u.copy()
    k += 1

print(f"Решение сшлось за {k} итераций.")
print("Итоговая матрица u:")
print(np.round(u, 3))