如何用matlab画平滑的曲线?

x=[00.30.60.91.21.51.82.12.42.73.03.33.63.94.24.54.85.15.45.76.06.36.66.97.27.57.8]y=... 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为纵坐标画平滑曲线?
展开
 我来答
yinzhen216
高粉答主

2018-03-31 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:211
采纳率:94%
帮助的人:13.1万
展开全部

方法一:转自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('右边:处理后的曲线');

babyAn涩
2015-08-09 · 知道合伙人金融证券行家
babyAn涩
知道合伙人金融证券行家
采纳数:7678 获赞数:132044
2014年于上海市商贸旅游学校毕业,专业会计。后就读于上海市同济大学网络教育学院。

向TA提问 私信TA
展开全部

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)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
princegyw
推荐于2017-12-15 · TA获得超过858个赞
知道小有建树答主
回答量:569
采纳率:0%
帮助的人:396万
展开全部

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

X=0:0.001:7.8;

Y=spline(x,y,X);

plot(X,Y)

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jimtien
2015-05-19 · TA获得超过7652个赞
知道大有可为答主
回答量:2146
采纳率:88%
帮助的人:1090万
展开全部

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


%不是很平滑的曲线

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-');

(红线比蓝线平滑)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
生活达人快乐冲冲冲
2015-10-29 · TA获得超过1.4万个赞
知道大有可为答主
回答量:3189
采纳率:90%
帮助的人:451万
展开全部
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');
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式