Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2021, 17:32   #1
big-boss777
Новичок
Джуниор
 
Регистрация: 16.02.2021
Сообщений: 3
По умолчанию Метод Крамера - реализация в Python

Всем привет. Пытаюсь реализовать процесс решения систем линионного уравнения методом Крамера в среде Python. Исходя из того, что выбранная среда не очень знакома мне, процесс продвигается не очень. Возможно, кто-то решал подобную задачу, прошу помочь.

Последний раз редактировалось BDA; 07.11.2021 в 19:01.
big-boss777 вне форума Ответить с цитированием
Старый 08.11.2021, 15:31   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Простой запрос к поисковику и вот вариант:
https://xn--80ahcjeib4ac4d.xn--p1ai/...ons_in_python/
Тут описывается решение СЛАУ матричным методом с использованием NumPy.

А тут описан метод получения дискриминантов с использованием метода numpy.linalg.det().
Если правильно составили матрицы, то, получив дискриминанты, решите систему методом Крамера:
https://numpy.org/doc/stable/referen...inalg.det.html

PS: В обоих случаях использована библиотека NumPy (готовые методы).
Вы сами хотите написать нечто подобное?
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 16.11.2021, 22:00   #3
big-boss777
Новичок
Джуниор
 
Регистрация: 16.02.2021
Сообщений: 3
По умолчанию

Спасибо, но это не совсем то, что нужно.
В лабораторной работе требуется реализация без обычных библиотек.
Так вот, я нашел блок-схему для программной реализации метода Крамера (https://www.mathros.net.ua/rozvjazok...m-kramera.html – содержится в нижней части статьи), и ее пытаюсь реализовать.
big-boss777 вне форума Ответить с цитированием
Старый 17.11.2021, 00:53   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Хорошо. Тогда определите, сколько уравнений у вас задано.
Для 2-х, 3-х и даже 4-x можно выписать дискриминанты в лоб, но если их число не определено,
то вам необходимо написать функции, которые умеют вычислять миноры и дискриминанты.
Определитесь с форматом данных. Например, уравнение - это список коэффициентов: [1, 2, 3, 7], а система уравнений - это вложенный список: [[...], [...], [...], [...]].
Возможно вы пожелаете другую форму использовать.
Далее пишите функцию, которая удаляет заданную строку и столбец - получаем минор первого уровня. Затем пишите функцию, которая вычисляет дискриминант, проходя по всем элементам (рекурсия вам в руки, до получения миноров 2*2) и т.д.
Такую ссылку тоже можно найти (мне попадалась на Cи).

PS: Подозреваю, что можно найти код и самой библиотеки и покопаться там. Но это ой ...
Как-то так, ...

Последний раз редактировалось ViktorR; 17.11.2021 в 00:56.
ViktorR вне форума Ответить с цитированием
Старый 22.11.2021, 22:35   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Поискал и вот что нашёл:
от stackPusher:
Код:
# рекурсивный код Python для нахождения определителя матрицы.
def getMatrixMinor(m,i,j):
    return [row[:j] + row[j+1:] for row in (m[:i]+m[i+1:])]

def getMatrixDeternminant(m):
    #base case for 2x2 matrix
    if len(m) == 2:
        return m[0][0]*m[1][1]-m[0][1]*m[1][0]

    determinant = 0
    for c in range(len(m)):
        determinant += ((-1)**c)*m[0][c]*getMatrixDeternminant(getMatrixMinor(m,0,c))
    return determinant
m - это список списков вида (для матрицы n*n):
Код:
m = [[a00,   a01,    a02,  ...,  a0n-1  ],
     [a10,   a11,    a12, ...,   a1n-1  ],
     [...                                    ],
     [an-10, an-11,  an-12, ..., an-1n-1]]
Для теста:
Код:
M = [[4,1,1,2,1],
     [1,2,-1,1,1],
     [3,1,1,1,1],
     [2,1,1,4,1],
     [2,-1,1,1,5]]
print(getMatrixDeternminant(M))
det(M) = 64

Думаю, что этого достаточно для реализации метода Крамера. Надо только добавить функцию, которая сформирует набор матриц: замена столбца.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод Крамера на Python qwertyuioplol Помощь студентам 3 08.11.2017 08:22
метод крамера Salamandra_r07 Помощь студентам 1 08.11.2013 15:58
C++ Метод Крамера Phoenix617 Visual C++ 1 13.11.2011 00:59
Метод Крамера miha815 Помощь студентам 1 06.10.2010 18:28
Метод Крамера sllh_111 Помощь студентам 1 18.02.2010 19:27