2016-05-12 47 views
2

比方说,我们有如下数据:非因变量图的平滑情节

A1= [41.3251 
    18.2350 
    9.9891 
    36.1722 
    50.8702 
    32.1519 
    44.6284 
    60.0892 
    58.1297 
    34.7482 
    34.6447 
    6.7361 
    1.2960 
    1.9778 
    2.0422]; 

A2=[86.3924 
    86.4882 
    86.1717 
    85.8506 
    85.8634 
    86.1267 
    86.4304 
    86.6406 
    86.5022 
    86.1384 
    86.5500 
    86.2765 
    86.7044 
    86.8075 
    86.9007]; 

当我绘制使用plot(A1,A2);上述数据,我得到这个图:

enter image description here

是有没有办法让图形看起来像一个立方图一样平滑?

回答

3

当然可以。您可以插入关键点之间。这将需要一些欺骗。盲目地使用MATLAB的任何命令进行插值将不起作用,因为它们要求独立轴(在你的情况下为x轴)增加。你目前无法用你的数据做到这一点...至少是开箱即用的。因此,你必须创建因为有在A1(或A2因为他们是在大小都等于)跨越从1到尽可能多的元素的值的虚设列表来创建一个独立的轴和独立插值阵列通过在分辨率中指定具有更精细间距的虚拟列表。这个更精细的间距由您想要在图中引入的新点的总数控制。这些点将在虚拟列表的范围内定义,但是随着您增加新点的总数,每个点之间的间距将会减小。作为一般规则,您添加的点数越少,所以情节应该更加平滑。一旦你这样做,一起绘制最终值。

下面是一些代码,您可以运行。我们将使用interp1为我们和大部分工作进行插值。函数linspace在虚拟列表中创建更精细的点网格以便于插值。 N将是您想要绘制的所需点的总数。我现在已经做了500次,这意味着500点将用于使用原始数据进行插值。通过增加(或减少)总点数并观察它对数据的平滑性有什么影响来进行实验。

我也将使用Piecewise Cubic Hermite Interpolating Polynomialpchip作为插值的方法,如果您想获得技术,基本上是三次样条插值。假设A1A2已创建:

%// Specify number of interpolating points 
N = 500; 

%// Specify dummy list of points 
D = 1 : numel(A1); 

%// Generate finer grid of points 
NN = linspace(1, numel(A1), N); 

%// Interpolate each set of points independently 
A1interp = interp1(D, A1, NN, 'pchip'); 
A2interp = interp1(D, A2, NN, 'pchip'); 

%// Plot the data 
plot(A1interp, A2interp); 

我现在得到以下几点:

enter image description here

+0

它的工作!非常感谢!它为我节省了很多工作! –

+0

@Jdane不客气:)祝你好运! – rayryeng