xzy_28855 发表于 2006-8-28 11:48

求助如何把离散点拟合为光滑曲线!

大家好!小弟现在有一些离散的点,单独把这些点作为二维坐标点来画出的曲线不平滑,想把它们拟合为一条平滑的曲线,该怎么做呢?用matlab可以实现吗?或者用1stopt可以实现吗?该如何实现?

[ 本帖最后由 xuebx 于 2006-8-28 16:12 编辑 ]

glise 发表于 2006-8-28 13:13

最简单的就是多项式拟合,可以用 polyfit来实现,具体看帮助吧

xzy_28855 发表于 2006-8-28 17:00

大侠,你说的是用哪个软件啊?这两个软件我都不熟悉,因为我只想用他们画画图,具体的分析是用其他软件来完成的,我只想把分析得到的结果用matlab或1stopt来把得到的这些点画出平滑的曲线来,而且我也没有太多时间来学习这两个软件,所以大侠能不能告诉小弟如何来实现我的想法啊!小弟非常感谢!

eight 发表于 2006-8-28 17:03

polyfit是matlab自带的一个函数,不是软件。。。。。

xzy_28855 发表于 2006-8-28 17:04

我的数据只有这些:
0        0
2        20
4.4        39.2
7.6        53.6
11.2        75.2
13.6        83.2
15.2        91.2
18.4        97.6
20.8        107
23.6        108
25.2        108
28        102
30        95.2
32        86.4
33.6        68.8
34.4        57.6
35.2        51.2
36.4        64.8
38.4        68.8
42        76
45.2        90.4
48.8        100
52        118
54.8        102
55.6        42.4
57.2        0
我也没有什么多项式啊,这应该怎么来拟合曲线呢?请大侠指教!

eight 发表于 2006-8-28 17:11

你help polyfit然后看一下不就可以了吗?

mhl516 发表于 2006-8-28 20:22

x=[0      
2      
4.4      
7.6      
11.2      
13.6      
15.2      
18.4      
20.8      
23.6      
25.2      
28      
30      
32      
33.6      
34.4      
35.2      
36.4      
38.4      
42      
45.2      
48.8      
52      
54.8      
55.6      
57.2
]
y=[0
20
39.2
53.6
75.2
83.2
91.2
97.6
107      
108
108
102
95.2
86.4
68.8
57.6
51.2
64.8
68.8
76      
90.4
100      
118      
102   
42.4      
0
];
polyfit(x,y,5);
拟合函数如下:
y=-0.0000 *x^5+   0.0026 x^4-0.1194 x^3+   1.9669x^2   -4.7861 x+14.4841
如果看图形,直接plot(x,y)

mhl516 发表于 2006-8-28 20:24

只会这些了,拟合后函数的图像我也不会画

skyboyliu 发表于 2006-8-28 20:27

回复 #4 eight 的帖子

进入matlab,在命令窗口中输入下面的代码:
x=;
y=;
p=polyfit(x,y,n);
z=polyval(p,x);
plot(x,z);
就可以得到拟合后的曲线了了
其中第三行的n 为要拟合的多项式阶数,可自由设定,不过不要太大,否则效果反而不好

mhl516 发表于 2006-8-28 21:10

x=[50.0006
49.5889
48.3654
46.3448
43.566
40.0691
35.9171
31.1748
25.9195
20.2397
14.2262
7.9796
1.6025
-4.8013
-11.126
-17.2684
-23.1274
-28.6046
-33.6146
-38.0718
-41.9036
-45.0483
-47.4542
-49.0779
-49.8986
-49.8966
-49.078
-47.452
-45.049
-41.9042
-38.0727
-33.6155
-28.6058
-23.1273
-17.2691
-11.1262
-4.8012
1.6026
7.98
14.2261
20.2394
25.9196
31.1745
35.9184
40.0722
43.5655
46.3459
48.364
49.5902
49.9976
];
y=[0
6.3938
12.6829
18.7628
24.5359
29.9043
34.7828
39.0919
42.7569
45.7218
47.9328
49.3569
49.973
49.77
48.7463
46.9238
44.3308
41.0069
37.0134
32.411
27.2763
21.6941
15.7559
9.5579
3.2036
-3.2035
-9.5579
-15.7752
-21.6944
-27.2766
-32.4117
-37.0144
-41.0085
-44.3308
-46.9256
-48.7469
-49.7698
-49.9752
-49.3591
-47.9323
-45.7211
-42.7571
-39.0914
-34.785
-29.9066
-24.5356
-18.7634
-12.6825
-3.3969
0
];
p=polyfit(x,y,5);
z=polyval(p,x);
plot(x,z)
原本为圆的数据点,无论怎么取n值都拟合不出来圆,怎么办???

toes 发表于 2006-8-28 21:11

幂次n的确定是个要研究的问题,除了按skyboyliu的方法做,还应该讨论n的选取和拟合误差之间的关系,以选取合适的n。

圆不能用简单的多项式的形式来表示的。

[ 本帖最后由 toes 于 2006-8-28 21:21 编辑 ]

mhl516 发表于 2006-8-28 21:36

原帖由 toes 于 2006-8-28 21:11 发表
幂次n的确定是个要研究的问题,除了按skyboyliu的方法做,还应该讨论n的选取和拟合误差之间的关系,以选取合适的n。

圆不能用简单的多项式的形式来表示的。

那像这种情况,圆怎么才能拟合出来,好像连插值都没法插啊,那怎么办?

toes 发表于 2006-8-29 09:19

我也只用过多项式拟合,不知道有没有其他函数可以方便地实现圆的拟合,希望高手指点。

如果自己编写程序的话,可以先假设圆的方程,然后考虑用最小二乘法来确定待定系数,最小二乘法比较简单,容易实现。

请参考帖子:
http://forum.vibunion.com/forum/viewthread.php?tid=11691

http://forum.vibunion.com/forum/viewthread.php?tid=10811

[ 本帖最后由 eight 于 2007-2-28 10:43 编辑 ]

xzy_28855 发表于 2006-8-29 09:24

我按照下面的方法进行曲线拟合:
进入matlab,在命令窗口中输入下面的代码:
x=;
y=;
p=polyfit(x,y,n);
z=polyval(p,x);
plot(x,z);
就可以得到拟合后的曲线了了
其中第三行的n 为要拟合的多项式阶数,可自由设定,不过不要太大,否则效果反而不好

但是我得到的结果与未拟合前的曲线一点都不一样啊?曲线的形状都不一样?这是怎么一回事啊?未拟合前我是直接输入x和y的各个点的值,然后直接用plot(x,y)画出曲线的,而用拟合的时候我把n值取作5,4,但结果都是这种形状的曲线,各位大侠能告诉小弟是什么原因吗?

mhl516 发表于 2006-8-29 09:39

5次拟合的很好啊,你再试试看
p=polyfit(x,y,5); z=polyval(p,x);plot(x,z)
页: [1] 2
查看完整版本: 求助如何把离散点拟合为光滑曲线!