matlab 多元高次非线性函数拟合,回归,求教高手!!!
有这样几个数组自变量n个:x=[...]y=[...]m=[....]w=[.....]..........因变量一个:z=[......]模型1(两个自变量)z=a+b...
有这样几个数组
自变量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基础,这点无需担忧! 展开
自变量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基础,这点无需担忧! 展开
3个回答
展开全部
推荐你使用一个函数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文件,自己领悟出来的掌握地更牢靠,学长只能帮你到这里了。
第一步:你需要建立一个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除了函数不是还有很多工具么?能否让他自行帮我找出最合适的函数模型?上面的预估值无从下手啊
追答
恐怕没有这样的工具,你要拟合肯定要知道大概的模型,至于初始值,你可以随便赋一组,然后把拟合得到的结果再作为初始值再次拟合,反复几次即可。而且,一组数据可以有很多模型能够拟合出来,模型的选择还得靠你自己。
展开全部
学习fminisearch函数,用最小二乘法做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
matlab除了函数还有很多工具:
http://www.mathworks.com/help/curvefit/
http://www.mathworks.com/help/curvefit/linear-and-nonlinear-regression.html
Create splines:
http://www.mathworks.com/help/curvefit/construction.html
http://www.mathworks.com/help/curvefit/
http://www.mathworks.com/help/curvefit/linear-and-nonlinear-regression.html
Create splines:
http://www.mathworks.com/help/curvefit/construction.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询