找回密码
 注册
Simdroid-非首页
查看: 165|回复: 10

求参数方程的系数的问题(拟合)

[复制链接]
发表于 2010-5-4 14:29:31 | 显示全部楼层 |阅读模式 来自 重庆沙坪坝区
本帖最后由 messenger 于 2010-5-5 13:15 编辑

首先已知一系列点x,y的值,x,y都是t的函数(摆线),x,y的方程形式可写出如下:
摆线参数方程
x=a*sin(b+t)-c*sin(b+g*t);
y=a*cos(b+t)-c*cos(b+g*t);
现在需要求出系数a、b、c、g。其中,t是摆线的摆角。

已知数据点坐标如下:
           x                   y
37.8569087.364225
37.7221247.385029
37.586877.412964
37.3291247.463645
36.8454877.608982
36.8241927.615679
36.3936197.791825
36.3020597.830047
36.0589217.955129
35.85368.062848
35.6993838.16122
35.4582488.32491
35.3849978.373934
35.1977888.523615
35.0285768.668206
34.991868.698158
34.962018.723733
34.829078.855671
34.7495568.938238
34.6218449.076793
34.5706729.131525
34.3821829.367993
34.2968949.473604
34.186269.624569
34.160059.663583
34.1438299.690129
34.0720039.807464
33.9631019.981147
33.88999310.093898
33.84648910.173587
33.77628410.310817


原来用1stopt软件可以得到解,但现在不行了。不知道为什么。
下面是我原来的方法,从已知摆线上取10个点,得到的数据再代入下面的1stopt程序,就可以得到对应的系数。
SharedModel;
Variable t,x,y;
Function
x=a*sin(b+c+t)-e*cos(f)*sin(b+c+g*t);
y=a*cos(b+c+t)-e*cos(f)*cos(b+c+g*t);
Data;
0        13.7836        12.9607
0.1        13.9968        12.9333
0.2        14.4546        13.0332
0.3        15.1899        13.1918
0.4        16.2206        13.3350
0.5        17.5497        13.3855
0.6        19.1641        13.2660
0.7        21.0355        12.9017
0.8        23.1201        12.2234
0.9        25.3607        11.1702
1        27.6875        9.6919

刚刚搜了一下论坛,发现有个帖子跟我的问题很类似,只是他的是一个方程,我的是两个方程,http://forum.simwe.com/viewthread.php?tid=872573&highlight=%B7%BD%B3%CC%CF%B5%CA%FD

真的是不知道该如何办了,还希望大家帮帮我,谢谢。
发表于 2010-5-4 16:54:21 | 显示全部楼层 来自 浙江杭州
Simdroid开发平台
参数方程拟合1stopt要用SharedModel模式。

具体参考,http://forum.simwe.com/thread-862684-1-1.htmlhttp://forum.simwe.com/thread-810618-1-1.html

不过估计需要1stopt 2.5版本。你这2个参数方程比较简单,应该可以合成1个方程,从而不用SharedModel模式也能解出。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-4 18:28:14 | 显示全部楼层 来自 重庆沙坪坝区
这两个参数方程好像不好合并,用1stopt来解得话,不稳定,能帮我指点一下matlab的方法吗
回复 不支持

使用道具 举报

发表于 2010-5-4 18:42:09 | 显示全部楼层 来自 浙江杭州
matlab的方法就是最小二乘法,最原始的方法也是适用范围最广的方法。

这两个参数方程好像不好合并,用1stopt来解得话,不稳定,能帮我指点一下matlab的方法吗
laihai718 发表于 2010-5-4 18:28
回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-4 19:16:01 | 显示全部楼层 来自 重庆沙坪坝区
苦恼~~,谢谢版主哈
回复 不支持

使用道具 举报

发表于 2010-5-4 22:03:05 | 显示全部楼层 来自 北京
你的两组参数方程都是周期函数,不加约束,会有无数组解,也就是楼主说的“不稳定吧”。

第二组方程:
x=a*sin(b+c+t)-e*cos(f)*sin(b+c+g*t);
y=a*cos(b+c+t)-e*cos(f)*cos(b+c+g*t);

b+c完全可简化成一个啊!
回复 不支持

使用道具 举报

发表于 2010-5-4 22:28:59 | 显示全部楼层 来自 贵州
本帖最后由 lengyunfeng 于 2010-5-5 19:54 编辑

LZ,如果我是你的话,我会再去找些数据,数据的量以达到X、Y实现数个周期为准,这样对应的你能找到周期T,再用(2*pi,2*pi/g)的最小公倍数=T来确定g;三角函数内的b是用来移动对称轴的,你找到min(y),对应的找到t的值,按照摆线的理论形式,一般来说到达最低点y时,y'是=0的,你就可以依此找到b。b、g出来了,三角函数外的a、c就很好办了

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-5-4 22:36:01 | 显示全部楼层 来自 湖南湘潭
本帖最后由 lin2009 于 2010-5-4 22:39 编辑

1# laihai718
Variable x,y;
ParVariable t[0,2*pi];
SharedModel;
Function x=a*sin(b+t)-c*sin(b+g*t);
         y=a*cos(b+t)-c*cos(b+g*t);
data;
37.856908 7.364225
37.722124 7.385029
...
迭代数: 23
计算用时(时:分:秒:微秒): 00:04:07:844
优化算法: 通用全局优化法(UGO1)
计算结束原因: 用户中止
均方差(RMSE): 0.00238806227306983
残差平方和(RSS): 0.000353576168043685
相关系数(R): 0.999999995699039
相关系数之平方(R^2): 0.999999991398078
决定系数(DC): 0.999999991398077
F统计(F-Statistic): -30048.2359821257
参数           最佳估算
-------------------- -------------
a           -5.27183652550824
b           -1.88424680219221
c           40.5319682246089
g           -0.00126258915569132
====== 输出结果 =====
文件:数据文件 - 1
No     目标x                   计算x                      目标y                计算y
1    37.856908     37.8571877000443      7.364225      7.36627214998034
2    37.722124     37.7223567050368      7.385029      7.38645800634685
3    37.58687      37.5863867279656      7.412964      7.41041515053898
4    37.329124     37.3296186198965      7.463645      7.46569526178463
5    36.845487     36.8448907101895      7.608982      7.60724965644107
6    36.824192     36.8238010026932      7.615679      7.61455833358351
7    36.393619     36.3914110301499      7.791825      7.78691937726332
8    36.302059     36.3013182691603      7.830047      7.82847970666481
9    36.058921     36.0570613121731      7.955129      7.95166497258738
10   35.8536      35.8552878658093      8.062848      8.06568924326164
11   35.699383    35.6997172534579      8.16122       8.16174123624509
12   35.458248    35.4587910473693      8.32491       8.32566322570448
13   35.384997    35.3878226024086      8.373934      8.37772044360328
14   35.197788    35.1991084630843      8.523615      8.52522864669617
15   35.028576    35.0298834037384      8.668206      8.66967481788107
16   34.99186     34.9946893044085      8.698158      8.70128069301
17   34.96201     34.9656970206221      8.723733      8.7277429520819
18   34.82907     34.8301726489544      8.855671      8.85678926526957
19   34.749556    34.74943418302        8.938238      8.93811962636532
20   34.621844    34.6204889763345      9.076793      9.07556580970654
21   34.570672    34.5705844680708      9.131525      9.13144792279341
22   34.382182    34.3771387754698      9.367993      9.36403346238077
23   34.296894    34.2946244331034      9.473604      9.4719131349948
24   34.18626     34.1854045258618      9.624569      9.62397688458574
25   34.16005     34.1588198080556      9.663583      9.66274735533961
26   34.143829    34.1414245118621      9.690129      9.6885159417782
27   34.072003    34.0662146683838      9.807464      9.80379238124653
28   33.963101    33.9596359959749      9.981147      9.97913040596496
29   33.889993    33.8936205873264      10.093898     10.0958896875907
30   33.846489    33.8506350712725      10.173587     10.1757730842536
31   33.776284    33.7807653272918      10.310817     10.3130181055728

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-5 09:51:06 | 显示全部楼层 来自 重庆沙坪坝区
你的两组参数方程都是周期函数,不加约束,会有无数组解,也就是楼主说的“不稳定吧”。

第二组方程:
x=a*sin(b+c+t)-e*cos(f)*sin(b+c+g*t);
y=a*cos(b+c+t)-e*cos(f)*cos(b+c+g*t);

b+c完全可简化成一个啊 ...
shamohu 发表于 2010-5-4 22:03


谢谢哈,这样也可以
回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-5 09:53:52 | 显示全部楼层 来自 重庆沙坪坝区
LZ,如果我是你的话,我会再去找些数据,数据的量以达到X、Y实现数个周期为准,这样对应的你能找到周期T,再用max(2*pi,2*pi/g)=T来确定g;三角函数内的b是用来移动对称轴的,你找到min(y),对应的找到t的值,按照摆 ...
lengyunfeng 发表于 2010-5-4 22:28

点数有限,不能取到一个周期的
回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-5 09:56:20 | 显示全部楼层 来自 重庆沙坪坝区
1# laihai718
Variable x,y;
ParVariable t[0,2*pi];
SharedModel;
Function x=a*sin(b+t)-c*sin(b+g*t);
         y=a*cos(b+t)-c*cos(b+g*t);
data;
37.856908 7.364225
37.722124 7.385029
...
迭代数 ...
lin2009 发表于 2010-5-4 22:36


您用的1stopt是哪个版本的?我的1.0的版本,运行不了

我的想法是用已知的x  y的数据,推出t的数据,然后根据这3组数据在1stopt里实现,之前就可以,现在确不行了
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-7 01:27 , Processed in 0.084114 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表