matlab创建非线性模型拟合:两个独立变量线性和非线性

时间:2016-03-23 23:12:06

标签: matlab model

我试图将非线性回归模型与两个预测变量拟合。我在编写模型时遇到了麻烦。

z =因变量 x =与z定义关系的自变量:a*tanh(-b*x/a)+c

与z的关系是线性的。但由于我的数据范围只是线性的

这是我到目前为止所做的:

a*tanh(-b*x/a)+c + (d*y)

理想情况下,我希望有一个第三个分类独立变量,可用数字表示0或1

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

请参阅Matlab文档中的fitnlm,这是他们用于非线性回归分析的最全面和主流的工具。它是在2013b推出的。旧功能为nlinfit

使用它的一种方法是,从上面链接的文档

mdl = fitnlm(X, y, modelfun, beta0)

此处X = [x1, x2]是使用向量x1x2构建的矩阵,其中包含预测变量的数据(您的xy)。上面的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位于资源链接上。

答案 1 :(得分:1)

文档指出fitnlm无法用于分类数据

fitnlm reference