Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 11, 2012 13:29:26

ingushet
Зарегистрирован: 2012-10-30
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Здравствуйте! Возникла необходимость решить систему из 16 линейных уравнений.Для решения задачи использую Numpy.

xr = numpy.linalg.solve(ge,kon)
При попытке выполнить сие действо выдает ошибку:

Traceback (most recent call last):
  File "C:\Users\777\Desktop\j.py", line 18, in <module>
    xr = numpy.linalg.solve(ge,kon)
  File "C:\Python27\lib\site-packages\numpy\linalg\linalg.py", line 328, in solve
    raise LinAlgError, 'Singular matrix'
LinAlgError: Singular matrix

Массив ge:
522378 -- 1039847 -- 522378 -- -- 1039847 -- 522378 -- 1039847 -- 522378 -- 1039847 -- 522378 -- 1039847 -- 522378 -- 1039847 -- 522378 -- 1039847 -- 522378 -- 1039847
521964 -- 1040563 -- 521964 -- -- 1040563 -- 521964 -- 1040563 -- 521964 -- 1040563 -- 521964 -- 1040563 -- 521964 -- 1040563 -- 521964 -- 1040563 -- 521964 -- 1040563
522051 -- 1040675 -- 522051 -- -- 1040675 -- 522051 -- 1040675 -- 522051 -- 1040675 -- 522051 -- 1040675 -- 522051 -- 1040675 -- 522051 -- 1040675 -- 522051 -- 1040675
522128 -- 1040708 -- 522128 -- -- 1040708 -- 522128 -- 1040708 -- 522128 -- 1040708 -- 522128 -- 1040708 -- 522128 -- 1040708 -- 522128 -- 1040708 -- 522128 -- 1040708
521858 -- 1040674 -- 521858 -- -- 1040674 -- 521858 -- 1040674 -- 521858 -- 1040674 -- 521858 -- 1040674 -- 521858 -- 1040674 -- 521858 -- 1040674 -- 521858 -- 1040674
522378 -- 1040847 -- 522378 -- -- 1040847 -- 522378 -- 1040847 -- 522378 -- 1040847 -- 522378 -- 1040847 -- 522378 -- 1040847 -- 522378 -- 1040847 -- 522378 -- 1040847
521814 -- 1040677 -- 521814 -- -- 1040677 -- 521814 -- 1040677 -- 521814 -- 1040677 -- 521814 -- 1040677 -- 521814 -- 1040677 -- 521814 -- 1040677 -- 521814 -- 1040677
521378 -- 1039847 -- 521378 -- -- 1039847 -- 521378 -- 1039847 -- 521378 -- 1039847 -- 521378 -- 1039847 -- 521378 -- 1039847 -- 521378 -- 1039847 -- 521378 -- 1039847
521952 -- 1040772 -- 521952 -- -- 1040772 -- 521952 -- 1040772 -- 521952 -- 1040772 -- 521952 -- 1040772 -- 521952 -- 1040772 -- 521952 -- 1040772 -- 521952 -- 1040772
522054 -- 1040891 -- 522054 -- -- 1040891 -- 522054 -- 1040891 -- 522054 -- 1040891 -- 522054 -- 1040891 -- 522054 -- 1040891 -- 522054 -- 1040891 -- 522054 -- 1040891
521798 -- 1040816 -- 521798 -- -- 1040816 -- 521798 -- 1040816 -- 521798 -- 1040816 -- 521798 -- 1040816 -- 521798 -- 1040816 -- 521798 -- 1040816 -- 521798 -- 1040816
521976 -- 1040917 -- 521976 -- -- 1040917 -- 521976 -- 1040917 -- 521976 -- 1040917 -- 521976 -- 1040917 -- 521976 -- 1040917 -- 521976 -- 1040917 -- 521976 -- 1040917
521916 -- 1040899 -- 521916 -- -- 1040899 -- 521916 -- 1040899 -- 521916 -- 1040899 -- 521916 -- 1040899 -- 521916 -- 1040899 -- 521916 -- 1040899 -- 521916 -- 1040899
521823 -- 1040891 -- 521823 -- -- 1040891 -- 521823 -- 1040891 -- 521823 -- 1040891 -- 521823 -- 1040891 -- 521823 -- 1040891 -- 521823 -- 1040891 -- 521823 -- 1040891
521875 -- 1040963 -- 521875 -- -- 1040963 -- 521875 -- 1040963 -- 521875 -- 1040963 -- 521875 -- 1040963 -- 521875 -- 1040963 -- 521875 -- 1040963 -- 521875 -- 1040963
521983 -- 1041008 -- 521983 -- -- 1041008 -- 521983 -- 1041008 -- 521983 -- 1041008 -- 521983 -- 1041008 -- 521983 -- 1041008 -- 521983 -- 1041008 -- 521983 -- 1041008

Массив kon:
37300
44500
79300
42699
64500
37300
50000
37300
185500
73000
235500
97400
271400
289200
501900
134000
Каждое уравнение с разными коэффициентами.Почему выдает ошибку?

Отредактировано ingushet (Ноя. 11, 2012 13:30:19)

Офлайн

#2 Ноя. 11, 2012 13:35:42

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

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

Ошибка: матрица вырожденная (матрица, определитель которой равен 0). Проверь…

Дай полный текст программы…



Отредактировано 4kpt (Ноя. 11, 2012 13:44:08)

Офлайн

#3 Ноя. 11, 2012 13:56:21

ingushet
Зарегистрирован: 2012-10-30
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

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

проверил :

k=numpy.linalg.det(ge)

k=0.0

Офлайн

#4 Ноя. 11, 2012 14:00:18

ingushet
Зарегистрирован: 2012-10-30
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

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

в математике не силен, возможен ли другой вариант решения?
Либо преобразования для дальнейшего решения?

Отредактировано ingushet (Ноя. 11, 2012 14:01:31)

Офлайн

#5 Ноя. 11, 2012 14:25:34

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

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

может быть, нужно найти ФСР? Не уверен, что numpy умеет это делать.

Офлайн

#6 Ноя. 11, 2012 14:31:55

ingushet
Зарегистрирован: 2012-10-30
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

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

что такое ФСР?

Офлайн

#7 Ноя. 11, 2012 14:43:09

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

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

работает же все

nb
Out[93]: 
array([ 37300,  44500,  79300,  42699,  64500,  37300,  50000,  37300,
       185500,  73000, 235500,  97400, 271400, 289200, 501900, 134000])
na
Out[94]: 
array([['522378', '1039847', '522378', '1039847', '522378', '1039847',
        '522378', '1039847', '522378', '1039847', '522378', '1039847',
        '522378', '1039847', '522378', '1039847'],
       ['521964', '1040563', '521964', '1040563', '521964', '1040563',
        '521964', '1040563', '521964', '1040563', '521964', '1040563',
        '521964', '1040563', '521964', '1040563'],
       ['522051', '1040675', '522051', '1040675', '522051', '1040675',
        '522051', '1040675', '522051', '1040675', '522051', '1040675',
        '522051', '1040675', '522051', '1040675'],
       ['522128', '1040708', '522128', '1040708', '522128', '1040708',
        '522128', '1040708', '522128', '1040708', '522128', '1040708',
        '522128', '1040708', '522128', '1040708'],
       ['521858', '1040674', '521858', '1040674', '521858', '1040674',
        '521858', '1040674', '521858', '1040674', '521858', '1040674',
        '521858', '1040674', '521858', '1040674'],
       ['522378', '1040847', '522378', '1040847', '522378', '1040847',
        '522378', '1040847', '522378', '1040847', '522378', '1040847',
        '522378', '1040847', '522378', '1040847'],
       ['521814', '1040677', '521814', '1040677', '521814', '1040677',
        '521814', '1040677', '521814', '1040677', '521814', '1040677',
        '521814', '1040677', '521814', '1040677'],
       ['521378', '1039847', '521378', '1039847', '521378', '1039847',
        '521378', '1039847', '521378', '1039847', '521378', '1039847',
        '521378', '1039847', '521378', '1039847'],
       ['521952', '1040772', '521952', '1040772', '521952', '1040772',
        '521952', '1040772', '521952', '1040772', '521952', '1040772',
        '521952', '1040772', '521952', '1040772'],
       ['522054', '1040891', '522054', '1040891', '522054', '1040891',
        '522054', '1040891', '522054', '1040891', '522054', '1040891',
        '522054', '1040891', '522054', '1040891'],
       ['521798', '1040816', '521798', '1040816', '521798', '1040816',
        '521798', '1040816', '521798', '1040816', '521798', '1040816',
        '521798', '1040816', '521798', '1040816'],
       ['521976', '1040917', '521976', '1040917', '521976', '1040917',
        '521976', '1040917', '521976', '1040917', '521976', '1040917',
        '521976', '1040917', '521976', '1040917'],
       ['521916', '1040899', '521916', '1040899', '521916', '1040899',
        '521916', '1040899', '521916', '1040899', '521916', '1040899',
        '521916', '1040899', '521916', '1040899'],
       ['521823', '1040891', '521823', '1040891', '521823', '1040891',
        '521823', '1040891', '521823', '1040891', '521823', '1040891',
        '521823', '1040891', '521823', '1040891'],
       ['521875', '1040963', '521875', '1040963', '521875', '1040963',
        '521875', '1040963', '521875', '1040963', '521875', '1040963',
        '521875', '1040963', '521875', '1040963'],
       ['521983', '1041008', '521983', '1041008', '521983', '1041008',
        '521983', '1041008', '521983', '1041008', '521983', '1041008',
        '521983', '1041008', '521983', '1041008']], 
      dtype='|S7')
np.linalg.solve(na,nb)
Out[95]: 
array([ -2.43316710e+101,   6.68208273e+100,   2.29391012e+098,
         1.05197199e+101,   7.61282498e+098,   9.30931038e+100,
        -4.19905303e+098,  -1.96617794e+101,   1.69165939e+098,
         1.47401094e+100,  -2.21377315e+098,   1.06715305e+101,
        -7.24459489e+114,  -1.96406281e+117,   7.24459489e+114,
         1.96406281e+117])

Офлайн

#8 Ноя. 11, 2012 14:57:36

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

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

sergeek
работает же все
Это частное решение, причем, наверное, не самое лучшее. Видимо внутри какой-нибудь итерационный метод. Так как ранг матрицы - 2, то общее решение - 14 лнз векторов

фср=Фундаментальная система решений

Отредактировано adray (Ноя. 11, 2012 14:58:38)

Офлайн

#9 Ноя. 11, 2012 15:15:05

ingushet
Зарегистрирован: 2012-10-30
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

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

import numpy
r1=numpy.array([ 37300,  44500,  79300,  42699,  64500,  37300,  50000,  37300,
       185500,  73000, 235500,  97400, 271400, 289200, 501900, 134000])
r=numpy.array([['522378', '1039847', '522378', '1039847', '522378', '1039847',
        '522378', '1039847', '522378', '1039847', '522378', '1039847',
        '522378', '1039847', '522378', '1039847'],
       ['521964', '1040563', '521964', '1040563', '521964', '1040563',
        '521964', '1040563', '521964', '1040563', '521964', '1040563',
        '521964', '1040563', '521964', '1040563'],
       ['522051', '1040675', '522051', '1040675', '522051', '1040675',
        '522051', '1040675', '522051', '1040675', '522051', '1040675',
        '522051', '1040675', '522051', '1040675'],
       ['522128', '1040708', '522128', '1040708', '522128', '1040708',
        '522128', '1040708', '522128', '1040708', '522128', '1040708',
        '522128', '1040708', '522128', '1040708'],
       ['521858', '1040674', '521858', '1040674', '521858', '1040674',
        '521858', '1040674', '521858', '1040674', '521858', '1040674',
        '521858', '1040674', '521858', '1040674'],
       ['522378', '1040847', '522378', '1040847', '522378', '1040847',
        '522378', '1040847', '522378', '1040847', '522378', '1040847',
        '522378', '1040847', '522378', '1040847'],
       ['521814', '1040677', '521814', '1040677', '521814', '1040677',
        '521814', '1040677', '521814', '1040677', '521814', '1040677',
        '521814', '1040677', '521814', '1040677'],
       ['521378', '1039847', '521378', '1039847', '521378', '1039847',
        '521378', '1039847', '521378', '1039847', '521378', '1039847',
        '521378', '1039847', '521378', '1039847'],
       ['521952', '1040772', '521952', '1040772', '521952', '1040772',
        '521952', '1040772', '521952', '1040772', '521952', '1040772',
        '521952', '1040772', '521952', '1040772'],
       ['522054', '1040891', '522054', '1040891', '522054', '1040891',
        '522054', '1040891', '522054', '1040891', '522054', '1040891',
        '522054', '1040891', '522054', '1040891'],
       ['521798', '1040816', '521798', '1040816', '521798', '1040816',
        '521798', '1040816', '521798', '1040816', '521798', '1040816',
        '521798', '1040816', '521798', '1040816'],
       ['521976', '1040917', '521976', '1040917', '521976', '1040917',
        '521976', '1040917', '521976', '1040917', '521976', '1040917',
        '521976', '1040917', '521976', '1040917'],
       ['521916', '1040899', '521916', '1040899', '521916', '1040899',
        '521916', '1040899', '521916', '1040899', '521916', '1040899',
        '521916', '1040899', '521916', '1040899'],
       ['521823', '1040891', '521823', '1040891', '521823', '1040891',
        '521823', '1040891', '521823', '1040891', '521823', '1040891',
        '521823', '1040891', '521823', '1040891'],
       ['521875', '1040963', '521875', '1040963', '521875', '1040963',
        '521875', '1040963', '521875', '1040963', '521875', '1040963',
        '521875', '1040963', '521875', '1040963'],
       ['521983', '1041008', '521983', '1041008', '521983', '1041008',
        '521983', '1041008', '521983', '1041008', '521983', '1041008',
        '521983', '1041008', '521983', '1041008']], 
      dtype='|S7')
r2=numpy.linalg.solve(r,r1)
print r2

У меня не выводит, та же самая ошибка

Офлайн

#10 Ноя. 11, 2012 15:44:41

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

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

adray
Видимо внутри какой-нибудь итерационный метод
в доке говорят
The solution to the system of linear equations is computed using an LU decomposition with partial pivoting and row interchanges.

ingushet
У меня не выводит, та же самая ошибка
не знаю зачем оно так делает, скопипастил, все ок. С твоим numpy что-то не в порядке, может быть

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version