非因变量图的平滑图

时间:2016-05-12 17:34:06

标签: matlab plot

假设我们有以下数据:

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

有没有办法让图形像立方图一样平滑?

1 个答案:

答案 0 :(得分:3)

是的,你可以。您可以在关键点之间进行插值。这需要一些技巧。盲目地使用任何MATLAB命令进行插值都不会起作用,因为它们需要增加独立轴(x - 轴)。您目前无法对您的数据执行此操作...至少开箱即用。因此,您必须创建一个虚拟的值列表,其范围从1到A1(或A2中的N,因为它们的大小相等创建一个独立的轴并通过指定分辨率更精细间距的虚拟列表来独立插入两个数组。这个更精细的间距由您想要在图中引入的新点的总数控制。这些点将在虚拟列表的范围内定义,但每个点之间的间距将随着您增加新点的总数而减少。作为一般规则,你添加的点越多,所以间距就越小,因此绘图应该更加平滑。完成后,将最终值绘制在一起。

这里有一些代码供您运行。我们将使用interp1为我们和大部分工作执行插值。函数linspace在虚拟列表中创建更精细的点网格以便于插值。 pchip将是您想要绘制的所需点的总数。我现在已经将其设为500,这意味着使用原始数据将使用500点进行插值。通过增加(或减少)总点数并查看其对数据平滑度的影响进行试验。

我还将使用Piecewise Cubic Hermite Interpolating PolynomialA1作为插值方法,如果您想获得技术,则基本上是三次样条插值。假设已经创建了A2%// 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);

Trait method callMe has not been applied, because there are collisions with other trait methods on Src\Classes\A in
C:\wamp\www\src\classes\a.php on line 72

我现在得到以下内容:

enter image description here