Для простоты я опустил детали самой модели, но у меня есть предопределенная функция errfunc, которая принимает массив параметров. в качестве первого аргумента и наборы данных t (время) и y в качестве дополнительных аргументов. Эта функция возвращает одномерный массив остатков (модель-данные), который состоит из объединения остатков для каждого набора начальных условий. Мой код для запуска оптимизации выглядит примерно так:
Код: Выделить всё
param = np.array([param1_init, param2_init, param3_init, param4_init])
result = least_squares(errfunc, param, bounds=(0,np.inf), args=(t_data1, y_data1, t_data2, y_data2, t_data3, y_data3))
Код: Выделить всё
residual = errfunc(param, t_data1, y_data1, t_data2, y_data2, t_data3, y_data3)
print(np.all(np.isfinite(residual)))
Код: Выделить всё
plt.plot(residual)
Графики остатков при начальных значениях параметров
Мой вопрос заключается в том, есть ли что-то, что я не учел, что могло бы будет возвращать эту ошибку?
Для очень похожей на эту модели оптимизация работает отлично. Единственное отличие модели — это дополнительный член в дифференциальном уравнении и дополнительный параметр для оптимизации. Моя единственная мысль заключается в том, что очень большие и маленькие значения параметров могут играть роль. Дополнительный параметр, который я ввел, имеет очень маленькое положительное значение (обычно около 1e-29), но, как я показал, значения по этой шкале дают разумные результаты модели. Может ли это повлиять на алгоритм наименьших квадратов и привести к возникновению этой ошибки?
Подробнее здесь: https://stackoverflow.com/questions/753 ... he-initial
Мобильная версия