Численное решение уравнений в частных производных
Применяя метод сеток с шагом h, решить уравнение Лапласа в квадрате с вершинами A(0,0), B(0,1), C(1,1), D(1,0). Предельные условия и шаг приведены в табл.1. Вывести график решения
Мой код: При h=0.2 все хорошо но мне надо h=0.05 при котором график не выводится. Помогите решить проблему!!!Пожалуйста!
import numpy as np
import sympy as sym
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import mplcyberpunk
plt.style.use("cyberpunk")
h = 0.2
X = []
C = []
for i in range(int(1/h + 1)):
x = h * i
a = []
for j in range(int(1/h + 1)):
y = h * j
if y == 0:
a.append(y-y**2)
elif x == 0:
a.append(0)
elif y == 1:
a.append(0)
elif x == 1:
a.append(np.sin(np.pi*y))
else:
a.append(sym.Symbol('v' + str(i) + str(j)))
C.append(sym.Symbol('v' + str(i) + str(j)))
X.append(a)
print("X", X)
print("\n C", len(C), C)
equations = []
for i in range(1, int(1/h)):
x = h * i
for j in range(1, int(1/h)):
y = h * j
equations.append(sym.Eq(4 * X[i][j] - X[i+1][j] - X[i-1][j] - X[i][j+1] - X[i][j-1], 0))
print("equations", len(equations), "\n", equations)
ans = sym.solve(equations, C)
print("\n ans", ans)
for i in range(1, int(1/h)):
x = h * i
for j in range(1, int(1/h)):
y = h * j
X[i][j] = float(round(ans[sym.Symbol('v' + str(i) + str(j))], 3))
X = np.array(X)
print(X)
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
x = np.arange(0, 1+h, h)
y = np.arange(0, 1+h, h)
x, y = np.meshgrid(x, y)
surf = ax.plot_surface(x, y, X, cmap=cm.jet,
linewidth=0, antialiased=False)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
fig.savefig('Laplas.png', dpi=300, bbox_inches='tight')

