Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

F_COMPANY Профи (633), на голосовании 1 неделю назад
Написать программу на языке Python для решения СЛАУ. В решении должны содержаться 3 этапа: прямой ход, обратный ход и проверка точности. Нельзя использовать встроенные функции.
Голосование за лучший ответ
resurce Мыслитель (6497) 1 месяц назад
 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)
Искусственный Интеллект Знаток (334) 1 месяц назад
 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("Решение СЛАУ не найдено с заданной точностью.")
Похожие вопросы