mathematica非线性拟合
求大神解答!!!拟合的形式是Log((5.47-2*a+y)/(4*y-2*a))=1/150*b*x,我有一批x相应y的数据,想求参数a、b。用mathematica应...
求大神解答!!! 拟合的形式是Log((5.47-2*a+y)/(4*y-2*a))=1/150*b*x ,我有一批x相应y的数据,想求参数a、b。用mathematica应该怎么写啊?(包括x、y的录入方式也不知道。。。) 谢谢!
展开
2个回答
展开全部
data = {{1, 1.81747}, {2, 1.8204}, {3, 1.82137}, {4, 1.82186}, {5, 1.82216}, {6, 1.82235}, {7, 1.82249}, {8, 1.8226}, {9, 1.82268}, {10, 1.82275}, {11, 1.8228}, {12, 1.82284}, {13, 1.82288}, {14, 1.82291}, {15, 1.82294}, {16, 1.82297}, {17, 1.82299}, {18, 1.82301}, {19, 1.82302}, {20, 1.82304}};
solu = Flatten[Solve[Log[10,(5.47 - 2 a + y)/(4 y - 2 a)] == 1/(150 b x), y]];
fitparameter = (FindFit[data, y /. solu, {a, b}, x])
fit = y /. solu /.fitparameter;
Show[ListPlot[data, PlotStyle -> Red], Plot[fit, {x, 1, 20}]]
将上述代码中的data输入成你需要的数据点即可,最后一行代码中的{x, 1, 20}用来调整画图的定义域范围
solu = Flatten[Solve[Log[10,(5.47 - 2 a + y)/(4 y - 2 a)] == 1/(150 b x), y]];
fitparameter = (FindFit[data, y /. solu, {a, b}, x])
fit = y /. solu /.fitparameter;
Show[ListPlot[data, PlotStyle -> Red], Plot[fit, {x, 1, 20}]]
将上述代码中的data输入成你需要的数据点即可,最后一行代码中的{x, 1, 20}用来调整画图的定义域范围
更多追问追答
追答
你做不出来的原因是:
1、Log后面的括号要使用方括号,这是mathematica的语法
2、你在Solve中调换了函数与自变量,但是在下面fitparameter和fit内的变量没有调换,弄清楚到底哪个是x,哪个是y,要与你输入的点对应
另外,需要明确你的拟合方程里Log使用的底数是10,还是e。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |