如何用matlab画平滑的曲线?

作者&投稿:甫逸 (若有异议请与网页底部的电邮联系)
如何使matlab中曲线平滑?~

准备工具:
matlab
具体步骤:
1、首先准备两列数据,作为xy坐标值,使用plot命令作图如下。

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

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

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

5、最后就完成了。

MATLAB优势特点:
1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;
2) 具有完备的图形处理功能,实现计算结果和编程的可视化;
3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;
4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。

MATLAB中绘制平滑曲线一般使用最小二乘法或者B样条插值。
最小二乘法实际上是函数拟合,可以得到目标函数(这里为多项式)的系数,对outliers相对不敏感,缺点是需要预先设置目标函数的阶数,且有时不容易找到最优的目标函数形式。这里使用polyfit()函数进行多项式拟合,其他类似函数,如:lsqlin()不在讨论之列,用法有不同。
B样条插值是一种插值方法,得不到目标函数,但可以最大限度地在光滑的前提下接近采样点,对outliers敏感,只是比一般的多项式插值好点。
对照:plot()函数只是将采样点用直线连接在一起,结果是一条折线。

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


1. y1=[15.81292 16.43826 5.696203; 10.91314 8.493151 5.379747; 10.24499 7.945205 8.860759; 12.02673 13.15068 19.62025;...
2. 5.790646 15.89041 37.34177; 7.349666 9.041096 6.012658; 10.69042 10.13699 3.797468; 16.03563 10.68493 5.696203;...
3. 11.13586 8.219178 7.594937];
4. y11=[15.81292,10.91314,10.24499,12.02673,5.790646,7.349666,10.69042,16.03563,11.13586];
5. y12=[16.43826,8.493151,7.945205,13.15068,15.89041,9.041096,10.13699,10.68493,8.219178];
6. y13=[5.696203,5.379747,8.860759,19.62025,37.34177,6.012658,3.797468,5.696203,7.594937];
7. x=[1 2 3 4 5 6 7 8 9];
8.
9. %% bar graph
10.b=bar([y11',y12',y13']);% same with b=bar(y1)
11.grid on;
12.set(gca, 'xticklabel', {'0-20','20-40','40-60','60-80','80-100','100-120','120-140','140-160','160-180'});
13.legend('156C','164C','172C');
14.xlabel('Angle:degree');
15.ylabel('Percentage:%');
16.title('Angle');
17.hold on;
18.
19.%% least square method
20.result1=polyfit(x,y11,3);
21.plot(x,polyval(result1,[1:9]));
22.
23.%% B spline
24.values1 = spcrv([[x(1) x x(end)];[y11(1) y11 y11(end)]],3);
25.plot(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值。

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




怎么用MATLAB数学建模?
1、题中的决策者可以认为是消费者;2、运用预期效用函数来计算,即 3、比较E的大小,选择E值大的。就是决策者应选择的产品。4、用matlab实现上述要求,可以这样书写其程序。1)创建一个x从0到10的数组 2)创建u1(x),u2(x)效用函数 3)用plot绘图函数,绘制决策者的效用函数曲线 4)用xlabel和y...

怎样用matlab画等高线?
用法 contour3(Z) 画出三维空间角度观看矩阵z的等高线图,其中z的元素被认为是距离xy平面的高度,矩阵z至少为2*2阶的。等高线的条数与高度是自动选择的。若[m,n]=size(z),则x轴的范围为[1:n],y轴的范围为[1:m]。contour3(Z,n) 画出由矩阵z确定的n条等高线的三维图。contour3(Z,...

怎么在matlab中画出xoy平面上的曲线?用plot3函数。。
有mesh何surf两种命令来画三维曲面,它们使用的场合不同。前者是当z轴是x和y的显式函数时,后者是x,y,z中某个为其他2个的函数。mesh函数 这里用柱面坐标表示为 r2+z2=1x = sqrt(1-z2)cosθ, x = sqrt(1-z2)sinθ;执行matlab指令:>> [theta, Z] = meshgrid((0:0.1:2)*pi, (...

怎么用MATLAB补画不完整的图
本视频展示如何用matlab绘制散圆状态图,可用于相关科研数据绘图!

matlab中如何画出幂函数指数为分数时比如y=x^(1\/3)的完整图像
matlab 画图 怎么才能画出幂函数的图像啊,比如y=x^5-3x+4 记住用点运算: 如: x=0:1:20; y=x.^5-3*x+4; plot(x,y)在matlab中如何画出函数y=2.46x\/(1+1.46x)的图像 很好画 的,命令: syms x ; ezplot('2.46*x\/(1+1.46*x)',x)若点(√3,3)在幂函数...

matlab中图像显示函数
1、双击matlab软件图标,打开matlab软件,可以看到matlab软件的界面。2、使用“-1.56:0.01:1.56;”创建一维数组,表示从-1.56到1.56,每隔0.01会取一个数字。这个一维数组用来作为正割函数点的横坐标。3、创建两个函数,分别是y1=1.\/cos(x);y2=2.\/cos(x)。注意此处使用的是点除。4、使用...

matlab中低层绘图的基本思路是什么与高层绘图操作相比有何特点
只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Matlab还提供了直接对图形句柄进行操作的低层绘图操作。这类操作将图形的每个图形元素(如坐标轴、曲线、文字等)看做一个独立的对象,系统给每个对象分配一个句柄,可以通过句柄对该图形元素进行操作,而不影响其他部分。

matlab,简易绘图命令和一般绘图命令有啥区别,如ezplot何fpolt,请...
plot()、fplot()、ezplot()理解 函数plot是绘制二维图形的最基本函数,它是针对向量或矩阵的列来绘制曲线的。也就是说,使用plot 函数之前,必须首先定义好曲线上每一点的x 及y 坐标,常用格式为:(1)plot(x) 当x 为一向量时,以x 元素的值为纵坐标,x 的序号为横坐标值绘制曲线。当x 为一...

如何用matlab的plot命令画出y=e^(-t\/3)(sin(2*t)+2*sin(4*t)的图像...
t=0:0.01:pi;y=exp(-t\/3).*(sin(2*t)+2*sin(4*t) +0.4*sin(2*t).*sin(40*t));plot(t,y)

matlab,简易绘图命令和一般绘图命令有啥区别,如ezplot何fpolt,请...
plot()是针对向量或矩阵画平面曲线图像,画前要定义好定义域和相应的函数值,针对的是离散点 fplot()是画函数的图像,但是要规定函数的定义域,针对的是连续的点 ezplot()也是画函数的图像,并且不需要规定函数的定义域 比如:>>syms x >> y=sin(x);>> ezplot(y)就可以画出图像sin x ...

堆龙德庆县18796455341: matlab怎么平滑曲线 -
薛肾止咳: 可以使用interp1()函数进行插值. 具体过程如下: xi = 1:0.05:12; yii = interp1(P,xi,'pchip'); plot(xi,yii) 结果如图:

堆龙德庆县18796455341: matlab怎么对曲线进行平滑啊? -
薛肾止咳: MATLAB中绘制平滑曲线一般使用最小二乘法或者B样条插值. 最小二乘法实际上是函数拟合,可以得到目标函数(这里为多项式)的系数,对outliers相对不敏感,缺点是需要预先设置目标函数的阶数,且有时不容易找到最优的目标函数形式....

堆龙德庆县18796455341: 用matlab绘制平滑曲线 -
薛肾止咳: x=[0 0.028 0.528 1.028 1.528 2.028 2.528 3.028 3.528 4.028 4.528 5.028 5.528 6.028 6.528 7.028] y=[0 0 0.760 1.360 1.780 2.020 2.06 2.02 1.920 1.820 1.700 1.580 1.480 1.380 1.280 1.200] xx=linspace(0,7.2); yy=spline(x,y,xx); plot(xx,yy) 感觉点已经蛮多了,直接连起来其实也还行啊.你自己plot(x,y)试试,感觉差不多

堆龙德庆县18796455341: 怎么用matlab画光滑的曲线图 -
薛肾止咳: shading faceted命令将每个网格片用其高度对应的颜色进行着色,但网格线仍保留着,其颜色是黑色.这是系统的缺省着色方式. shading flat命令将每个网格片用同一个颜色进行着色,且网格线也用相应的颜色,从而使得图形表面显得更加光滑. shading interp命令在网格片内采用颜色插值处理,得出的表面图显得最光滑.

堆龙德庆县18796455341: 如何在matlab中用样条函数平滑曲线 -
薛肾止咳: 就是用spline() spline()是根据采集的一些点平滑成一条曲线. 比如: x=[1 2 3 5 8]; y=[3 2 6 4 9]; t=1:5; ts=1:0.01:5; xs=spline(t,x,ts); ys=spline(t,y,ts); plot(xs,ys,x,y,'o')画出的图就是把(x,y) 这5个点进行光滑连接成曲线

堆龙德庆县18796455341: 怎样用 matlab 画出指定几个点的曲线光滑 -
薛肾止咳: 一、x1=[0.83950.79950.78950.78670.78570.78530.7847 ]; y1=[1.11E-014.64E-021.19E-031.77E-041.57E-053.45E-062.55E-07 ]; semilogy(x1,y1)%原来的折线 x2=linspace(min(x1),max(x1)); y2=interp1(x1,y1,x2,'cubic'); figure semilogy(x2,y2)%处...

堆龙德庆县18796455341: 求助怎么用matlab画出平滑曲线 只有五个点,怎样画出这种图形 -
薛肾止咳: 因你给出的已知点只有五个点,那么你可以考虑用样条插值法,在曲线上插入若干个值,得到三个分段n次多项式系数.实现过程如下:x=[.....] y=[.....] pp=spline(x,y) pp.coefs n1个分段n次多项式系数 pp2=csaps(x,y,pp) 实现光滑拟合 fnplt(pp2) 绘制样条曲线图

堆龙德庆县18796455341: matlab绘制曲线,把几个点用曲线平滑过渡~ -
薛肾止咳:x1=[10,20,30,40,50]; y1=[18.13286,81.2038,98.53712,223.075,264.4804]; plot(x1,y1,'or'); hold on; X = min(x1):.1:max(x1); Y = interp1(x1,y1,X,'cubic'); plot(X,Y); hold off;

堆龙德庆县18796455341: 怎么matlab里画的曲线光滑现在取到了100个点,用plot函数画图,但是图像不光滑,请问有什么命令在已知数据时画出光滑的曲线 -
薛肾止咳:[答案] 用三次样条插值 算法 可以使 曲线 很光滑 不知道 你学过 这个算法吧 如果没有 你可以搜 下 这个算法 网上比较多

堆龙德庆县18796455341: 怎么用MATLAB在同一坐标中绘制下列函数其中x的范围的范围在 - pi 到pi之间,选择合适的数据间距画出平滑曲线 -
薛肾止咳: 一般说来,要想得到平滑的正弦曲线,一个周期至少需要20个点以上,这样,绘制y3至少要取60个点.当然,具体取多少点合适,你可以取别的值再做一下对比.另外,y1、y2、y3也可以取相同的点数,我这里示范的是得到平滑曲线的最少点.N = 20; x1 = linspace(-pi, pi, N); x2 = linspace(-pi, pi, 2*N); x3 = linspace(-pi, pi, 3*N); y1 = sin(x1); y2 = sin(2*x2); y3 = sin(3*x3); plot(x1, y1, 'r--', x2, y2, 'b-', x3, y3, 'g:') axis([-pi pi -1 1])

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网