Найти - Пользователи
Полная версия: NumPy. Решение системы линейных уравнений.
Начало » Python для новичков » NumPy. Решение системы линейных уравнений.
1 2
ingushet
Здравствуйте!

Решаю систему линейных уравнений.
Массив 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, не могу понять почему
adray
Опишите словами, что должен делать алгоритм или хотя бы приведите массивы к пригодному для копипаста виду:
[3.73, 4.45, 7.93, ...
ingushet
[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
программа должна решить систему из 16 линейных уравнений, в каждом уравнении по 16 элементов
adray
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, итд не объявлены
ingushet
отредактировал код программы, смотрите выше
adray
k5=range(4)    
 ...
   k5[i3][0]=math.pow(m1[i2],i3);
...
TypeError: 'int' object does not support item assignment

k5 задан неверно, нужна двумерная структура
ingushet
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)  
adray
>>> 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 и близко не равны
ingushet
adray
Не знаю, что вы пытаетесь делать во всех этих циклах
Формирую двумерный массив 16x16 (ge) и одномерный массив kon

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