MATLAB中的nlinfit命令

时间:2013-10-06 06:55:20

标签: matlab 3d curve-fitting

我给出了x,y和z的数据。我试图将一组数据拟合到功能形式的模型中,如下所述:

z(x, y) = c0*x^o*y2 + c1*x^1*y^1 + c2 *x^2*y^1

其中c0,c1,c2是要找到的系数。 我的尝试是使用nlinfit函数来解决它。

到目前为止,我已经尝试了

x= [ 0.001, .. 0.011];

y = [1, .. 10];

z = [ -.304860225 .. .379710865]; 

my_model= c0 * x^0 * y^2 + c1 * x^1 * y^1 + c2 * x^2 * y^0

[c0 c1 c2] = [1 2 3];

C= nlinfit( [x,y], z, @ my_model, [1 2 3])

此处xy是自变量,z是因变量。 如何为系数设置这些初始值? 我不确定如何在nlinfit函数中传递参数。 HELP !!!

1 个答案:

答案 0 :(得分:2)

您的模型是LINEAR w.r.t c0c1c2。这里没有理由使用nlfit

您需要为x y数据构建Vandermonde matrix并使用反斜杠来恢复系数。

你的问题不是100%清楚模型是什么,所以我假设:

z(x,y) = c0 * x^nx0 * y^ny0 + c1 * x^nx1 * y^ny1 + c2 * x^nx2 * y^ny2

nx0nx1nx2ny0ny1ny2给出且已知a-priori。

您获得m分,即m - 向量xyz,您希望得到c0 c1c2给出了这三个m - 向量。

此模型的Vandermonde矩阵是

V = [ ( x(:).^nx0 ).*( y(:).^ny0 ),  ( x(:).^nx1 ).*( y(:).^ny1 ),  ( x(:).^nx2 ).*( y(:).^ny2 ) ];

现在请注意,您的模型为右侧V*c = z的LINEAR:c = [c0; c1; c2]

恢复c(在最小二乘意义上)

c = V \ z