2013-10-16 4 views
0

Я знаю, что есть пример наименьшего квадрата в scipy.optimize, но у меня настоящие проблемы с остаточной функцией более трех дней. Я решил полностью описать проблему. Я обнаружил некоторые другие подобные проблемы через сайт, но я не мог понять это в программном отношении и действительно смущен в моем случае. Я не мог правильно создать остаточную функцию, которая подходит для scipy.optimize.leastsq остаточный. Я действительно стек.Остаточный для наименьшего квадрата scipy.optimize.leastsq(), оптимальное решение

Эта проблема - это точно проблема A * x = b. Позвольте мне объяснить это коротко:

ВХОД:

  • у - например: y1 = точка (delta_1, массив ([x2, x5, x6]))
  • х - 8 неизвестных [x2 , x4, x5, x6, x7, x10, x13, x16]
  • delta - length.

шагов:

  • функция F (x_m, delta_n_m), N - строки, м - смещ_по_столбцы.
  • остаточная | b_n - ф (х, дельта) |^2
  • минимизировать остаточное использование scipy.optimize.leastsq (остаточные, x0, Arg (дельта))

У меня есть функция , остаточный, минимизатор и INPUTS, но, я действительно стоп с моей остаточной функцией.

находка: - (x2, x4, x5, x6, x7, x10, x13, x16), поэтому я ставлю все значения в коде.

коды:

import numpy as np 
from scipy.optimize import leastsq 


def function(x,delta): 
     return dot(delta, x) 

def residual(x, delta, y): 
     error = y - dot(delta, x) 
     return sum(error**2) 


def main():  


    # INPUTS 
    # Unknown values 
    x = [x2, x4, x5, x6, x7, x10, x13, x16] 

    delta = np.array([1.76762035, 2.04349174, 1.25674742], 
        [0.94873891, 2.01859342, 1.46348023], 
        [0.83678402, 1.12030343, 0.92516861], 
        [1.43, 2., 2., 1.57]) 

    y = np.array([0.8353410485015903, 0.73620941924970962, 
       0.45428639186344633, 1.6180418445100002] 

    x_init = np.zeros(len(x)) 

    result = leastsq(residual, x, args=(delta,y)) 

    print result[0] 

if __name__ == '__main__': 
     main() 

ответ

1

leastsq ожидает, что остаточная функция возвращает только остаточный, т.е .:

def residual(x, delta, y): 
    return y - dot(delta, x) 
+0

Привет христианин, спасибо! Я тестировал это, но, что бы вы подумали об исправлении 'ValueError: объекты не выровнены', не изменяя форму delta ?? Кстати, в начале кода x фактор должен быть отключен, coz неизвестно – Spider

+2

Исправьте свой код так, чтобы он был запущен, тогда я смогу просмотреть сообщения об ошибках. –

Смежные вопросы