曲面拟合Python

问题描述 投票:0回答:1

我试图拟合一组数据(x,y,z)以通过 curve_fit 获得结果曲面的最佳拟合。特别是 z 数组必须是 NxM “矩阵”。为了向您展示一个示例,我将与您分享我编写的代码:

from scipy.optimize import curve_fit
import numpy as np

#Generate random 3D data points
x = np.random.random(10)
y = np.random.random(10)
X,Y = np.meshgrid(x,y)
z = np.sin(X * Y)


def func(xy, a, b, c, d, e, f):
    x, y = xy
    return a + b*x + c*y + d*x**2 + e*y**2 + f*x*y




#Perform curve fitting
popt, pcov = curve_fit(func, (X, Y), z)

#Print optimized parameters
print(popt)

当我启动代码时,出现以下错误

ValueError: object too deep for desired array
Traceback (most recent call last):
  File "C:\Users\..\PycharmProjects\GSP_Speed\prova.py", line 21, in <module>
    popt, pcov = curve_fit(func, (X, Y), z)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\..\PycharmProjects\GSP_Speed\venv\Lib\site-packages\scipy\optimize\_minpack_py.py", line 963, in curve_fit
    res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\..\PycharmProjects\GSP_Speed\venv\Lib\site-packages\scipy\optimize\_minpack_py.py", line 428, in leastsq
    retval = _minpack._lmdif(func, x0, args, full_output, ftol, xtol,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_minpack.error: Result from function call is not a proper array of floats.`

有人可以帮我解决这个问题吗? 非常感谢你

我尝试使用 x,y 和 X,Y 作为 curve_fit 函数的输入,但它不起作用

我已经尝试使用 x,y 和 X,Y 作为 curve_fit 的输入,但没有成功

curve-fitting surface
1个回答
0
投票

我刚刚在 ChatGPT 上复制粘贴了您的帖子,并使用

jupyter notebook
进行了测试,结果为
[-0.04166698  0.13532234  0.12139508 -0.0873608  -0.07659318  0.83186632]
。你自己检查一下吧!

from scipy.optimize import curve_fit
import numpy as np

# Generate random 3D data points
x = np.random.random(10)
y = np.random.random(10)
X, Y = np.meshgrid(x, y)
z = np.sin(X * Y)

def func(xy, a, b, c, d, e, f):
    x, y = xy
    return a + b * x + c * y + d * x**2 + e * y**2 + f * x * y

# Flatten X and Y arrays
X_flat = X.flatten()
Y_flat = Y.flatten()

# Perform curve fitting
popt, pcov = curve_fit(func, (X_flat, Y_flat), z.flatten())

# Print optimized parameters
print(popt)
© www.soinside.com 2019 - 2024. All rights reserved.