用参数方程或隐函数拟合数据
要对一组x,y数据进行拟合,拟合方程是如下参数方程形式x=f(L),
y=g(L),
解不出来显示形式y=y(x)或x=x(L).
请问如何用1stOpt或任何其他工具来做拟合。
s,a1,a2,a3,b1,b2,b3是待定参数。
[[i] 本帖最后由 weitong 于 2008-6-25 10:26 编辑 [/i]] 1stOpt有个命令:ParVariable,可以专门处理这种缺失中间变量的问题。 请具体举例说明。多谢。 你的两个公式左边都是y,其中一个应该是x吧?
下面是个实例,需与SharedModel结合使用(老版本不敢担保能正确运行):
Parameter R ,B,x0,y0;
ParVariable t;
Variable x, y;
SharedModel;
Function x = R*(cos(t)+(t-B)*sin(t))+x0;
Function y = R*(sin(t)-(t-b)*cos(t))+y0;
Data;
15.5910 86.2142
24.6601 83.7114
33.3732 80.2618
49.3445 70.7216
62.7992 58.0891
68.3962 50.8058
73.1584 42.9946
79.9955 26.1718
83.0531 8.4225 不好意思,第二个是x。
多谢。我试试。 迭代数: 16
计算用时(时:分:秒:微秒): 00:00:01:172
优化算法: 麦夸特法(Levenberg-Marquardt) + 通用全局优化法
计算结束原因: 达到收敛判定标准
均方差(RMSE): 24.4851332036679
残差平方和(SSE): 10791.3914640244
相关系数(R): 0.914755795566993
相关系数之平方(R^2): 0.836778165523402
决定系数(DC): 0.836778165523402
F统计(F-Statistic): 1
参数 最佳估算
-------------------- -------------
t 2.73169953009845
r 2.50317497875691
b 0.724030952332493
x0 54.7787726064432
y0 50.7701875200851
====== 输出结果 =====
文件:Data file - 1
No 实测x 计算x 实测y 计算y
1 15.591 54.4856888883948 86.2142 56.3769777773365
2 24.6601 54.4856888883948 83.7114 56.3769777773365
3 33.3732 54.4856888883948 80.2618 56.3769777773365
4 49.3445 54.4856888883948 70.7216 56.3769777773365
5 62.7992 54.4856888883948 58.0891 56.3769777773365
6 68.3962 54.4856888883948 50.8058 56.3769777773365
7 73.1584 54.4856888883948 42.9946 56.3769777773365
8 79.9955 54.4856888883948 26.1718 56.3769777773365
9 83.0531 54.4856888883948 8.4225 56.3769777773365 不知你用的哪个版本?是否支持ParVariable和SharedModel?
下面是例子的结果:
均方差(RMSE): 1.34537356270244E-5
残差平方和(SSE): 3.2580540417936E-9
相关系数(R): 0.999999999999975
相关系数之平方(R^2): 0.999999999999951
决定系数(DC): 0.999999999999951
F统计(F-Statistic): -2008242960984.38
参数 最佳估算
-------------------- -------------
r 3.1995227671986
b -24.4385000174272
x0 -0.00032965248461091
y0 0.000374652430465203
t0 2.92615423123336
t1 2.81843505829979
t2 2.71071459521477
t3 2.49527589843761
t4 2.27983592536782
t5 2.17211673605045
t6 2.0643969924754
t7 1.84895788756821
t8 1.6335204748713
====== 输出结果 =====
文件:Data file - 1
No 实测x 计算x 实测y 计算y
1 15.591 15.5909970736633 86.2142 86.2141866252252
2 24.6601 24.6601113317204 83.7114 83.7114338348863
3 33.3732 33.373187219426 80.2618 80.2617721959986
4 49.3445 49.3445110215649 70.7216 70.7216146089185
5 62.7992 62.7991966119381 58.0891 58.0890970931054
6 68.3962 68.396185457749 50.8058 50.8057900225526
7 73.1584 73.1584050648767 42.9946 42.994602724725
8 79.9955 79.9955112434135 26.1718 26.1718032105108
9 83.0531 83.0530949757003 8.4225 8.42249968428047 我用的是2.0版本。正式注册版。我看它里面的函数有 sharemodel,还有一个VarPar,不知和你的ParVariable是否一样。
[[i] 本帖最后由 weitong 于 2008-6-25 11:55 编辑 [/i]]
页:
[1]