指点成金-最美分享吧

登录

如何使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) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。

参考技术A

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

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

拟合简介

在MATLAB中可以用polyfit 来拟合多项式。拟合以及插值还有逼近是数值分析的三大基础工具,通俗意义上它们的区别在于:拟合是已知点列,从整体上靠近它们;插值是已知点列并且完全经过点列;逼近是已知曲线,或者点列,通过逼近使得构造的函数无限靠近它们。

以上内容参考:百度百科-拟合

参考技术B

有两种方法可以画平滑曲线,第一种是拟合的方法,第二种是用spcrv。

其实原理应该都一样就是插值。下面是源程序,大家可以根据需要自行选择,更改拟合的参数。

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

matlab 在特定曲线之间画阴影,急急急!!!!

我想在左边这块区域(蓝色线和坐标轴之间)铁甲阴影,怎么弄,望大神指点呀,
下面是我这个图的程序:
h4=ezplot("alpha*beta=0"); set(h4,"linestyle","-","color","b") hold on h5=ezplot("alpha*beta-2*alpha-2*beta+4+alpha*beta*(-0.5)=0"); set(h5,"linestyle","-","color","c") hold on h6=ezplot("(1-alpha)*(1-beta)=1"); set(h6,"linestyle","-","color","m"); hold on axis([0 2 0 2]);

程序改成如下:

clear all;clc;
[x1,y1]=solve("x=0","x*y-2*x-2*y+4+x*y*(-0.5)=0");%
[x2,y2]=solve("x=0","y=0");%
[x3,y3]=solve("x*y-2*x-2*y+4+x*y*(-0.5)=0","y=0"); %
plot(x1,y1,"bo",x2,y2,"bo",x3,y3,"bo");
hold on;
X=[x1,x2,x3,x1];
Y=[y1,y2,y3,y1];
h=fill(X,Y,"c");


hold on
x=0:0.001:2;
 y=(2*x-4)./(x-0.5*x-2);
h1= fill(x,y,"c");

 axis square
 axis([0 2 0 2]);

上图是程序得的结果。中间多了两根黑线。我只能手动编辑能去掉,如下图:

参考技术A

可用fill( )函数画阴影。

fill( )函数的输入本质上是一系列点。其对从第一点开始依次连接剩余点最后连接第一点所围闭合区域画阴影。

所以根据题主要求只要在蓝色线的基础上添加第一个点为(0,0)即可。

在题主代码的基础上添加以下代码即可:

hold on
alpha=0:0.001:2;
beta=(2*alpha-4)./(alpha-0.5*alpha-2);
%add (0,0) point manually
alpha1=[0,alpha];
beta1=[0,beta];
h1= fill(alpha1,beta1,"c");

参考技术B 请用:fill() 或 patch() 函数。
具体用法在matlab中 help fill; 或者 help patch;

以上是关于如何使matlab中曲线平滑?的主要内容,如果未能解决你的问题,请参考以下文章