SimWe仿真论坛's Archiver

COMSOL 2008年会圆满结束!

shamohu 发表于 2007-3-2 23:33

1stOpt非线性拟合技巧之一

1stOpt的非线性拟合能力应该是笔者目前所见过最强的,使用也很简单、方便,但对一些例子,如果掌握不当,却难以求得正解。

近日网上搜索,在DPS([url]www.chinadps.net)[/url]的论坛上看到一有关DPS与1stOpt在非线性拟合问题上的争论([url]http://w7913.s10.mydiscuz.com/forumdisplay.php?fid=13[/url])。DPS是浙江大学唐启义教授开发的一套统计软件,功能多多。本贴在此不是想比较两种软件,而是以其论坛上的非线性拟合问题为例,介绍如何处理类似问题。原贴的1stOpt代码及数据附录如下。

用1stOpt运行该代码,的确得不到好的结果,至于DPS论坛上那位1stOpt用户是如何求出的不得而知,笔者试了一下,只要在function语句前加上一句:
StartRange = [-100000,100000];

就可以很容易求出答案了,为何要加这一句呢?看看x数据,最高值达400000,因此可以推断,有的参数值可能会很大,大到按常规方法搜索不到的地步(1stOpt缺省取值范围为0-5),因此只要人为地改变一下取值范围就可以了,也没必要去猜初值了。

除了一些特殊情况,大多数情况下没必要这么做,应根据实际数据情况而定。

大家可自己试试,希望有帮助。



********************************************************
Title "Peak Fit 11";
Function y = p1*exp(-2.77*((x-p2)/p3)^2)+p1*exp(-2.77*((x-5*p2)/p4)^2)+
             a0*exp(-0.5*((x-a1)/a2)^2)+2*a0*exp(-0.5*((x-2*a1)/a2)^2);
Data;
//x        y
1428        0.0159
2857        0.0294
5714        0.0540
8571        0.0832
11429        0.1769
14286        0.3010
17143        0.4822
20000        0.8909
22857        1.4673
25714        2.6091
28571        3.9487
31429        6.1861
34286        10.2854
37143        14.1971
40000        20.8154
42857        27.9622
45714        34.1893
48571        50.9944
51429        52.8896
54286        74.7148
57143        78.2739
60000        94.8341
62857        97.1913
65714        106.9074
68571        110.5764
71429        99.7094
74286        95.2368
77143        100.9800
80000        95.3051
82857        84.7236
85714        72.5028
88571        63.7613
91429        53.8688
94286        45.3433
97143        47.6868
100000        39.2611
102857        41.2603
105714        38.4826
108571        41.0614
111429        42.8718
114286        52.4247
117143        54.6309
120000        58.5655
122857        57.6910
125714        62.2335
128571        63.6598
131429        74.5593
134286        76.3657
137143        76.8343
140000        76.4166
142857        73.9337
145714        83.6326
148571        79.5735
151429        77.3333
154286        82.7579
157143        74.8436
160000        70.2986
162857        69.1072
165714        62.9654
168571        63.9911
171429        63.3608
174286        54.3341
177143        54.7983
180000        54.1602
182857        50.5028
185714        46.6765
188571        37.3148
191429        35.4733
194286        31.4011
197143        31.6141
200000        29.3181
202857        29.2092
205714        25.6456
208571        23.5434
211429        21.6426
214286        20.5469
217143        21.0379
220000        23.0230
222857        23.3786
225714        22.6132
228571        28.5862
231429        29.2285
234286        34.6253
237143        40.5241
240000        43.5328
242857        44.4078
245714        55.3422
248571        63.8790
251429        70.3837
254286        64.7925
257143        84.1060
260000        85.2346
262857        96.3957
265714        101.5065
268571        101.5635
271429        125.4770
274286        123.0295
277143        116.8548
280000        132.5786
282857        146.0718
285714        152.3447
288571        149.5277
291429        149.2917
294286        167.8167
297143        140.3957
300000        146.2560
302857        140.2877
305714        150.3306
308571        151.0844
311429        135.0494
314286        124.1520
317143        128.2794
320000        121.8187
322857        127.7168
325714        109.3237
328571        98.8645
331429        101.0413
334286        95.4619
337143        82.9761
340000        108.2798
342857        173.0225
345714        125.9043
348571        55.3894
351429        48.4749
354286        40.5538
357143        32.5134
360000        30.7203
362857        26.0722
365714        21.6562
368571        19.8353
371429        16.4291
374286        14.3602
377143        11.6957
380000        8.8610
382857        7.2047
385714        6.0873
388571        5.1435
391429        4.1757
394286        3.0479
397143        2.7644
400000        2.1079

[[i] 本帖最后由 shamohu 于 2007-3-2 23:35 编辑 [/i]]

youjianweiyang 发表于 2007-5-13 13:30

求助:1stopt做拟合时显示读数据出错,请高手指点,见程序。

Title "Type your title here";
Parameters a,b,c,d ;
Variable x,y;
Function y=a+b*sin(c*x)+d*sin(3*c*x);
data;
//x  y
0.00000  0.27441
1.00000  0.29980
2.00000  0.32422
3.00000  0.34424
4.00000  0.35986
5.00000  0.37305
6.00000  0.38086
7.00000  0.38574
8.00000  0.38770
9.00000  0.38672
10.00000  0.38232
11.00000  0.37451
12.00000  0.36328
13.00000  0.34717
14.00000  0.32666
15.00000  0.30225
16.00000  0.27637

abingchem 发表于 2007-5-14 10:57

没有问题啊,这是结果:
"Type your title here"


(R): 0.999921355577664
R^2): 0.999842717340273

参数
----------        -------------
a                  0.273899674696823
b                  0.118735759949776
c                  0.194903006199373
d                  0.0051011229959653

====== 计算结果 =====

No        实测值  计算值
1        0.27441        0.2738997
2        0.2998        0.2997110
3        0.32422        0.3237160
4        0.34424        0.3444523
5        0.35986        0.3610404
6        0.37305        0.3732487
7        0.38086        0.3813700
8        0.38574        0.3859600
9        0.3877        0.3875294
10        0.38672        0.3862968
11        0.38232        0.3820883
12        0.37451        0.3744173
13        0.36328        0.3627176
14        0.34717        0.3466495
15        0.32666        0.3263726
16        0.30225        0.3026890
17        0.27637        0.2770014

[[i] 本帖最后由 abingchem 于 2007-5-14 11:00 编辑 [/i]]

页: [1]
 

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