Найти - Пользователи
Полная версия: NumPy. Решение системы линейных уравнений.
Начало » Python для новичков » NumPy. Решение системы линейных уравнений.
1 2
ingushet
Здравствуйте! Возникла необходимость решить систему из 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
Каждое уравнение с разными коэффициентами.Почему выдает ошибку?
4kpt
Ошибка: матрица вырожденная (матрица, определитель которой равен 0). Проверь…

Дай полный текст программы…
ingushet
проверил :
k=numpy.linalg.det(ge)

k=0.0
ingushet
в математике не силен, возможен ли другой вариант решения?
Либо преобразования для дальнейшего решения?
adray
может быть, нужно найти ФСР? Не уверен, что numpy умеет это делать.
ingushet
что такое ФСР?
sergeek
работает же все
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])
adray
sergeek
работает же все
Это частное решение, причем, наверное, не самое лучшее. Видимо внутри какой-нибудь итерационный метод. Так как ранг матрицы - 2, то общее решение - 14 лнз векторов

фср=Фундаментальная система решений
ingushet
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

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

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

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB