查看完整版本: 【求助】关于1stOPT拟合时的一个表达式错误,恳请高手相助

鸿飞宇 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的开发商吧。

鸿飞宇 2007-8-22 23:20

好的,多谢楼上,我去试试。
页: [1]
查看完整版本: 【求助】关于1stOPT拟合时的一个表达式错误,恳请高手相助