私は解析の初心者ですY=a(X1^b) + c(X2^d) + e
(ここでX1、X2は独立変数です)の非線形方程式を解くための解を探しています 以下はフルセットです。残念ながら私たちは多くの観測をしていません。私たちに必要なものは簡単なものです。しかし、このデータには異常値はありません。すべての観測値を考慮する必要があります。非線形方程式を見つけるpython scipy
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: Improper input: N=5 must not exceed 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: Optimal parameters not found: Number of calls to function has reached maxfev = 1200.
次に、変数dを削除して機能を維持しなければならなかった
def func(X, a, b, c ,e):
x1,x2 = X
return a*x1**b + c*x2 + e
最後にそれが実行されても再び警告以下でなかったが、結果は
RuntimeWarning: overflow encountered in power
良いものではありません注
x3 = max(x2 - {(x1^2)*2.6},0)
と
y=a*(x3^b) gives a=0.89 and b=0.58 with r2=0.98 and error=0.19 which is the best one i could get so far
を解決することしかし、私は考え一般化された形式で結果を得たい私との関係を同一視しようとすると、データセットに基づいて、関数x3 = f(x1、x2)は変化する可能性があり、すべての場合について固定式ではない。