如何用matlab画平滑的曲线?

x=[0 0.3 0.6 0.9 1.2 1.5 1.8 2.1 2.4 2.7 3.0 3.3 3.6 3.9 4.2 4.5 4.8 5.1 5.4 5.7 6.0 6.3 6.6 6.9 7.2 7.5 7.8]
y=[0 0 0.12 0.26 0.40 0.55 0.65 0.72 0.73 0.71 0.66 0.61 0.54 0.48 0.42 0.37 0.32 0.29 0.25 0.22 0.20 0.18 0.16 0.15 0.14 0.12 0.12]
如何根据以x为横坐标,y为纵坐标画平滑曲线?

方法一:转自yihandk666

x=[0 0.1 0.16 0.27 0.41 0.48 0.59 0.8]

y=[5 9 70 118 100 17 0 5];

那么用plot画出的函数为折线,如下图:

要想把那个折点平滑掉。像论文中那样,具体采用样条函数:下面是样条函数的定义:

spline function 一类分段(片)光滑、并且在各段交接处也有一定光滑性的函数。简称样条。样条一词来源于工程绘图人员为了将一些指定点连接成一条光顺曲线所使用的工具,即 富有弹性的细木条或薄钢条。由这样的样条形成的曲线在连接点处具有连续的坡度与曲率。分段低次多项式、在分段处具有一定光滑性的函数插值就是模拟以上原理 发展起来的,它克服了高次多项式插值可能出现的振荡现象,具有较好的数值稳定性和收敛性,由这种插值过程产生的函数就是多项式样条函数。

大概意思就是让转折点变平滑,下面就是采用这种方式:

values = spcrv([[x(1) x x(end)];[y(1) y y(end)]],3);
plot(values(1,:),values(2,:))

具体里面的原理我也没看过,不过目的是达到了 下面是结果

方法二:转自greatdju

figure:
x1=[0.8395 0.7995 0.7895 0.7867 0.7857 0.7853 0.7847 ];
y1=[1.11E-01 4.64E-02 1.19E-03 1.77E-04 1.57E-05 3.45E-06 2.55E-07 ];
subplot(1,2,1);
semilogy(x1,y1);  %原来的折线
title('左边:原来的折线')
x2=linspace(min(x1),max(x1));
y2=interp1(x1,y1,x2,'cubic');
subplot(1,2,2)
semilogy(x2,y2)  %处理后的曲线
title('右边:处理后的曲线');

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-08-09

x=[0.1 0.16 0.27 0.41 0.48 0.59 0.8];
y=[8 70 118 100 9 0 5];
以上是每一个X和Y对应的坐标,这个图形就像二次函数一样的
如果要在图中绘制一条直线加上y=70的直线,用不同颜色区分。
 x=[0 0.1 0.16 0.27 0.41 0.48 0.59 0.8];
y=[5 9 70 118 100 17 0 5];
y1=[22.8 22.8 22.8 22.8 22.8 22.8 22.8 22.8]; values1=spcrv([[x(1) x x(end)];[y(1) y y(end)]],3,1000); values2=spcrv([[x(1) x x(end)];[y1(1) y1 y1(end)]],3,1000); plot(values1(1,:),values1(2,:),'r',values2(1,:),values2(2,:),'b')

ans2: 代码如下:
x=[0.1 0.16 0.27 0.41 0.48 0.59 0.8];
y=[8 70 118 100 9 0 5];
xp=0:0.1:1; yp=interp1(x,y,xp);
plot(x,y,'b-',xp,yp,'r-')%红色为差值后的平滑图像
hold on y1=70; plot(xp,y1,'c-') %

ans3:
x=[0.1 0.16 0.27 0.41 0.48 0.59 0.8];
y=[8 70 118 100 9 0 5]; X=linspace(0,.9); Y=spline(x,y,X); plot(x,y,'ro',X,Y,X,70+0*X)

第2个回答  推荐于2017-12-15

%使用样条插值就可以画出平滑曲线了,添加这样几行代码

X=0:0.001:7.8;

Y=spline(x,y,X);

plot(X,Y)

本回答被提问者采纳
第3个回答  2015-05-19

也就是用插值方法,增加样点,用样条函数拟合,这样使得曲线平滑了


%不是很平滑的曲线

x=1:5;

y=1+x.^2+8*rand(1,length(x));

plot(x,y,'b-');


%插值,增加x样点数

x1 = 1:0.1:5

%用样条函数插值

y1=spline(x,y,x1);

hold on;

plot(x1,y1,'r-');

(红线比蓝线平滑)

第4个回答  2015-10-29
matlab将曲线进行平滑的方法如下:

clc,clear;
a = 1:1:6;%横坐标
b = [8.0 9.0 10.0 15.0 35.0 40.0]; %纵坐标
plot(a, b, 'b'); %自然状态的画图效果
hold on;

第一种,画平滑曲线的方法:

c = polyfit(a, b, 2); %进行拟合,c为2次拟合后的系数;
d = polyval(c, a, )1; %拟合后,每一个横坐标对应的值即为d;
plot(a, d, 'r'); %拟合后的曲线;

plot(a, b, '*'); %将每个点 用*画出来;
hold on;

第二种,画平滑曲线的方法
values = spcrv([[a(1) a a(end)];[b(1) b b(end)]],3);
plot(values(1,:),values(2,:), 'g');
相似回答