Форум сайта python.su
0
Здравствуйте!
Решаю систему линейных уравнений.
Массив 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
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
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
Отредактировано ingushet (Ноя. 15, 2012 15:49:36)
Офлайн
18
Опишите словами, что должен делать алгоритм или хотя бы приведите массивы к пригодному для копипаста виду:
[3.73, 4.45, 7.93, ...
Офлайн
0
[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)
Офлайн
0
программа должна решить систему из 16 линейных уравнений, в каждом уравнении по 16 элементов
Офлайн
18
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
Офлайн
0
отредактировал код программы, смотрите выше
Офлайн
18
k5=range(4) ... k5[i3][0]=math.pow(m1[i2],i3); ... TypeError: 'int' object does not support item assignment
Офлайн
0
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)
Офлайн
18
>>> 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 ])
Офлайн
0
adrayФормирую двумерный массив 16x16 (ge) и одномерный массив kon
Не знаю, что вы пытаетесь делать во всех этих циклах
adrayвот я и пытаюсь понять почему, буквально строчкой выше
dot(f2,xr) и f3 и близко не равны
xr = numpy.linalg.solve(f2,f3)
Отредактировано ingushet (Ноя. 16, 2012 00:45:14)
Офлайн