请参阅 Matlab 文档以获取 fitnlm,这是他们用于非线性回归分析的最全面和主流的工具。它于 2013b 年推出。旧函数是nlinfit。
使用它的一种方法是,来自上面链接的文档
mdl = fitnlm(X, y, modelfun, beta0)
这里的X = [x1, x2] 是一个由向量x1 和x2 构建的矩阵,其中包含预测变量的数据(您的x 和y)。上面的y 是带有响应数据的向量(您的z)。 modelfun 是您提供功能依赖的地方。这可以通过两种方式完成,下面我使用更简单的“字符串语法”。在您的z = a*tanh(-b*x/a)+c + (d*y) 的情况下,建模功能是
modelfun = `y~(b1*tanh(-b2*x1/b1)+b3+b4*x2)`
请注意,这是准确的语法,'y~(...)'。请参阅上面链接的fitnlm 页面上“示例”下的“使用模型字符串语法指定非线性回归”。
最后,beta0 是具有未知系数初始值的向量。 (为此获得合理的值对于成功建模非常关键。)
所以你要确定的系数是(b1, b2, b3, b4),向量beta0应该有它们的初始值,开始拟合。
然后,假设您已经使用您的数据构建了X = [x1, x2] 矩阵并为beta0 选择了值,
modfun = 'y~(b1*tanh(-b2*x1/b1)+b3+b4*x2)';
nlm = fitnlm(X, y, modfun, beta0);
display(nlm);
这应该会显示系数和一些统计数据的拟合值。
有用的页面可以在non-linear regression 和这个overview 上,并带有资源链接。