鸿飞宇 2007-8-18 10:29
【求助】关于1stOPT拟合时的一个表达式错误,恳请高手相助
[color=blue] 就是一个简单的拟合问题,如下所示(数据有省略)。运行时总是说“函数字符串有误”,就是“Function一行有误”。可检查不出语法有何错误,但我发现如果把函数式中的常数C去掉,就可运行,难道是因为C值太大,可是sinh函数的定义域是整个实数域呀,而且C值大并不表示sinh里面的函数体数值大,因为p1是一个很小的数,只是需要拟合出来。
实在是没辙了,有烦高手指点!致谢为先!:handshake [/color]
Title "Contact angle";
Constant A=1.262e13, B=-0.000397, C=5.757e18;
Parameters p1, p2, p3;
Variables x, y;
Function y=A*p1*exp(B*p2)*sinh(C*p1^2*(cos(p3)-cos(x)));
Data x, y;
1.19381 5.67912E-6
1.19032 5.6785E-6
1.18683 5.67602E-6
1.18683 5.67169E-6
1.18159 5.66559E-6
1.18159 5.65774E-6
1.17635 5.64822E-6
1.17461 5.63708E-6
1.17112 5.6244E-6
1.16937 5.61024E-6
1.16414 5.5947E-6
1.16239 5.57784E-6
1.1589 5.55976E-6
1.15716 5.54055E-6
1.15192 5.52029E-6
1.15017 5.49907E-6
1.14668 5.47699E-6
1.14319 5.45413E-6
1.1397 5.43061E-6
1.13621 5.40649E-6
1.13272 5.38188E-6
1.13098 5.35686E-6
1.12749 5.33152E-6
1.12399 5.30594E-6
1.11876 5.2802E-6
1.11701 5.25438E-6
1.11352 5.22855E-6
1.11178 5.20278E-6
1.1048 5.17713E-6
1.10305 5.15166E-6
1.09956 5.12642E-6
rsp2001 2007-8-18 12:04
这个问题我也遇见过,折腾了好久。
原因1:形如Y=X^P1的拟合函数,需要保证X不能为负数,可以将这种形式修改为Y=(X^2)^P1。
原因2:Y=X/P1,要修改为Y=X*P1,保证分母不为0。
[[i] 本帖最后由 rsp2001 于 2007-8-18 12:08 编辑 [/i]]
rsp2001 2007-8-18 12:12
可以采用分段调试,例如y=A*p1*exp(B*p2)没错,说明错误在sinh(C*p1^2*(cos(p3)-cos(x)))。
rsp2001 2007-8-18 12:14
Title "Contact angle";
Constant A=1.262e13, B=-0.000397, C=5.757e18;
Parameters p1, p2, p3;
Variables x, y;
Function y=p1*exp(p2)*sinh(p1^2*(cos(p3)-cos(x)));
Data x, y;
1.19381 5.67912E-6
1.19032 5.6785E-6
1.18683 5.67602E-6
1.18683 5.67169E-6
1.18159 5.66559E-6
1.18159 5.65774E-6
1.17635 5.64822E-6
1.17461 5.63708E-6
1.17112 5.6244E-6
1.16937 5.61024E-6
1.16414 5.5947E-6
1.16239 5.57784E-6
1.1589 5.55976E-6
1.15716 5.54055E-6
1.15192 5.52029E-6
1.15017 5.49907E-6
1.14668 5.47699E-6
1.14319 5.45413E-6
1.1397 5.43061E-6
1.13621 5.40649E-6
1.13272 5.38188E-6
1.13098 5.35686E-6
1.12749 5.33152E-6
1.12399 5.30594E-6
1.11876 5.2802E-6
1.11701 5.25438E-6
1.11352 5.22855E-6
1.11178 5.20278E-6
1.1048 5.17713E-6
1.10305 5.15166E-6
1.09956 5.12642E-6
迭代数: 115
计算用时(时:分:秒:微秒): 00:00:20:984
优化算法: 麦夸特法(Levenberg-Marquardt) + 通用全局优化法
计算结束原因: 达到收敛判断标准
均方差(RMSE): 6.74909539516894E-8
残差平方和(SSE): 1.41205894824581E-13
相关系数(R): 0.988763733163875
相关系数之平方(R^2): 0.977653720020163
决定系数(DC): 0.855862639754773
卡方系数(Chi-Square): 1.27356010471605E-8
F统计(F-Statistic): 1268.75515325894
参数 最佳估算
---------- -------------
p1 0.000224536417661861
p2 13.6136875121653
p3 -18.8495560302352
====== 结果输出 =====
No 实测值y 计算值y
1 5.67912E-6 0.0000058
2 5.6785E-6 0.0000058
3 5.67602E-6 0.0000058
4 5.67169E-6 0.0000058
5 5.66559E-6 0.0000057
6 5.65774E-6 0.0000057
7 5.64822E-6 0.0000057
8 5.63708E-6 0.0000057
9 5.6244E-6 0.0000057
10 5.61024E-6 0.0000056
11 5.5947E-6 0.0000056
12 5.57784E-6 0.0000056
13 5.55976E-6 0.0000055
14 5.54055E-6 0.0000055
15 5.52029E-6 0.0000055
16 5.49907E-6 0.0000055
17 5.47699E-6 0.0000054
18 5.45413E-6 0.0000054
19 5.43061E-6 0.0000054
20 5.40649E-6 0.0000054
21 5.38188E-6 0.0000053
22 5.35686E-6 0.0000053
23 5.33152E-6 0.0000053
24 5.30594E-6 0.0000053
25 5.2802E-6 0.0000052
26 5.25438E-6 0.0000052
27 5.22855E-6 0.0000052
28 5.20278E-6 0.0000052
29 5.17713E-6 0.0000051
30 5.15166E-6 0.0000051
31 5.12642E-6 0.0000051
rsp2001 2007-8-18 12:20
Function y=sinh((5.757e18)*(p1^2)*(cos(p3)-cos(x)));有误
Function y=sinh(((p1)^2)*(cos(p3)-cos(x)));正确
楼主再自己检查一下sinh函数
5.757e18改为5.757就没问题,是不是你的5.757e18有问题?说明C值取的有问题,采用P4代替就可以
Title "Contact angle";
Constant A=1.262e13, B=-0.000397, C=5.757e18;
Parameters p1, p2, p3,p4;
Variables x, y;
Function y=A*p1*exp(B*p2)*sinh(p4*p1^2*(cos(p3)-cos(x)));
Data x, y;
1.19381 5.67912E-6
1.19032 5.6785E-6
1.18683 5.67602E-6
1.18683 5.67169E-6
1.18159 5.66559E-6
1.18159 5.65774E-6
1.17635 5.64822E-6
1.17461 5.63708E-6
1.17112 5.6244E-6
1.16937 5.61024E-6
1.16414 5.5947E-6
1.16239 5.57784E-6
1.1589 5.55976E-6
1.15716 5.54055E-6
1.15192 5.52029E-6
1.15017 5.49907E-6
1.14668 5.47699E-6
1.14319 5.45413E-6
1.1397 5.43061E-6
1.13621 5.40649E-6
1.13272 5.38188E-6
1.13098 5.35686E-6
1.12749 5.33152E-6
1.12399 5.30594E-6
1.11876 5.2802E-6
1.11701 5.25438E-6
1.11352 5.22855E-6
1.11178 5.20278E-6
1.1048 5.17713E-6
1.10305 5.15166E-6
1.09956 5.12642E-6
"Contact angle"
迭代数: 21
计算用时(时:分:秒:微秒): 00:00:01:391
优化算法: 麦夸特法(Levenberg-Marquardt) + 通用全局优化法
计算结束原因: 达到收敛判断标准
均方差(RMSE): 6.74306479037317E-8
残差平方和(SSE): 1.40953660578228E-13
相关系数(R): 0.988774287438071
相关系数之平方(R^2): 0.977674591498665
决定系数(DC): 0.856120110439534
卡方系数(Chi-Square): 1.27042564812423E-8
F统计(F-Statistic): 1269.96839281871
参数 最佳估算
---------- -------------
p1 0.000505879705120411
p2 3.09659147776133
p3 8.26988669469595E-6
p4 5.67007123473234E-9
====== 结果输出 =====
********
解出P4之后,再和以前原始函数比较,得到原始参数。
[[i] 本帖最后由 rsp2001 于 2007-8-18 12:32 编辑 [/i]]
鸿飞宇 2007-8-18 21:19
感谢版主 rsp2001 ,但还希望得到更多帮助
非常的感谢版主 rsp2001 ,花了这么多精力帮我分析,就好比锦涛同志跟我握手握了超过9秒钟!真是感动呀!:handshake :lol
不过,还是存在问题,这个式子中的参数p1,p2,p3以及变量x和y都是有物理意义的,都只能是正数,所以拟合结果只有是正的才可能正确。常数A、B、C是一堆数字(包括阿佛家的罗常数、普朗克常数、玻尔兹曼常数以及温度等)的化简合并。常数C=5.757e18(是由C=s/(2kT)计算来的,s为表面张力0.0482J/m2,k为玻尔兹曼常数1.38e-23,T为温度313.15K),确实是非常大且是已知的、不能更改的。同时说明p1值是很小的。
不过版主前面那个帖子的经验之谈很好,记下了!
我以前也做过其它拟合,还没遇到这样的怪事。可也没法,还得折腾,期望得到更多朋友的帮助!:o :o :o
rsp2001 2007-8-19 17:22
如果公式两边能取对数就好了,化成相加的形式也可以得到各个参数。
ln(y)=Aln()+Bln()+Cln()........
youyouyou 2007-8-21 00:05
还是去问一下1stOpt的开发商吧。