Форум сайта python.su
0
Надо решить систему линейных уравнений. Из массивов s и d я получаю левую часть, а массив so4 это правая часть:
import numpy as np import math s = np.array([52.2378,52.1964,52.2051,52.2128,52.1858,52.2378,52.1814,52.1378,52.1952,52.2054,52.1798,52.1976,52.1916,52.1823,52.1875,52.1983]) d = np.array([103.9847,104.0563,104.0675,104.0708,104.0674,104.0847,104.0677,103.9847,104.0772,104.0891,104.0816,104.0917,104.0899,104.0891,104.0963,104.1008]) so4=np.array([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=np.zeros([16,16]) k=0;k1=0; for i in range(16): for i1 in range(4): u=math.pow(d[i],i1) for j in range(4): h=u*math.pow(s[i],j) ge[k][k1]=h; k1=k1+1; k1=0; k=k+1; xr = np.linalg.solve(ge,so4) k1=0; ge1=0; # # #Проверка решения # t=52.2378;t1= 103.9847; for i1 in range(4): u=math.pow(t1,i1) for j in range(4): h=u*math.pow(t,j) ge1=ge1+(h*xr[k1]); k1=k1+1;
Офлайн
0
Хотя бы предположения, очень нужна помощь
Офлайн
1
Скорее всего проблема в большой (16x16) размерности задачи. Исходный массив содержит очень большие коэффициенты (ge.max()), из за чего даже небольшие погрешности приводят к существенному искажению результата. Т.е. неверно считает именно np.linalg.solve. В этом легко убедиться т.к. np.sum(ge*xr, axis=0) не равно so4.
Если заменить решатель linalg.lstsq, то результат лучше, хотя также далек от идеала.
Офлайн
0
commкак ей пользоваться?
linalg.lstsq
xr = np.linalg.lstsq(ge,so4) fg=np.dot(ge, xr[0])??
Офлайн
0
ingushetА есть ли какое нибудь ПО для решения таких задач, либо среда разработки?
Скорее всего проблема в большой (16x16) размерности задачи.
Отредактировано ingushet (Март 5, 2013 04:45:22)
Офлайн
0
ingushet
matlab, mathematica, maple, mathcad.
Офлайн
253
DwarfЯ ваши уравнения не смотрел, но
А есть ли какое нибудь ПО
x+y=1 x+y=2
x+y=1 x+y=1
Офлайн