SimWe仿真论坛's Archiver

COMSOL 2008年会圆满结束!

ranber 发表于 2008-2-27 18:53

有人能把这个拟合出来吗?

我拟合了几次,都是没有结果,难道sinh的函数就不能拟合吗

Constant ep0=0.001, s0=41.523;    //Æðʼֵ
Parameter a, n;
Variable ep, s;
StartProgram [Pascal];
var j: integer;
    temep, tems: double;
Begin
    temep := ep0;
    tems := s0;
    for j := 0 to DataLength - 1 do begin
        s[j]:=s[j];
        ep[j]:= temep*(sinh(a*s[j])/sinh(a*tems))^n;
        temep := ep[j];
        tems := s[j];
    end;
End;
EndProgram;
Data;
//ʱ¼ät£¨h£© ϸ°û£¨X) ²úÎP£©
//0.001 43.263
//0.001 41.523
0.01 59.819
0.1 101.89
1 137.731

shamohu 发表于 2008-2-27 19:45

用的是哪个版本?如果是网上流行的1.5 PJ版就别指望用这种编程模式了。

ranber 发表于 2008-2-27 21:07

就用2.0 或者2.5,能拟合出来吗

shamohu 发表于 2008-2-28 09:18

有点象时间系列?数据点比较少啊。

优化算法: 全局麦夸特法(Global Levenberg-Marquardt)
计算结束原因: 达到收敛判定标准
均方差(RMSE): 0.00285228625581715
残差平方和(SSE): 2.44066106553703E-5
相关系数(R): 0.999989917112026
相关系数之平方(R^2): 0.999979834325716
决定系数(DC): 0.999959281597172
F统计(F-Statistic): 24558.9200591484

参数                  最佳估算
--------------------        -------------
a                  0.0173497948192158
n                  3.57748260398233

====== 输出结果 =====

文件:Data file - 1
No        实测ep        计算ep
1        0.01        0.00506533143686638
2        0.1        0.100235709646303
3        1        0.999990111115807

shamohu 发表于 2008-2-28 09:21

代码改了一句:

Constant ep0=0.001, s0=41.523;
Parameter a, n;
Variable ep[OutPut], s;
StartProgram [Pascal];
Procedure MainModel;
var j: integer;
    temep, tems: double;
Begin
    temep := ep0;
    tems := s0;
    for j := 0 to DataLength - 1 do begin
        s[j]:=s[j];
        ep[j]:= temep*(sinh(a*s[j])/sinh(a*tems))^n;
        temep := ep[j];
        tems := s[j];
    end;
End;
EndProgram;
Data;
//ê±??t£¨h£? ??°?£¨X) 2ú??£¨P£?
//0.001 43.263
//0.001 41.523
0.01 59.819
0.1 101.89
1 137.731

ranber 发表于 2008-2-28 17:43

我算了,好像也是你这个结果,但是刚开始我用的是差分进化法,却得不到稳定的解,全局麦夸特法(Global Levenberg-Marquardt),每次都能得到稳定解,他们之间有什么区别吗?能稍微解释一下吗,谢谢了。
我发现shamohu 可能是目前simwe上对1stopt了解最深刻的大虾,呵呵。

shamohu 发表于 2008-2-28 22:25

对于非线性优化问题,目前还没有任何一种算法是“十全十美”,都有各自的特点和适合解决的问题类型和范围。参考一下1stOpt的使用手册,对于无约束非线性拟合,全局麦夸特法应是首选;如果是混合整数、或有约束,可以试一下差分进化法。总之,没有固定格式,多试几下。

20wangz 发表于 2008-5-24 17:16

请教版主:

你的程序中循环内第一句s[j]:=s[j]这一句是起什么作用的?把它去掉似乎也不影响结果吧?

我是初学者,所以对程序看得比较仔细,期望能从其中吸取营养。

页: [1]
 

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.