【问题标题】:Smooth plot of non-dependent variable graph非因变量图的平滑图
【发布时间】:2016-05-13 16:23:20
【问题描述】:

假设我们有以下数据:

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); 绘制上述数据时,我得到了这个图表:

有什么方法可以让图形看起来像三次图一样平滑?

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

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

    这里有一些代码供您运行。我们将使用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);
    

    我现在得到以下信息:

    【讨论】:

    • 它正在工作!太感谢了!它为我节省了很多工作!
    猜你喜欢
    • 1970-01-01
    • 2017-08-08
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多