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


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)