MATLAB 如何使曲线光滑

MATLAB 如何使曲线光滑,第1张

1、首先准备两列数据,作为xy坐标值,使用plot命令作图如下。

2、然后进行数据拟合,这里使用matlab的polyfit命令。如果数据的规律性很差的话,polyfit后面设置的参数要足够大才能保证拟合精度,在这个数据中选择15。

3、拟合后与原来数据对比后的std约为01287y的平均值为113精度值根据不同的需要设计不同的拟合值。

4、matlab下的命令为polyder。求导后得到的数据作图如下。可以看到在比区间上,导数有两处为0,这与原来曲线相符。

5、最后就完成了。

MATLAB中绘制平滑曲线一般使用最小二乘法或者B样条插值。

最小二乘法实际上是函数拟合,可以得到目标函数(这里为多项式)的系数,对outliers相对不敏感,缺点是需要预先设置目标函数的阶数,且有时不容易找到最优的目标函数形式。这里使用polyfit()函数进行多项式拟合,其他类似函数,如:lsqlin()不在讨论之列,用法有不同。

B样条插值是一种插值方法,得不到目标函数,但可以最大限度地在光滑的前提下接近采样点,对outliers敏感,只是比一般的多项式插值好点。

对照:plot()函数只是将采样点用直线连接在一起,结果是一条折线。

下面通过一个与条形图结合的实例对最小二乘法(least square)与B样条插值(B spline)进行分析:

1 y1=[1581292 1643826 5696203; 1091314 8493151 5379747; 1024499 7945205 8860759; 1202673 1315068 1962025;

2 5790646 1589041 3734177; 7349666 9041096 6012658; 1069042 1013699 3797468; 1603563 1068493 5696203;

3 1113586 8219178 7594937];

4 y11=[1581292,1091314,1024499,1202673,5790646,7349666,1069042,1603563,1113586];

5 y12=[1643826,8493151,7945205,1315068,1589041,9041096,1013699,1068493,8219178];

6 y13=[5696203,5379747,8860759,1962025,3734177,6012658,3797468,5696203,7594937];

7 x=[1 2 3 4 5 6 7 8 9];

8

9 %% bar graph

10b=bar([y11',y12',y13']);% same with b=bar(y1)

11grid on;

12set(gca, 'xticklabel', {'0-20','20-40','40-60','60-80','80-100','100-120','120-140','140-160','160-180'});

13legend('156C','164C','172C');

14xlabel('Angle:degree');

15ylabel('Percentage:%');

16title('Angle');

17hold on;

18

19%% least square method

20result1=polyfit(x,y11,3);

21plot(x,polyval(result1,[1:9]));

22

23%% B spline

24values1 = spcrv([[x(1) x x(end)];[y11(1) y11 y11(end)]],3);

25plot(values1(1,:),values1(2,:),'b','LineWidth',2);

上例中,y1=y11', y12', y13' 对于bar()函数,使用二者都可以,但是对于least square与B spline,只能将y值分开;另外,bar()函数对于x轴的值有默认值,所以对于bar(),不写x=[]仍可以执行,但对于least square与B spline,需明确指出x值。

如果曲线的条数比较少,例如3条,使用plot命令就可完成任务,具体命令如下:rplot(x1,y1,x2,y2,x3,y3);rhold这个命令设定是否保持当前figure的属性,如果执行holdroff,表示每次调用plot时都将当前figure设置成默认状态,即清空前面的曲线;如果执行holdron,表示每次调用plot时都只是在当前figure上添加曲线,以前的曲线继续保留。r假设30条曲线的坐标存在矩阵x、y中,每行表示一条曲线,则画曲线的示意命令如下所示:figure;hold on;for i=1:30

欢迎分享,转载请注明来源:表白网

原文地址:https://h5.hunlipic.com/biaobai/3971446.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2024-04-07
下一篇2024-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存