Найти - Пользователи
Полная версия: Numpy. Система линейных уравнений.
Начало » Python для новичков » Numpy. Система линейных уравнений.
1
ingushet
Надо решить систему линейных уравнений. Из массивов 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;
Вместо нужного 3.73 выводит -24, Почему?
ingushet
Хотя бы предположения, очень нужна помощь
comm
Скорее всего проблема в большой (16x16) размерности задачи. Исходный массив содержит очень большие коэффициенты (ge.max()), из за чего даже небольшие погрешности приводят к существенному искажению результата. Т.е. неверно считает именно np.linalg.solve. В этом легко убедиться т.к. np.sum(ge*xr, axis=0) не равно so4.

Если заменить решатель linalg.lstsq, то результат лучше, хотя также далек от идеала.
ingushet
comm
linalg.lstsq
как ей пользоваться?
xr = np.linalg.lstsq(ge,so4)
fg=np.dot(ge, xr[0])??
ingushet
ingushet
Скорее всего проблема в большой (16x16) размерности задачи.
А есть ли какое нибудь ПО для решения таких задач, либо среда разработки?
Dwarf
ingushet
matlab, mathematica, maple, mathcad.
doza_and
Dwarf
А есть ли какое нибудь ПО
Я ваши уравнения не смотрел, но
Для решения некоторых задачек ПО не существует не потому, что не придумали ПО, а потому что самого решения не существует.

Попробуйте добиться правильных значений x,y для системы уравнений
x+y=1
x+y=2
тут вообще нет решения.
x+y=1
x+y=1
А тут решений бесконечно много, Вам какое надо?
lstsq без понимания проблемы не надо пользоваться. Вы просто неправильно поставили задачу или неправильно заполнили матрицу.
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