24小时热门版块排行榜    

查看: 321  |  回复: 2

yujnu888

铜虫 (小有名气)

[求助] 求助如何给参数设定范围 已有1人参与

本人在使用Mathematica作非线性拟合,有三个参数(a,b,c),其中一个参数c设定范围为0《c《1,
data = {{0, 0}, {0.3, 0.029}, {1.375, 0.037}, {1.6, 0.04}, {2, 0.044}, {4, 0.06031133}, {5, 0.06}, {8, 0.07}, {10, 0.08}, {16, 0.09}, {25, 0.16}, {37, 0.19}, {47, 0.21}, {58, 0.29}};
model = 0.3*(c*(1 - 0.56 Exp[-0.006 b x]) + (1 - c)*(1 - Exp[-a x]));
fit = FindFit[data, model, {a, b, c}, x]
modelf = Function[{x}, Evaluate[model /. fit]]
Plot[modelf[x], {x, 0, 100}, Epilog -> Map[Point, data]]
nlm = NonlinearModelFit[data, 0.3*(c*(1 - 0.56 Exp[-0.006 b x]) + (1 - c)*(1 - Exp[-a x])), {a, b, c}, x];
nlm["RSquared"]

求助应该在哪里如何添加?
回复此楼

» 猜你喜欢

已阅   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
yujnu888: 金币+10, ★★★★★最佳答案, 完美解决! 2015-10-03 10:22:44
默认情况下的拟合效果不是还可以吗……是c必须要在这个范围?那么:
CODE:
FindFit[data, {model, 0 < c < 1},{a, b, c}, x]

效果反而变差了……

此外还有一种语法,不过这个严格来说只是给出初值,不是限制范围:
CODE:
FindFit[data, model,{{a,100,150},{b,2,4},{c,0,1}}, x]

这个和FindRoot的给两个初值的语法其实是一样的。你也可以给出3个或者1个初值,不过注意这里每个参数给的初值数必须一样。
小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
2楼2015-10-03 09:39:36
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

yujnu888

铜虫 (小有名气)

引用回帖:
2楼: Originally posted by xzczd at 2015-10-03 09:39:36
默认情况下的拟合效果不是还可以吗……是c必须要在这个范围?那么:

FindFit

效果反而变差了……

此外还有一种语法,不过这个严格来说只是给出初值,不是限制范围:
FindFit
这个和FindRoot的给两个初值 ...

是的,c值必须在这个范围。多谢大神!
3楼2015-10-03 10:22:27
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yujnu888 的主题更新
信息提示
请填处理意见