Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 15, 2012 12:06:14

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

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

Здравствуйте!

Решаю систему линейных уравнений.
Массив m:

52.2378
52.1964833333
52.2051166667
52.2128833333
52.1858666667
52.2378
52.18145
52.1378
52.1952
52.2054333333
52.17985
52.1976666667
52.1916333333
52.1823833333
52.1875666667
52.19835

Массив m1:
103.9847
104.056333333
104.06755
104.0708
104.0674
104.0847
104.0677
103.9847
104.0772
104.089133333
104.08165
104.091766667
104.0899
104.089166667
104.096366667
104.100833333

Массив m2:
3.73
4.45
7.93
4.27
6.45
3.73
5.0
3.73
18.55
7.3
23.55
9.74
27.14
28.92
50.19
13.4

Код программы:
    
ge=range(16)
kon=range(16)
for iq in range(16):
      ge[iq]=range(16)
 k4=range(4)
 k5=range(4)    
 for i2 in range(16):
             for i3 in range(4):
                 k4[i3]=math.pow(m[i2],i3);
                 k5[i3][0]=math.pow(m1[i2],i3);
             f=numpy.array(k5)
             f1=numpy.array(k4)
             h2= f*f1
             j3=0;
             for i1 in range(4):
                 for j2 in range(4):
                     ge[i2][j3]=h2[i1][j2]
                     j3=j3+1
             kon[i2]=m2[i2]
f2=numpy.array(ge)
f3=numpy.array(kon)
xr = numpy.linalg.solve(f2,f3)
xr1=(numpy.dot(f2, xr) == f3).all()
print "xr:"
print xr1

Выводит xr1=False, не могу понять почему

Отредактировано ingushet (Ноя. 15, 2012 15:49:36)

Офлайн

#2 Ноя. 15, 2012 15:01:47

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

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

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

[3.73, 4.45, 7.93, ...

Офлайн

#3 Ноя. 15, 2012 15:20:26

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

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

[52.2378,52.1964833333,52.2051166667,52.2128833333,52.1858666667,52.2378,52.18145,52.1378,52.1952,52.2054333333,52.17985,52.1976666667,52.1916333333,52.1823833333,52.1875666667,52.19835]
[103.9847,104.056333333,104.06755,104.0708,104.0674,104.0847,104.0677,103.9847,104.0772,104.089133333,104.08165,104.091766667,104.0899,104.089166667,104.096366667,104.100833333]
[3.73,4.45,7.93,4.27,6.45,3.73,5.0,3.73,18.55,7.3,23.55,9.74,27.14,28.92,50.19,13.4]

Отредактировано ingushet (Ноя. 15, 2012 15:21:27)

Офлайн

#4 Ноя. 15, 2012 15:23:53

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

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

программа должна решить систему из 16 линейных уравнений, в каждом уравнении по 16 элементов

Офлайн

#5 Ноя. 15, 2012 15:39:40

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

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

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/numpy/linalg/linalg.py", line 328, in solve
    raise LinAlgError('Singular matrix')
numpy.linalg.linalg.LinAlgError: Singular matrix
Если задаете вопрос, приложите услилия к его оформлению - без дополнительных допилов код не работает, использованные переменные k4, k5, ge, итд не объявлены

Офлайн

#6 Ноя. 15, 2012 15:50:18

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

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

отредактировал код программы, смотрите выше

Офлайн

#7 Ноя. 15, 2012 17:09:01

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

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

k5=range(4)    
 ...
   k5[i3][0]=math.pow(m1[i2],i3);
...
TypeError: 'int' object does not support item assignment

k5 задан неверно, нужна двумерная структура

Офлайн

#8 Ноя. 15, 2012 17:26:54

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

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

ge=range(16)
kon=range(16)
for iq in range(16):
      ge[iq]=range(16)
 k4=range(4)
 k5=range(4)  
for i7 in range(4):
           k5[i7]=range(1)  

Офлайн

#9 Ноя. 15, 2012 17:39:27

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

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

>>> numpy.dot(f2, xr)
array([  5.3125    ,   6.03710938,   9.51757812,   5.85742188,
         8.03320312,   5.29882812,   6.56835938,   5.28320312,
        20.13476562,   8.8828125 ,  25.11914062,  11.31054688,
        28.73046875,  30.50195312,  51.76171875,  14.97070312])
>>> f3
array([  3.73,   4.45,   7.93,   4.27,   6.45,   3.73,   5.  ,   3.73,
        18.55,   7.3 ,  23.55,   9.74,  27.14,  28.92,  50.19,  13.4 ])

Не знаю, что вы пытаетесь делать во всех этих циклах, но dot(f2,xr) и f3 и близко не равны

Офлайн

#10 Ноя. 16, 2012 00:41:23

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

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

adray
Не знаю, что вы пытаетесь делать во всех этих циклах
Формирую двумерный массив 16x16 (ge) и одномерный массив kon

adray
dot(f2,xr) и f3 и близко не равны
вот я и пытаюсь понять почему, буквально строчкой выше
xr = numpy.linalg.solve(f2,f3)
я только сформировал массив.получается что система решена неправильно, но как такое возможно?

Отредактировано ingushet (Ноя. 16, 2012 00:45:14)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version