Пример #1
0
def jacobie_method(matrix, vector, precision, norm, n):
    # norm can be maximum or euclidean
    x_error = create_vector(n)
    x = create_vector(n)

    for i in range(n):
        x[i] = 0

    for i in range(n):
        vector[i] = vector[i] / matrix[i][i]

        for j in range(n):
            if i == j:
                continue
            matrix[i][j] /= matrix[i][i]
            x_error[i] = float("inf")

    steps = 0

    # while norm(x_error) > precision and steps < MAX_STEPS:
    while norm(count_system_error(matrix, x, vector, n)) > precision and steps < MAX_STEPS:
        print(norm(count_system_error(matrix, x, vector, n)))
        steps += 1
        for i in range(n):
            temp = vector[i]
            for j in range(n):
                if i == j:
                    continue
                temp -= matrix[i][j] * x[j]

            x_error[i] = x[i] - temp
            x[i] = temp

    print("steps: " + str(steps))
    return x
Пример #2
0
def SOR(matrix, B, omega, n, eps):
    x_error = create_vector(n)
    x = create_vector(n)
    temp2 = create_vector(n)

    iteration = create_matrix(n)
    temp = create_matrix(n)

    for i in range(n):
        for j in range(n):
            if j > i:
                iteration[i][j] = 0
            elif j == i:
                iteration[i][j] = (1.0 / omega) * matrix[i][j]
            else:
                iteration[i][j] = (-1) * matrix[i][j]
    iteration = reverse_matrix(iteration, n)

    for i in range(n):
        for j in range(n):
            temp[i][j] = 0
            for k in range(n):
                temp[i][j] += iteration[i][k] * matrix[k][j]

    for i in range(n):
        temp2[i] = 0
        for j in range(n):
            temp2[i] += iteration[i][j] * B[j]

    for i in range(n):
        for j in range(n):
            if i == j:
                iteration[i][j] = 1 - temp[i][j]
            else:
                iteration[i][j] = (-1) * temp[i][j]
        B[i] = temp2[i]

    for i in range(n):
        x_error[i] = 1e+300
        x[i] = 1

    epsilon = eps
    steps = 0

    while maximum_norm(x_error) > epsilon and steps < MAX_STEPS:
        steps += 1
        for i in range(n):
            for j in range(n):
                temp3 = 0
                for k in range(n):
                    temp3 += iteration[j][k] * x[k]
                temp3 += B[j]
                x_error[j] = x[j] - temp3
                x[j] = temp3

    # print("steps:" + str(steps))
    return x, steps
Пример #3
0
def SOR(matrix, B, omega, n, eps):
    x_error = create_vector(n)
    x = create_vector(n)
    temp2 = create_vector(n)

    iteration = create_matrix(n)
    temp = create_matrix(n)

    for i in range(n):
        for j in range(n):
            if j > i:
                iteration[i][j] = 0
            elif j == i:
                iteration[i][j] = (1.0/omega) * matrix[i][j]
            else:
                iteration[i][j] = (-1) * matrix[i][j]
    iteration = reverse_matrix(iteration, n)

    for i in range(n):
        for j in range(n):
            temp[i][j] = 0
            for k in range(n):
                temp[i][j] += iteration[i][k] * matrix[k][j]

    for i in range(n):
        temp2[i] = 0
        for j in range(n):
            temp2[i] += iteration[i][j] * B[j]

    for i in range(n):
        for j in range(n):
            if i == j:
                iteration[i][j] = 1 - temp[i][j]
            else:
                iteration[i][j] = (-1) * temp[i][j]
        B[i] = temp2[i]

    for i in range(n):
        x_error[i] = 1e+300
        x[i] = 1

    epsilon = eps
    steps = 0

    while maximum_norm(x_error) > epsilon and steps < MAX_STEPS:
        steps += 1
        for i in range(n):
            for j in range(n):
                temp3 = 0
                for k in range(n):
                    temp3 += iteration[j][k] * x[k]
                temp3 += B[j]
                x_error[j] = x[j] - temp3
                x[j] = temp3

    # print("steps:" + str(steps))
    return x, steps
Пример #4
0
def calculate_system(n,  initial_vector, function_for_solution, derivative_for_solution):
    epsilon = 1e-10
    steps = 0

    solution = initial_vector
    previous = create_vector(n)
    for i in range(n):
        previous[i] = initial_vector[i]

    # while (steps == 0) or (maximum_norm(vector_difference(solution, previous)) > epsilon and steps < MAX_STEPS):
    while maximum_norm(calculate_solution(solution, n)) > epsilon and steps < MAX_STEPS:
        steps += 1

        function = function_for_solution(solution, n)
        derivative = derivative_for_solution(solution, n)

        for i in range(n):
            previous[i] = solution[i]

        temp = gaussian_elimination(matrix_a=derivative, vector_b=function, n=n)
        if temp is None:
            return
        # print(temp)
        for i in range(n):
            temp[i] += previous[i]
            solution[i] = temp[i]

    # print(previous)
    # print(solution)
    # print(vector_difference(solution, previous))

    return steps, solution
Пример #5
0
def trigonometric_approximation(n, m, points, values):
    vals = create_vector(2 * m + 1)
    vals[0] = 0
    for i in range(n):
        vals[0] += values[i]

    vals[0] *= 2.0 / n

    for k in range(1, m + 1, 1):
        a = 0
        for i in range(n):
            a += values[i] * math.cos(k * ((2 * math.pi) /
                                           (6 * math.pi)) * points[i])
        a *= 2.0 / n

        b = 0
        for i in range(n):
            b += values[i] * math.sin(k * ((2 * math.pi) /
                                           (6 * math.pi)) * points[i])
        b *= 2.0 / n

        vals[2 * k - 1] = a
        vals[2 * k] = b

    return vals
def function_for_solution(solution, n):
    x = solution[0]
    y = solution[1]
    z = solution[2]
    function = create_vector(n)

    function[0] = (x*x + y*y - z*z - 1) * (-1)
    function[1] = (x - 2*y*y*y + 2*z*z + 1) * (-1)
    function[2] = (2*x*x + y - 2*z*z - 1) * (-1)

    return function
def function_for_solution(solution, n):
    x = solution[0]
    y = solution[1]
    z = solution[2]
    function = create_vector(n)

    function[0] = (x * x + y * y - z * z - 1) * (-1)
    function[1] = (x - 2 * y * y * y + 2 * z * z + 1) * (-1)
    function[2] = (2 * x * x + y - 2 * z * z - 1) * (-1)

    return function
Пример #8
0
def calculate_solution(vector, n):
    x = vector[0]
    y = vector[1]
    z = vector[2]

    result = create_vector(n)

    result[0] = x*x + y*y - z*z - 1
    result[1] = x - 2*y*y*y + 2*z*z + 1
    result[2] = 2*x*x + y - 2*z*z - 1

    return result
Пример #9
0
def jacobie_method(matrix, vector, precision, norm, n):
    # norm can be maximum or euclidean
    x_error = create_vector(n)
    x = create_vector(n)

    for i in range(n):
        x[i] = 0

    for i in range(n):
        vector[i] = vector[i] / matrix[i][i]

        for j in range(n):
            if i == j:
                continue
            matrix[i][j] /= matrix[i][i]
            x_error[i] = float("inf")

    steps = 0

    # while norm(x_error) > precision and steps < MAX_STEPS:
    while norm(count_system_error(matrix, x, vector,
                                  n)) > precision and steps < MAX_STEPS:
        print(norm(count_system_error(matrix, x, vector, n)))
        steps += 1
        for i in range(n):
            temp = vector[i]
            for j in range(n):
                if i == j:
                    continue
                temp -= matrix[i][j] * x[j]

            x_error[i] = x[i] - temp
            x[i] = temp

    print("steps: " + str(steps))
    return x
Пример #10
0
def algebraic_approximation(n, m, points, values):
    matrix_a = create_matrix(n, m+1)
    for i in range(n):
        for j in range(m+1):
            matrix_a[i][j] = math.pow(points[i], j)

    matrix_b = create_matrix(m+1, n)
    for i in range(n):
        for j in range(m+1):
            matrix_b[j][i] = matrix_a[i][j]

    coefficients = create_matrix(m+1, m+1)
    coefficients = multiply_matrixes(matrix_a, matrix_b, coefficients, n, m)
    vals = create_vector(m+1)
    vals = multiply_vector(matrix_b, vals, n, m+1, values)
    result = gaussian_elimination(coefficients, vals, m+1)
    return result
Пример #11
0
def algebraic_approximation(n, m, points, values):
    matrix_a = create_matrix(n, m + 1)
    for i in range(n):
        for j in range(m + 1):
            matrix_a[i][j] = math.pow(points[i], j)

    matrix_b = create_matrix(m + 1, n)
    for i in range(n):
        for j in range(m + 1):
            matrix_b[j][i] = matrix_a[i][j]

    coefficients = create_matrix(m + 1, m + 1)
    coefficients = multiply_matrixes(matrix_a, matrix_b, coefficients, n, m)
    vals = create_vector(m + 1)
    vals = multiply_vector(matrix_b, vals, n, m + 1, values)
    result = gaussian_elimination(coefficients, vals, m + 1)
    return result
Пример #12
0
def create_system_for_cubic(n, variant):
    matrix_a = create_tridiagonal(n-2)
    vector_b = create_vector(n-2)

    for i in range(n-2):
        matrix_a[i][0] = 1
        matrix_a[i][1] = 4
        matrix_a[i][2] = 1

    if n >= 3:
        matrix_a[0][0] = 0
        matrix_a[n-3][2] = 0

        if variant == 'parabolic':
            matrix_a[0][1] = 5
            matrix_a[n-3][1] = 5
    elif variant == 'parabolic':
        matrix_a[0] = 0
        matrix_a[1] = 5
        matrix_a[2] = 0

    return matrix_a, vector_b
Пример #13
0
def trigonometric_approximation(n, m, points, values):
    vals = create_vector(2*m+1)
    vals[0] = 0
    for i in range(n):
        vals[0] += values[i]

    vals[0] *= 2.0/n

    for k in range(1, m+1, 1):
        a = 0
        for i in range(n):
            a += values[i] * math.cos(k*((2*math.pi)/(6*math.pi)) * points[i])
        a *= 2.0 / n

        b = 0
        for i in range(n):
            b += values[i] * math.sin(k*((2*math.pi)/(6*math.pi)) * points[i])
        b *= 2.0 / n

        vals[2*k - 1] = a
        vals[2*k] = b

    return vals
Пример #14
0
def create_system_for_square(points, values, n, variant):
    matrix_a = create_matrix(3 * (n - 1))
    vector_b = create_vector(3 * (n - 1))
    distance = points[1] - points[0]

    for i in range(0, 3 * (n - 1), 3):
        if i != 3 * (n - 2):
            matrix_a[i][i] = 2 * distance
            matrix_a[i][i + 1] = 1
            matrix_a[i][i + 4] = -1

        else:
            calculate_variant(variant, matrix_a, i, distance)

        j = i + 1
        matrix_a[j][j - 1] = distance * distance
        matrix_a[j][j] = distance
        vector_b[j] = values[int(j / 3) + 1] - values[int(j / 3)]

        k = j + 1
        matrix_a[k][k] = 1
        vector_b[k] = values[int(k / 3)]

    return matrix_a, vector_b
Пример #15
0
def create_system_for_square(points, values, n, variant):
    matrix_a = create_matrix(3*(n-1))
    vector_b = create_vector(3*(n-1))
    distance = points[1] - points[0]

    for i in range(0, 3*(n-1), 3):
        if i != 3 * (n-2):
            matrix_a[i][i] = 2 * distance
            matrix_a[i][i+1] = 1
            matrix_a[i][i+4] = -1

        else:
            calculate_variant(variant, matrix_a, i, distance)

        j = i + 1
        matrix_a[j][j-1] = distance * distance
        matrix_a[j][j] = distance
        vector_b[j] = values[int(j / 3) + 1] - values[int(j / 3)]

        k = j + 1
        matrix_a[k][k] = 1
        vector_b[k] = values[int(k / 3)]

    return matrix_a, vector_b
Пример #16
0
def cubic_spline(points, values, n, variant):
    matrix_a, vector_b = create_system_for_cubic(n, variant)

    vector_b = free_column(vector_b, points, values, n)
    matrix_a, vector_b = thomas_algorithm(matrix_a, vector_b, n-2)

    z = create_vector(n)
    for i in range(1, n-1):
        z[i] = vector_b[i-1]

    if variant == 'natural':
        z[0] = 0
        z[n-1] = 0
    elif variant == 'parabolic':
        z[0] = z[1]
        z[n-1] = z[n-2]

    distance = points[1] - points[0]
    splines = []
    for i in range(n-1):
        splines.append(CubicPolynomial((1/(6*distance))*(z[i+1] - z[i]), 0.5 * z[i],
                                       (values[i+1] - values[i])/distance - (distance/6)*(z[i+1] + 2*z[i]), values[i]))

    return splines
def fdm_implicit():
    x_start = 0
    x_end = 2 * math.pi
    t_start = 0
    t_end = 3.5
    a = 2

    for pair in [(20, 480)]:
        x_points = pair[0] + 1
        t_points = pair[1] + 1

        x_step = (x_end - x_start) / (x_points - 1)
        t_step = (t_end - t_start) / (t_points - 1)

        x_coord = create_vector(x_points)

        # vectors created,
        x_step = (x_end - x_start) / (x_points - 1)
        t_step = (t_end - t_start) / (t_points - 1)
        x_coord = create_vector(x_points)

        for i in range(x_points):
            x_coord[i] = x_start + i * x_step

        t_cord = create_vector(t_points)
        for i in range(t_points):
            t_cord[i] = t_start + i * t_step

        # grid created
        meshgrid = create_matrix(t_points, x_points)

        for i in range(x_points):
            meshgrid[0][i] = 2 * math.sin(
                2 * x_coord[i]) * math.exp(-x_coord[i])

        for i in range(t_points):
            meshgrid[i][0] = 0
            meshgrid[i][x_points - 1] = 0

        coefficient = (math.pow(a, 2) * t_step) / math.pow(x_step, 2)
        values = create_vector(x_points)
        matrix = create_tridiagonal(x_points)

        for j in range(1, t_points):
            for k in range(1, x_points - 1):
                matrix[k][0] = (-1) * coefficient
                matrix[k][1] = 1 + 2 * coefficient
                matrix[k][2] = (-1) * coefficient
                values[k] = meshgrid[j - 1][k]

            matrix[0][0] = 0
            matrix[0][1] = 1
            matrix[0][2] = 0

            matrix[x_points - 1][0] = 0
            matrix[x_points - 1][1] = 1
            matrix[x_points - 1][2] = 0

            values[0] = meshgrid[j][0]
            values[x_points - 1] = meshgrid[j][x_points - 1]

            thomas_algorithm(matrix, values, x_points)
            for i in range(x_points - 1):
                meshgrid[j][i] = values[i]

        fig = plt.figure()
        ax = fig.add_subplot(111, projection='3d')
        x = x_coord
        y = t_cord
        X, Y = np.meshgrid(x, y)

        ax.plot_surface(
            X,
            Y,
            meshgrid,
            cstride=1,
            rstride=1,
            linewidth=0.0,
            cmap=cm.get_cmap("gist_rainbow"),
        )

        ax.set_xlabel("os x")
        ax.set_ylabel("os t")
        ax.set_zlabel("rozwiazanie")

        file_name = '../plots/fdm/imp' + str(x_points) + "," + str(
            t_points) + '.png'
        plt.savefig(file_name)
        # plt.show()
        plt.close()

        max_val = 0
        for i in range(x_points):
            for j in range(t_points):
                if math.fabs(meshgrid[j][i] > max_val):
                    max_val = abs(meshgrid[j][i])

        print(
            str(x_points) + ", " + str(t_points) + ", " + str(coefficient) +
            ", " + str(max_val))
def fdm():
    x_start = 0
    x_end = 2 * math.pi
    t_start = 0
    t_end = 3.5
    a = 2

    for pair in [(20, 480)]:
        x_points = pair[0] + 1
        t_points = pair[1] + 1

        # vectors created,
        x_step = (x_end - x_start) / (x_points - 1)
        t_step = (t_end - t_start) / (t_points - 1)
        x_coord = create_vector(x_points)

        for i in range(x_points):
            x_coord[i] = x_start + i * x_step

        t_cord = create_vector(t_points)
        for i in range(t_points):
            t_cord[i] = t_start + i * t_step

        # grid created

        meshgrid = create_matrix(t_points, x_points)
        for i in range(x_points):
            meshgrid[0][i] = 2 * math.sin(
                2 * x_coord[i]) * math.exp(-x_coord[i])

        for i in range(t_points):
            meshgrid[i][0] = 0
            meshgrid[i][x_points - 1] = 0

        # a*a+k/h*h
        coefficient = (math.pow(a, 2) * t_step) / math.pow(x_step, 2)

        for j in range(1, t_points):
            for i in range(1, x_points - 1):
                meshgrid[j][i] = coefficient * meshgrid[j-1][i-1] + \
                             (1-2*coefficient)*meshgrid[j-1][i] + coefficient * meshgrid[j-1][i+1]

        # plot drawing

        fig = plt.figure()
        ax = fig.add_subplot(111, projection='3d')
        x = x_coord
        y = t_cord
        X, Y = np.meshgrid(x, y)

        try:
            ax.plot_surface(
                X,
                Y,
                meshgrid,
                cstride=1,
                rstride=1,
                linewidth=0.0,
                cmap=cm.get_cmap("gist_rainbow"),
            )

            ax.set_xlabel("os x")
            ax.set_ylabel("os t")
            ax.set_zlabel("rozwiazanie")

            file_name = '../plots/fdm/ex' + str(x_points) + "," + str(
                t_points) + '.png'
            plt.savefig(file_name)
            # plt.show()
            plt.close()
        except Exception as e:
            print(e.__class__)

        max_val = 0
        for i in range(x_points):
            for j in range(t_points):
                if math.fabs(meshgrid[j][i] > max_val):
                    max_val = abs(meshgrid[j][i])

        print(
            str(x_points) + ", " + str(t_points) + ", " + str(coefficient) +
            ", " + str(max_val))
def fdm_implicit():
    x_start = 0
    x_end = 2*math.pi
    t_start = 0
    t_end = 3.5
    a = 2

    for pair in [
                (20, 480)
                 ]:
        x_points = pair[0] + 1
        t_points = pair[1] + 1

        x_step = (x_end - x_start) / (x_points - 1)
        t_step = (t_end - t_start) / (t_points - 1)

        x_coord = create_vector(x_points)

        # vectors created,
        x_step = (x_end - x_start) / (x_points - 1)
        t_step = (t_end - t_start) / (t_points - 1)
        x_coord = create_vector(x_points)

        for i in range(x_points):
            x_coord[i] = x_start + i * x_step

        t_cord = create_vector(t_points)
        for i in range(t_points):
            t_cord[i] = t_start + i * t_step

        # grid created
        meshgrid = create_matrix(t_points, x_points)

        for i in range(x_points):
            meshgrid[0][i] = 2 * math.sin(2*x_coord[i]) * math.exp(-x_coord[i])

        for i in range(t_points):
            meshgrid[i][0] = 0
            meshgrid[i][x_points-1] = 0

        coefficient = (math.pow(a, 2) * t_step) / math.pow(x_step, 2)
        values = create_vector(x_points)
        matrix = create_tridiagonal(x_points)

        for j in range(1, t_points):
            for k in range(1, x_points-1):
                matrix[k][0] = (-1) * coefficient
                matrix[k][1] = 1 + 2*coefficient
                matrix[k][2] = (-1)*coefficient
                values[k] = meshgrid[j-1][k]

            matrix[0][0] = 0
            matrix[0][1] = 1
            matrix[0][2] = 0

            matrix[x_points-1][0] = 0
            matrix[x_points-1][1] = 1
            matrix[x_points-1][2] = 0

            values[0] = meshgrid[j][0]
            values[x_points-1] = meshgrid[j][x_points-1]

            thomas_algorithm(matrix, values, x_points)
            for i in range(x_points-1):
                meshgrid[j][i] = values[i]

        fig = plt.figure()
        ax = fig.add_subplot(111, projection='3d')
        x = x_coord
        y = t_cord
        X, Y = np.meshgrid(x, y)

        ax.plot_surface(X, Y, meshgrid, cstride=1, rstride=1, linewidth=0.0, cmap=cm.get_cmap("gist_rainbow"),)

        ax.set_xlabel("os x")
        ax.set_ylabel("os t")
        ax.set_zlabel("rozwiazanie")


        file_name = '../plots/fdm/imp' + str(x_points) + "," + str(t_points) + '.png'
        plt.savefig(file_name)
        # plt.show()
        plt.close()

        max_val = 0
        for i in range(x_points):
            for j in range(t_points):
                if math.fabs(meshgrid[j][i] > max_val):
                    max_val = abs(meshgrid[j][i])

        print(str(x_points) + ", " + str(t_points) + ", " + str(coefficient) + ", " + str(max_val))
Пример #20
0
                matrix[j][j] = M / j
            else:
                matrix[j][j] = 0
        matrix[j][j] = K


def fill_vector(vector, n):
    for j in range(n):
        if j % 2 == 0:
            vector[j] = -1
        else:
            vector[j] = 1

if __name__ == "__main__":
    for i in [10, 30, 50, 100, 150, 250, 500, 750, 1000, 5000]:
        matrix_A = create_matrix(i)
        fill_matrix(matrix_A, i)
        vector_X = create_vector(i)
        fill_vector(vector_X, i)
        vector_B = calculate_constant_terms_vector(matrix_A, vector_X, i)

        x = jacobie_method(matrix_A, vector_B, 1e-15, euclidean_norm, i)
        euclidean = euclidean_norm(vector_difference(vector_X, x))
        maximum = maximum_norm(vector_difference(vector_X, x))
        print("Matrix size: " + str(i))
        print(euclidean)
        print(maximum)

        radius = spectral_radius(matrix_A, i)
        print("Matrix size: " + str(i) + "\tspectral radius: " + str(radius))
Пример #21
0
            else:
                matrix[j][j] = 0
        matrix[j][j] = K


def fill_vector(vector, n):
    for j in range(n):
        if j % 2 == 0:
            vector[j] = -1
        else:
            vector[j] = 1


if __name__ == "__main__":
    for i in [10, 30, 50, 100, 150, 250, 500, 750, 1000, 5000]:
        matrix_A = create_matrix(i)
        fill_matrix(matrix_A, i)
        vector_X = create_vector(i)
        fill_vector(vector_X, i)
        vector_B = calculate_constant_terms_vector(matrix_A, vector_X, i)

        x = jacobie_method(matrix_A, vector_B, 1e-15, euclidean_norm, i)
        euclidean = euclidean_norm(vector_difference(vector_X, x))
        maximum = maximum_norm(vector_difference(vector_X, x))
        print("Matrix size: " + str(i))
        print(euclidean)
        print(maximum)

        radius = spectral_radius(matrix_A, i)
        print("Matrix size: " + str(i) + "\tspectral radius: " + str(radius))
def fdm():
    x_start = 0
    x_end = 2*math.pi
    t_start = 0
    t_end = 3.5
    a = 2

    for pair in [
                (20, 480)
                ]:
        x_points = pair[0] + 1
        t_points = pair[1] + 1

        # vectors created,
        x_step = (x_end - x_start) / (x_points - 1)
        t_step = (t_end - t_start) / (t_points - 1)
        x_coord = create_vector(x_points)

        for i in range(x_points):
            x_coord[i] = x_start + i * x_step

        t_cord = create_vector(t_points)
        for i in range(t_points):
            t_cord[i] = t_start + i * t_step

        # grid created

        meshgrid = create_matrix(t_points, x_points)
        for i in range(x_points):
            meshgrid[0][i] = 2 * math.sin(2*x_coord[i]) * math.exp(-x_coord[i])

        for i in range(t_points):
            meshgrid[i][0] = 0
            meshgrid[i][x_points-1] = 0

        # a*a+k/h*h
        coefficient = (math.pow(a, 2) * t_step) / math.pow(x_step, 2)

        for j in range(1, t_points):
            for i in range(1, x_points-1):
                meshgrid[j][i] = coefficient * meshgrid[j-1][i-1] + \
                             (1-2*coefficient)*meshgrid[j-1][i] + coefficient * meshgrid[j-1][i+1]

        # plot drawing

        fig = plt.figure()
        ax = fig.add_subplot(111, projection='3d')
        x = x_coord
        y = t_cord
        X, Y = np.meshgrid(x, y)

        try:
            ax.plot_surface(X, Y, meshgrid, cstride=1, rstride=1, linewidth=0.0, cmap=cm.get_cmap("gist_rainbow"),)

            ax.set_xlabel("os x")
            ax.set_ylabel("os t")
            ax.set_zlabel("rozwiazanie")


            file_name = '../plots/fdm/ex' + str(x_points) + "," + str(t_points) + '.png'
            plt.savefig(file_name)
            # plt.show()
            plt.close()
        except Exception as e:
            print(e.__class__)

        max_val = 0
        for i in range(x_points):
            for j in range(t_points):
                if math.fabs(meshgrid[j][i] > max_val):
                    max_val = abs(meshgrid[j][i])

        print(str(x_points) + ", " + str(t_points) + ", " + str(coefficient) + ", " + str(max_val))