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

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

12.01.2021, 16:57. Показов 5368. Ответов 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
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,722
Записей в блоге: 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
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,722
Записей в блоге: 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
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,722
Записей в блоге: 14
12.01.2021, 18:00
ayratmsk, stepik коварен. Он проверяет код при всех допустимых возможностях. Может сунуть на вход одно уравнение с одним неизвестным! Проверяй!
0
1 / 1 / 0
Регистрация: 21.12.2020
Сообщений: 30
12.01.2021, 18:28  [ТС]
код и с одним уравнением с одним неизвестным успешно справляется
а нулевые входные данные невозможны - об этом в комментах преподаватель упоминает
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
12.01.2021, 20:24
Перед выполнением DivideRow хорошо бы проверить что делитель не нулевой.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,722
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru