我试图在Matlab中拟合一个需要输入X和Y值的三维函数(它们必须首先在网格网格中生成)。我在Matlab中使用了lsqcurvefit()函数,但是根据我对文档的理解,它假设它的曲线拟合所提供的数据只需要一个输入参数。
要拟合的功能有如下声明:
function y = dog2DFunction(params, inputX, inputY)
自变量的生成如下:
[xVals, yVals] = meshgrid(-res/2:1:res/2-1);
然后对最终曲线的调用符合数据' Z'该功能如下:
fittedVals2 = lsqcurvefit(@dog2DFunction, guess, xVals, yVals, Z);
但我在" dog2DFunction"中收到错误。这说明没有足够的输入参数告诉我lsqcurvefit并没有通过yVals传递。
有没有办法将两个独立变量传入lsqcurvefit函数?我尝试将xVals和yVals展平,然后将其作为一个大的平面向量传递,然后在" dog2DFunction"中调整大小。函数,但lsqCurve拟合要求输入与要拟合的数据长度相等(在这种情况下,' Z')。
有什么想法吗?
编辑:我找到了解决方案!1)将函数传递给lsqcurvefit,如下所示:
fittedVals2 = lsqcurvefit(@dog2DFunction, guess, [flatten(xVals); flatten(yVals)], flatten(Z));
2)在用于曲线拟合的函数中,添加这些行,以便a)在给定x和y输入的情况下,函数作为独立函数工作; b)当由lsqcurve fit调用时,适应其仅允许的限制一个x输入:
function y = dog2DFunction(params, inputX, inputY)
if ~exist('inputY','var')
inputY = inputX(2,:);
inputX = inputX(1,:);
end
...
end