Top.Mail.Ru
Ответы
Аватар пользователя
3 месяца назад
от

Простая программа на Python. Помогите написать

Написать программу на языке Python для решения СЛАУ. В решении должны содержаться 3 этапа: прямой ход, обратный ход и проверка точности. Нельзя использовать встроенные функции.

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Знаток
3мес
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
 import numpy as np 
 
# Прямой ход 
def forward_elimination(A, b): 
    n = len(A) 
    for i in range(n): 
        max_row = i 
        for k in range(i + 1, n): 
            if abs(A[k][i]) > abs(A[max_row][i]): 
                max_row = k 
 
        A[i], A[max_row] = A[max_row], A[i] 
        b[i], b[max_row] = b[max_row], b[i] 
 
        for k in range(i + 1, n): 
            factor = A[k][i] / A[i][i] 
            A[k][i] = 0 
            for j in range(i + 1, n): 
                A[k][j] -= factor * A[i][j] 
            b[k] -= factor * b[i] 
    return A, b 
 
# Обратный ход 
def back_substitution(A, b): 
    n = len(A) 
    x = np.zeros(n) 
    for i in range(n - 1, -1, -1): 
        x[i] = b[i] 
        for j in range(i + 1, n): 
            x[i] -= A[i][j] * x[j] 
        x[i] /= A[i][i] 
    return x 
 
# Проверка точности 
def check_accuracy(A, b, x): 
    b_calc = np.dot(A, x) 
    return np.allclose(b, b_calc) 
 
# Основная функция для решения СЛАУ 
def solve_slae(A, b): 
    A, b = forward_elimination(A, b) 
    x = back_substitution(A, b) 
    if check_accuracy(A, b, x): 
        return x 
    else: 
        return None 
 
# Пример использования 
A = [[2, 1, -1], [-3, -1, 2], [-2, 1, 2]] 
b = [8, -11, -3] 
solution = solve_slae(A, b) 
 
if solution is not None: 
    print("Решение СЛАУ:", solution) 
else: 
    print("Решение СЛАУ не найдено с заданной точностью.") 
 
Аватар пользователя
Искусственный Интеллект
3мес

Я так понимаю — это метод Гаусса..

Аватар пользователя
Мыслитель
3мес
12345678910111213141516171819202122232425262728293031323334353637383940414243
 def gaussian_elimination(A, B): 
    n = len(A) 
    A = [row[:] for row in A] 
    B = B[:] 
    for i in range(n): 
        div = A[i][i] 
        for j in range(i, n): 
            A[i][j] /= div 
        B[i] /= div 
        for k in range(i + 1, n): 
            factor = A[k][i] 
            for j in range(i, n): 
                A[k][j] -= factor * A[i][j] 
            B[k] -= factor * B[i] 
    X = [0] * n 
    for i in range(n - 1, -1, -1): 
        X[i] = B[i] 
        for j in range(i + 1, n): 
            X[i] -= A[i][j] * X[j] 
    return X 
 
def check_solution(A_orig, X, B_orig): 
    n = len(A_orig) 
    residuals = [] 
    for i in range(n): 
        sum_ax = 0 
        for j in range(n): 
            sum_ax += A_orig[i][j] * X[j] 
        residuals.append(sum_ax - B_orig[i]) 
    return residuals 
 
A = [ 
    [2, -1, 1], 
    [3, 3, 9], 
    [3, 3, 5] 
] 
B = [1, 15, 11] 
 
X = gaussian_elimination(A, B) 
residuals = check_solution(A, X, B) 
 
print("Solution (X):", X) 
print("Residuals:", residuals)