Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 21.12.2020
Сообщений: 30

Решение СЛУ методом Гаусса

12.01.2021, 16:57. Показов 5306. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
n, m = (int(i) for i in input().split())
    
myA =[list(map(float, (input().split()))) 
            for i in range(n) ]
myB=[]
for i in range(len(myA)):
    myB.append(myA[i][-1])
    myA[i].pop(-1)
 
# --- перемена местами двух строк системы
def SwapRows(A, B, row1, row2):
    A[row1], A[row2] = A[row2], A[row1]
    B[row1], B[row2] = B[row2], B[row1]
# --- end of перемена местами двух строк системы
 
# --- деление строки системы на число
def DivideRow(A, B, row, divider):
    A[row] = [a / divider for a in A[row]]
    B[row] /= divider
# --- end o деление строки системы на число
 
# --- сложение строки системы с другой строкой, умноженной на число
def CombineRows(A, B, row, source_row, weight):
    A[row] = [(a + k * weight) for a, k in zip(A[row], A[source_row])]
    B[row] += B[source_row] * weight
# --- end of сложение строки системы с другой строкой, умноженной начисло
 
# --- решение системы методом Гаусса (приведением к треугольному виду)
def Gauss(A, B):
    column = 0
    while (column < len(B)):
        current_row = None
        for r in range(column, len(A)):
            if current_row is None:
                current_row = r
            elif abs(A[r][column]) > abs(A[current_row][column]):
                current_row = r
        if current_row is None or (sum(A[r],0.0)==0.0 and B[r]!=0.0):
            return ['NO']
        if sum(A[r],0.0)==0.0 and B[r]==0.0:
            return ['INF']
        if current_row != column:
            SwapRows(A, B, current_row, column)
        if (A[column][column]==0.0):
            return ['INF']
        DivideRow(A, B, column, A[column][column])
        for r in range(column + 1, len(A)):
            CombineRows(A, B, r, column, -A[r][column])
        column += 1
    if (column < m):
            return ['INF']
    X = [0 for b in B]
    for i in range(len(B) - 1, -1, -1):
        X[i] = B[i] - sum(x * a for x, a in zip(X[(i + 1):], A[i][(i + 1):]))
    return X
# --- end of решение системы методом Гаусса (приведением к треугольному виду)
 
answer=Gauss(myA, myB)
if(len(answer)==1):
    print(answer[0])
else:
    print('YES')
    for i in answer:
        print(i,end=' ')
если взять тестовые данные например такие
myA=[[1.0, 3.0, 2.0],[2.0, 6.0, 4.0], [1.0, 4.0, 3.0]]
myB=[7.0, 8.0, 1.0]

то система проверки решений (stepik.org) ругается:

Code
1
2
3
4
5
6
7
8
9
Failed test #8 of 20. Runtime error
 
Error:
Traceback (most recent call last):
  File "jailed_code", line 58, in <module>
    answer=Gauss(myA, myB)
  File "jailed_code", line 36, in Gauss
    elif abs(A[r][column]) > abs(A[current_row][column]):
IndexError: list index out of range
а когда проверяю на домашнем компе, в терминале - все верно

уже не знаю как найти приемлемое решение...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2021, 16:57
Ответы с готовыми решениями:

Решение системы линейных уравнений методом Гаусса
Задание: Решение системы линейных уравнений методом Гаусса. Помогите, пожалуйста, доработать программу!!!!! from random import randint...

СЛАУ методом Гаусса
Может кто-нибудь написать программу для решить СЛАУ методом Гаусса с точностью e = 0,001? 2,00*x1-1,00*x3-2,00*x4=-8,00 ...

Определенное интегрирование методом Гаусса
Нужно вычислить определенный интеграл методом Гаусса Функцию задаем произвольную...лучше,чтобы она(и пределы интегрирования) считывались...

10
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
12.01.2021, 17:07
А что там в начале? Как это по-чудному вводится... myA - это матрица коэффициентов, myB - вектор правых частей. Так?
Тогда что ЭТО:

Python
1
2
3
4
5
6
7
8
n, m = (int(i) for i in input().split())
    
myA =[list(map(float, (input().split()))) 
            for i in range(n) ]
myB=[]
for i in range(len(myA)):
    myB.append(myA[i][-1])
    myA[i].pop(-1)
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
12.01.2021, 17:14
Как я понимаю его код, то сначала коэффициенты и вектор правых частей записываются в один список. Потом он из этого списка достает вектор правых частей и записывает в другой.
1
1 / 1 / 0
Регистрация: 21.12.2020
Сообщений: 30
12.01.2021, 17:46  [ТС]
да все верно
строки из цифр парсятся в единый массив
а потом последние числа из каждой строки отщипываются в вектор правой части

Добавлено через 4 минуты
Непосредственно условие задачи:

Напишите программу, которая решает систему линейных алгебраических уравнений методом Гаусса.

Формат входных данных:
В первой строке задаются два числа: количество уравнений n (n≥1) и количество неизвестных m (m≥1). Далее идут n строк, каждая из которых содержит m+1 число. Первые m чисел — это коэффициенты i-го уравнения системы, а последнее, (m+1)-е число — коэффициент bi​, стоящий в правой части i-го уравнения.
Формат выходных данных:
В первой строке следует вывести слово YES, если решение существует и единственно, слово NO в случае, если решение не существует, и слово INF в случае, когда решений существует бесконечно много. Если решение существует и единственно, то во второй строке следует вывести решение системы в виде m чисел, разделенных пробелом.


Основной блок тестовых данных:

Sample Input 1:
3 3
4 2 1 1
7 8 9 1
9 1 3 2

Sample Output 1:
YES
0.2608695652173913 0.04347826086956526 -0.1304347826086957

Sample Input 2:
2 3
1 3 4 4
2 1 4 5

Sample Output 2:
INF

Sample Input 3:
3 3
1 3 2 7
2 6 4 8
1 4 3 1

Sample Output 3:
NO
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
12.01.2021, 17:52
ayratmsk, проверил. Ответ NO.
0
1 / 1 / 0
Регистрация: 21.12.2020
Сообщений: 30
12.01.2021, 17:55  [ТС]
да я уж тоже все проверил - на своем компьютере все работает
думаю, может разница в версиях питона по сравнению с системой проверки на stepik.org (единственное что известно, что питон у них тоже 3-й)

к сожалению, курс линейной алгебры, в рамках которого решается задача, достаточно старый и модераторы уже не отвечают на вопросы

в любом случае спасибо за внимание к моему вопросу!
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
12.01.2021, 18:00
ayratmsk, stepik коварен. Он проверяет код при всех допустимых возможностях. Может сунуть на вход одно уравнение с одним неизвестным! Проверяй!
0
1 / 1 / 0
Регистрация: 21.12.2020
Сообщений: 30
12.01.2021, 18:28  [ТС]
код и с одним уравнением с одним неизвестным успешно справляется
а нулевые входные данные невозможны - об этом в комментах преподаватель упоминает
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
12.01.2021, 20:24
Перед выполнением DivideRow хорошо бы проверить что делитель не нулевой.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
12.01.2021, 21:51
u235, там в индексе ошибка (судя по диагностике).ayratmsk, в stepik-е должна быть кнопка "запустить код". Пробуйте отлаживать прямо там.
0
1 / 1 / 0
Регистрация: 21.12.2020
Сообщений: 30
13.01.2021, 01:18  [ТС]
2 u235: прямо над вызовом dividerow как раз делитель и проверяется

2 catstail: по кнопке "запустить код" отладчик ничего не прогоняет по коду. просто показывает test input и output
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.01.2021, 01:18
Помогаю со студенческими работами здесь

Найдите решение методом Гаусса
На входе нужно ввести систему линейных уравнений N и N неизвестными с целыми коэффициентами. В первой строке вводится число N (то есть...

Решение системы линейных уравнений методом Гаусса
Решение системы линейных уравнений методом Гаусса.

3х4 матрицу превратить в 1х1 с методом Гаусса
3х4 матрицу превратить в 1х1 с методом Гаусса, если не получилось без него, другие варианты не помешают

Решение СЛУ методом Гаусса
Не работает, помогите найти проблему procedure TForm1.Button1Click(Sender: TObject); var y,a:array of real; c,x,b:array of...

Решение СЛУ методом Гаусса
Программа не работает,посмотрите пожалуйста procedure TForm1.Button1Click(Sender: TObject); var n,i,j,k:integer; h,y1,y2,y3:real; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru