Я пытаюсь выполнить наименьшие квадраты, подходящие в python для известной функции с тремя переменными. Я могу выполнить эту задачу для случайно сгенерированных данных с ошибками, но фактические данные, которые мне нужно подогнать, включают некоторые точки данных, которые являются верхними пределами значений. Функция описывает поток как функцию длины волны, но в некоторых случаях поток, измеренный на заданной длине волны, является не абсолютным значением с ошибкой, а скорее максимальным значением потока, при этом реальное значение может быть любым ниже этого значения вплоть до нуля. .
Есть ли способ сообщить задаче подбора, что некоторые точки данных являются верхними пределами? Кроме того, мне нужно сделать это для ряда наборов данных, и количество точек данных, которые могут быть верхними пределами, различается для каждого из них, поэтому возможность делать это автоматически была бы полезной, но не обязательной.
Я извиняюсь, если что-то из этого неясно, я постараюсь объяснить это более ясно, если это необходимо.
Код, который я использую для соответствия моим данным, приведен ниже.
import numpy as np
from scipy.optimize import leastsq
import math as math
import matplotlib.pyplot as plt
def f_all(x,p):
return np.exp(p[0])/((x**(3+p[1]))*((np.exp(14404.5/((x*1000000)*p[2])))-1))
def residual(p,y,x,error):
err=(y-(f_all(x,p)))/error
return err
p0=[-30,2.0,35.0]
data=np.genfromtxt("./Data_Files/Object_001")
wavelength=data[:,0]
flux=data[:,1]
errors=data[:,2]
p,cov,infodict,mesg,ier=leastsq(residual, p0, args = (flux, wavelength, errors), full_output=True)
print p
residual
? - person Benjamin Bannier   schedule 08.01.2014