import math
X0 = 0
X1 = 1
gamma = 0.6
m = -1.1
alpha = -1.3
beta = 0.6
M = -1.2
N = 1.3
h = 0.1
k = None
count = 10
def f(x):
return gamma*math.exp(m*x) + math.cos(gamma*x)
def fi(t):
return alpha*t+math.sin(beta*t)
def psi(t):
return math.exp(N*t)-M*math.sin(N+m*t)
def yavnSchema():
global k
k = h * h / 6
n = int((X1 - X0) / h)
u = [[0] * count for _ in range(n + 1)]
for i in range(count):
u[0][i] = fi(k * i)
u[n][i] = psi(k * i)
for i in range(n + 1):
u[i][0] = f(h * i)
for j in range(count - 1):
for i in range(1, n):
u[i][j + 1] = (u[i + 1][j] + 4 * u[i][j] + u[i - 1][j]) / 6.0
print("\nВычисления по явной схеме, шаг по времени={0:.5f}".format(k))
printHead()
for i in range(count):
print("t={0:.5f}:\t".format(i * k), end="")
for j in range(n + 1):
print("{0:.5f}\t".format(u[j][i]), end=" ")
print()
def neyavnSchema(s):
global k
k = h * h / s
n = int((X1 - X0) / h)
u = [[0] * count for _ in range(n + 1)]
a = [[0] * count for _ in range(n + 1)]
b = [[0] * count for _ in range(n + 1)]
for i in range(count):
u[0][i] = fi(k * i)
u[n][i] = psi(k * i)
for i in range(n + 1):
u[i][0] = f(h * i)
for j in range(count - 1):
a[1][j + 1] = 1.0 / (2 + s)
b[1][j + 1] = u[0][j + 1] + s * u[0][j]
for j in range(count - 1):
for i in range(1, n):
a[i][j + 1] = 1.0 / (2 + s + a[i - 1][j + 1])
b[i][j + 1] = a[i - 1][j + 1] * b[i - 1][j + 1] + s * u[i][j]
for i in range(n - 1, 0, -1):
u[i][j + 1] = a[i][j + 1] * (b[i][j + 1] + u[i + 1][j + 1])
print("\nВычисления по неявной схеме, шаг по времени={0:.5f}, s={1}".format(k, s))
printHead()
for i in range(count):
print("t={0:.5f}:\t".format(i * k), end=" ")
for j in range(n + 1):
print("{0:.5f}\t".format(u[j][i]), end=" ")
print()
def printHead():
x = X0
print("t: \t\t", end=" ")
while x < X1:
print("x={0:.1f} \t".format(x), end=" ")
x += h
print()
if __name__ == '__main__':
yavnSchema()
s = input("Введите s").split()
for i in s:
i = float(i)
neyavnSchema(i)