matlab 多元高次非线性函数拟合,回归,求教高手!有这样几个数组自变量n个:x=[...]y=[...]m=[.]w=[.].因变量一个:z=[.]模型1(两个自变量)z=a+b*x+c*x^(1/2)+d*x^2+e*y+f*y^(1/2)+g*y^2+h*x*y;模型2(三个自变量)
matlab 多元高次非线性函数拟合,回归,求教高手!有这样几个数组自变量n个:x=[...]y=[...]m=[.]w=[.].因变量一个:z=[.]模型1(两个自变量)z=a+b*x+c*x^(1/2)+d*x^2+e*y+f*y^(1/2)+g*y^2+h*x*y;模型2(三个自变量)
matlab 多元高次非线性函数拟合,回归,求教高手!
有这样几个数组
自变量n个:
x=[...]
y=[...]
m=[.]
w=[.]
.
因变量一个:
z=[.]
模型1(两个自变量)
z=a+b*x+c*x^(1/2)+d*x^2+e*y+f*y^(1/2)+g*y^2+h*x*y;
模型2(三个自变量)
z=a+b*x+c*y+d*m+e*x^2+f*y^2+g*m^2;
模型3(三个自变量)
z=a+b*x+c*y+d*m+e*x^2+f*y^2+g*m^2+h*x^(1/2)+i*y^(1/2)+j*m^(1/2);
模型4(四个自变量)
z=w*(a+b*x+c*y+d*m+e*x^2+f*y^2+g*m^2);
模型5(四个自变量)
z=w*(a+b*x+c*y+d*m+e*x^2+f*y^2+g*m^2+h*x^(1/2)+i*y^(1/2)+j*m^(1/2));
模型6(n个自变量)
z=.;
求解里面的相关系数a,b,c,d,e.
简单一次函数二次函数二元都会了,但像上面这样的复杂模型该如何求解呢?
其实,模型无所谓,我需要的是尽可能的把上面的点拟合出来.
有没有直接输入上面的数组,用matlab帮我们构造出最理想的模型的工具或命令,理想模型的标准就是数组上所有数据都是有效数据,都对结果有影响,其实也是我不是解数学题,而是解决实际问题,上面的数据都是有效值!
不是数学专业的,上面的名词可能有用错的.但反正目的就一个:
我输入一系列的自变量,能输出一个和实际输出极为接近的值!
授之以鱼不如授之以渔,希望能教会我如何使用matlab进行数值的拟合、回归、求解之类的.本人拥有一定的matlab基础,这点无需担忧!
matlab 多元高次非线性函数拟合,回归,求教高手!有这样几个数组自变量n个:x=[...]y=[...]m=[.]w=[.].因变量一个:z=[.]模型1(两个自变量)z=a+b*x+c*x^(1/2)+d*x^2+e*y+f*y^(1/2)+g*y^2+h*x*y;模型2(三个自变量)
推荐你使用一个函数nlinfit,我简单给你介绍一下使用方法,以你的模型2为例:
第一步:你需要建立一个function文件,名字随便,这里我们命名为"hougen",在这个文件内,你要把模型二描述清楚,首先我们假定beta=[a;b;c;d;e;f;g];X=[x,y,m];那么该函数文件内部为:
function z=hougen(beta,X)
for i=1:n ;//这里的n是指你已有数据的长度,比如你已有的结果z=[3,2,2,3,4];n就是5,i其实就是第i次的原始数据
a=beta(i,1);b=beta(i,2);……
x=X(i,1);……
z(i)=a+b*x+c*y+d*m+e*x^2+f*y^2+g*m^2;
end
第二步:你就可以直接用下面的命令了
betahat = nlinfit(X,z,@hougen,beta);
X是一个n*3的矩阵,用已知的[x,y,m]对其赋值,z是一个n*1的矩阵,用已知的z对其赋值,beta内是初始值,表示你对所求值的一个预估,这个很关键,不能赋值太离谱,你必须给一个合理的初始值.
然后你就得到想要的结果了,其他模型也用类似的办法来做,更细节的问题就靠你自己了,我已经说的很明白了,如果哪里不明白,多想一想,可参考help文件,自己领悟出来的掌握地更牢靠,学长只能帮你到这里了.