Уведомления

Группа в Telegram: @pythonsu

#1 Март 3, 2013 08:32:05

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

Numpy. Система линейных уравнений.

Надо решить систему линейных уравнений. Из массивов 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, Почему?

Офлайн

#2 Март 4, 2013 03:12:53

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

Numpy. Система линейных уравнений.

Хотя бы предположения, очень нужна помощь

Офлайн

#3 Март 4, 2013 18:05:35

comm
От:
Зарегистрирован: 2010-02-26
Сообщения: 23
Репутация: +  1  -
Профиль   Отправить e-mail  

Numpy. Система линейных уравнений.

Скорее всего проблема в большой (16x16) размерности задачи. Исходный массив содержит очень большие коэффициенты (ge.max()), из за чего даже небольшие погрешности приводят к существенному искажению результата. Т.е. неверно считает именно np.linalg.solve. В этом легко убедиться т.к. np.sum(ge*xr, axis=0) не равно so4.

Если заменить решатель linalg.lstsq, то результат лучше, хотя также далек от идеала.



Офлайн

#4 Март 5, 2013 02:49:33

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

Numpy. Система линейных уравнений.

comm
linalg.lstsq
как ей пользоваться?
xr = np.linalg.lstsq(ge,so4)
fg=np.dot(ge, xr[0])??

Офлайн

#5 Март 5, 2013 04:44:43

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

Numpy. Система линейных уравнений.

ingushet
Скорее всего проблема в большой (16x16) размерности задачи.
А есть ли какое нибудь ПО для решения таких задач, либо среда разработки?

Отредактировано ingushet (Март 5, 2013 04:45:22)

Офлайн

#6 Март 5, 2013 18:58:39

Dwarf
От:
Зарегистрирован: 2011-05-09
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Numpy. Система линейных уравнений.

ingushet
matlab, mathematica, maple, mathcad.



Офлайн

#7 Март 5, 2013 20:21:09

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Numpy. Система линейных уравнений.

Dwarf
А есть ли какое нибудь ПО
Я ваши уравнения не смотрел, но
Для решения некоторых задачек ПО не существует не потому, что не придумали ПО, а потому что самого решения не существует.

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



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version