Smooth plot of non-dependent variable graph

前端 未结 1 1036
余生分开走
余生分开走 2020-12-21 15:49

Let\'s say we have the following data:

A1= [41.3251
   18.2350
    9.9891
   36.1722
   50.8702
   32.1519
   44.6284
   60.0892
   58.1297
   34.7482
   34.         


        
相关标签:
1条回答
  • 2020-12-21 15:52

    Yes you can. You can interpolate in between the keypoints. This will require a bit of trickery though. Blindly using interpolation with any of MATLAB's commands won't work because they require that the independent axes (the x-axis in your case) to increase. You can't do this with your data currently... at least out of the box. Therefore you'll have to create a dummy list of values that span from 1 up to as many elements as there are in A1 (or A2 as they're both equal in size) to create an independent axis and interpolate both arrays independently by specifying the dummy list with a finer spacing in resolution. This finer spacing is controlled by the total number of new points you want to introduce in the plot. These points will be defined within the range of the dummy list but the spacing in between each point will decrease as you increase the total number of new points. As a general rule, the more points you add the less spacing there will be and so the plot should be more smooth. Once you do that, plot the final values together.

    Here's some code for you to run. We will be using interp1 to perform the interpolation for us and most of the work. The function linspace creates the finer grid of points in the dummy list to facilitate the interpolation. N would be the total number of desired points you want to plot. I've made it 500 for now meaning that 500 points will be used for interpolation using your original data. Experiment by increasing (or decreasing) the total number of points and seeing what effect this has in the smoothness of your data.

    I'll also be using the Piecewise Cubic Hermite Interpolating Polynomial or pchip as the method of interpolation, which is basically cubic spline interpolation if you want to get technical. Assuming that A1 and A2 are already created:

    %// 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);
    

    I now get the following:

    0 讨论(0)
提交回复
热议问题