matlab二元函数拟合求参数问题,已知模型求参数

因变量z,和自变量x,y已知,求参数 k1, k2,k3(三者都大于0)
Function y=k1*k2*k3*x*y/(k1*k3*x*y+k1*k2*x+k3*y)
x,y,z对应如下:
z x y
5.43659E-4 33.3 50
5.41856E-4 33.3 40
5.29475E-4 33.3 33.3
4.00266E-4 33.3 20
2.02196E-4 33.3 10
8.74091E-5 33.3 5
7.81834E-4 50 33.3
6.21649E-4 40 33.3
5.71037E-4 33.3 33.3
4.54338E-4 20 33.3
4.17541E-4 10 33.3
2.12277E-4 5 33.3
请教能否用lsqcurvefit或其他函数求解,跪谢。

第1个回答  2011-06-23
你的问题是多元函数非线性拟合,因为是多元的,所以不太方便使用lsqcurvefit,因为不是多项式,所以不方便使用regress或polyfit。
此处,可采用nlinfit,从函数名字直面理解就是nonlinear fit。
nlinfit的使用格式是beta = nlinfit(X,y,fun,beta0)
此处beta就是你需要拟合得到的系数k1,k2,k3,X是输入变量矩阵n*p,n为样本个数,这里n=12,p为自变量个数,这里你的输入是x和y,所以p=2。y是你给出的因变量值,这里对应你给出的z。fun就是你给出的被拟合的函数。beta0是系数beta的初始迭代值。
先给出子函数的形式:
function f=myfun(beta,x)
b1=beta(1);
b2=beta(2);
b3=beta(3);
x1=x(:,1);
x2=x(:,2);
f=b1*b2*b3*x1.*x2./(b1*b3.*x1.*x2+b1*b2.*x1+b3*x2);

有些内容无法发出,我把它放到我的空间里面了
http://hi.baidu.com/zhangkai1201/blog/item/21e698231468da4b9822ed9f.html?timeStamp=1308831358087追问

老师,你的方法算出来的结果明显不对啊。。。

追答

1我不是老师
2求解过程的警告显示矩阵奇异,结果会有差错,而造成矩阵奇异的在我看来就是原始数据有点问题,自变量和因变量的数量级差别有些大,自变量是1e1级别,而因变量是1e-4,差了5个量级。如果用多项式拟合是不是会好一些。

相似回答