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

因变量z,和自变量x,y已知,求参数k1,k2,k3(三者都大于0)Functiony=k1*k2*k3*x*y/(k1*k3*x*y+k1*k2*x+k3*y)x,y,... 因变量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或其他函数求解,跪谢。
展开
 我来答
zhangkai1201
2011-06-23 · TA获得超过460个赞
知道小有建树答主
回答量:109
采纳率:0%
帮助的人:116万
展开全部
你的问题是多元函数非线性拟合,因为是多元的,所以不太方便使用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个量级。如果用多项式拟合是不是会好一些。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式