我想使用MATLAB将任意度的多元多项式拟合到我的数据中。假设我有两个变量,并且我使用二阶多项式:因此我的多项式是y = c1 + c2 * x1 + c3 * x2 + c4x1 * x2 + c5 * x1 + c6 * x2。还假设我有n个观察值和
X = [X1 X2]
是存储每个观察的(x1,x2)对的矩阵。
一种可能性是使用
C=A\Y
其中Y是对应于每个观测值的响应矢量(x1,x2),A是矩阵
A=[ones(n,1) X1 X2 X1.*X2 X1.^2 X2.^2]
然而,这根本不是通用的,每次修改变量的数量或多项式的次数时,我都必须手工编写A的表达式。理想情况下,我需要一些不错的'bsxfun'技巧:)否则,“丑陋”的循环就可以了。
或者,我可以使用'fitlm',我可以访问:
LM = fitlm(DS,MODELSPEC)
从帮助中,我了解DS是一个包含我的观察结果的数据集(x1,x2,...,xn,y)。但是,MODELSPEC应该是“T-by-V矩阵,其中T是模型中所需的项数,V是DS中变量的数量。(I,J)元素表示变量J在项I中的幂“。我不知道如何为任意程度和数量的变量编写通用的MODELSPEC。你能救我吗?
编辑:为简洁起见,该示例在两个变量中使用了2次多项式。我正在寻找适用于 m 变量中 n 度多项式的解决方案,其中 n 和 m 是任意的。
答案 0 :(得分:0)
好的,这不是我想要的解决方案,所以如果有人想尝试回答,请做:)但是,我希望它对任何有同样问题的人都有帮助!我在MATLAB Central上找到了这个文件:
http://www.mathworks.com/matlabcentral/fileexchange/34765-polyfitn
它类似于@knedlsepp的链接,但是,根据文档,预测(即,未包含在拟合数据中的测试点处的拟合模型的评估)看起来更简单,更灵活。