以数字方式查找参数

计算科学 回归 最小二乘 曲线拟合
2021-12-21 05:18:34

我怀疑函数的形式为我可以访问的几个值。如何以数字方式查找参数f(x,y)f(x,y)=a(bx+c)dy+ef(x,y){a,b,c,d,e}

通过为固定绘制,我会得到一条线性曲线,这会给我找到的希望。但是现在获得超出了我的范围。logflogyx{d,e}{b,c}

2个回答

通常,您可以将其表述为非线性最小二乘问题。如果您的值在点处已知,并且已知值为,那么您可以最小化(xi,yi)fi

mina,b,c,d,ei=1n(fia(bxi+c)dyi+e)2

Levenberg-Marquardt 方法通常用于解决此类非线性最小二乘问题。您可以在许多软件包中找到实现。

如果可以推荐使用 Python 和 SciPy 的解决方案,您可以使用curve-fitscipy 中的函数来完成这项工作。

import scipy.optimize as op
import numpy as np

def func(xydata,a,b,c,d,e):
    x = xydata[:,0]
    y = xydata[:,1]
    return a*(b*x + c)**(d*y + e)

# Assuming you have your f(x,y) data in a file with
# three columns separated by comma e.g. x1,y1,f1
data = np.loadtxt('data.txt',delimiter=',')
xydata = data[:,0:2] # the first two columns
fdata = data[:,2] # the last column

# Use scipy to calculate the optimum parameter values
p_opt, p_conv = op.curve_fit( func, xydata, fdata )
print(popt)