作业帮 > 综合 > 作业

matlab 多元高次非线性函数拟合,回归,求教高手!

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/04/28 03:39:12
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 多元高次非线性函数拟合,回归,求教高手!
推荐你使用一个函数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文件,自己领悟出来的掌握地更牢靠,学长只能帮你到这里了.
再问: 参加过数学建模竞赛,但对曲线拟合这块还不熟。这次因为需要解决一个实际问题,想通过matlab来帮我找出自变量和因变量之间的函数关系。但是我并不知道因变量和自变量的实际函数模型,上面写的模型都是举的例子。matlab除了函数不是还有很多工具么?能否让他自行帮我找出最合适的函数模型?上面的预估值无从下手啊
再答: 恐怕没有这样的工具,你要拟合肯定要知道大概的模型,至于初始值,你可以随便赋一组,然后把拟合得到的结果再作为初始值再次拟合,反复几次即可。而且,一组数据可以有很多模型能够拟合出来,模型的选择还得靠你自己。