Я пытаюсь приспособить функцию к некоторым данным в Python, используя библиотеку LMFIT для нелинейных функций. Это достаточно просто, но я хочу знать, есть ли способ ограничить некоторые свойства подобранных значений.
Например, в следующем коде я подгоняю свои данные для оптимизации значений A, B и C. Но я также хочу, чтобы отношение A к B было равным pi / 4, умноженному на некоторое целое число. Есть ли способ наложить это ограничение?
from lmfit import Model
import numpy
from numpy import cos, sin, pi, linspace
Загрузить данные:
data = numpy.genfromtxt('data')
axis = numpy.genfromtxt('axis')
Определите функцию:
def func(x, A, B, C):
return (A*cos(x)*cos(x) + B*sin(x)*sin(x) + 2*C*sin(x)*cos(x))**2
Я должен сделать первоначальное предположение о своих параметрах:
a = 0.009
b = 0.3
c = 0.3
Затем создайте модель, соответствующую моей функции:
func_model = Model(func)
Подгоните функцию к входным данным с начальными предположениями (A = a, B = b, C = c):
result = func_model.fit(data, x=axis, A = a, B = b, C = c)
fitted_vals = result.best_values #dictionary structure
Afit = fitted_vals['A']
Bfit = fitted_vals['B']
Cfit = fitted_vals['C']
Как я могу убедиться, что отношение Afit к Bfit равно числу pi / 4, умноженному на целое число?
Если это невозможно, знает ли кто-нибудь о программном обеспечении, в котором есть такая возможность?