Я новичок в аналитике, я ищу решение, чтобы найти модель для решения нелинейного уравнения формы Y=a(X1^b) + c(X2^d) + e
(где X1, X2 - независимые переменные) Ниже приведен полный набор, к сожалению, у нас мало наблюдений, все, что нам нужно является любой простой подгонкой. Но эти данные не имеют выбросов, необходимо учитывать каждое наблюдение.
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import numpy as np
import sympy as sym
x1=np.array([217,160,97,75])
x2=np.array([5.319751464,6.88536761,5.319751464,5.319751464])
x3=np.array([143.420635344,36.7384534912,23.420635344,1.420635344])
y=np.array([14,7,7,1])
def func(X, a, b, c ,d , e ):
x1,x2 = X
return a*x1**b + c*x2**d + e
popt, pcov = curve_fit(func, (x1,x2), y)
plt.plot(y, func((x1,x2), *popt), label="Fitted Curve")
plt.legend(loc='upper left')
plt.show()
но запуск curve_fit дает мне ошибку, говорящую, что
TypeError: Неверный ввод: N=5 не должно превышать M=4
Затем мне пришлось добавить еще несколько фиктивных входных данных, поскольку наблюдения за почти одинаковыми значениями добавляли разницу в десятичных точках, что приводило к ошибке.
x1=np.array([217,160,97,75,76,219])
x2=np.array([5.319751464,6.88536761,5.319751464,5.319751464,5.319751464,5.319751464])
x3=np.array([143.420635344,36.7384534912,23.420635344,1.420635344,1.420635344,143.420635344])
y=np.array([14,7,7,1,1,14])
RuntimeError: Оптимальные параметры не найдены: количество вызовов функции достигло maxfev = 1200.
Затем мне пришлось удалить переменную d и сохранить функцию как
def func(X, a, b, c ,e ):
x1,x2 = X
return a*x1**b + c*x2 + e
Наконец, он запустился, но снова с предупреждением ниже, но результаты не очень хорошие.
RuntimeWarning: переполнение мощности
Обратите внимание, что
х3 = макс (х2 - {(х1 ^ 2) * 2,6}, 0)
и решение
y = a * (x3 ^ b) дает a = 0,89 и b = 0,58 с r2 = 0,98 и ошибкой = 0,19, что является лучшим, что я мог получить до сих пор
Но я хотел бы получить результат в обобщенной форме, не пытаясь приравнять отношение. Поскольку на основе набора данных функция x3=f(x1,x2) может меняться, и это не фиксированное уравнение для всех случаев.