是否可以曲线拟合具有多个输入的函数?

时间:2016-07-20 19:25:22

标签: matlab curve-fitting

我试图在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

0 个答案:

没有答案