Daniel,

Looking at the graph from your script there are two striking things. First, your data seems to be heavily clustered at certain regions, I mean, several points very close to each other, then a gap without data (which is conveniently interpolated by the plot clause), then another cluster and so on. From a statistical point of view, each cluster counts as a single point. You don't have information of what happens between neighboring clusters.

The second striking thing is that you don't seem to be using the spline concept correctly. You are using it to approximate the same points you already have. To make things worse, you are using lsq_splin (a cannon to kill a fly), which is normally used to get a simpler spline by using less breakpoints than the total number of available points. This will normally give a smooth approximation of data, so that the spline will not necessarily pass through any of your points. It is used when the data set is inconsistent due to noise or measurement errors to avoid over representing irrelevant features. If you use it with the same number of breakpoints as the available data, I guess you will have a spline that pass through all the points (this will be the least-square solution since the error will be zero), so it is the same as an ordinary spline interpolation.

The correct way to use a spline is to use it to interpolate your data, i.e., to have much more points than the original ones, or to have them more evenly distributed. You are representing your very same data using a spline, so there is no smoothing. The plot function does some interpolation job, but linearly: it connects points with straight segments.

You need to calculate more points and more evenly distributed with your spline, but probably you'll be disappointed because the behavior in the large gaps between data clusters may be strangewith some odd oscillations..

If you can, try to generate your data more evenly.

Regards,

Federico Miyara


On 11/04/2020 21:45, Daniel Stringari wrote:
Federico,

I am extracting the values of the vectors (vv12 and vt12) from a logic in which it takes data from a spreadsheet that was generated using specific software. The vectors (vv12 and vt12) represent an efficiency curve within the torque x speed plane, I have eleven more of these vectors that vary in size. I believe that I do not have a role in which one depends on the other directly. I tried to follow your first reasoning and arrived at a routine that does not report errors but is not smoothing my curve either, follow the routine:

clc
clear
vt12  =  
[5350.3,5380.19,5410.08,5439.96,4149.5,4179.35,3756.57,3602.73,3568.12,3597.85,3681.91,3711.59,6143.24,6172.86,6202.49,6232.1]
vv12  =  
[40.16,39.93,39.71,39.49,69.04,68.54,95.32,119.26,140.49,139.32,155.62,154.37,93.27,92.82,92.38,91.94]

c  =  size  (vt12)
a  =  1
b  =  c(2)
n  =  c(2)
x  =  linspace  (a,  b,  n)

[yvt,dvt]  =  lsq_splin(x,vt12,linspace  (a,b,n))
[yvv,dvv]  =  lsq_splin(x,vv12,linspace  (a,b,n))

ys=interp(linspace  (a,b,n),linspace  (a,b,n),yvt,dvt)
xs=interp(linspace  (a,b,n),linspace  (a,b,n),yvv,dvv)

plot  (ys,xs,'r')
xlabel  ('Speed (rpm)')
ylabel  ('Torque (Nm)')
title  ('Torque x speed values')
Any idea how I can proceed with my goal of smoothing the curve to use the color 
map later?

On Sat, Apr 11, 2020 at 9:18 PM Federico Miyara <[email protected] <mailto:[email protected]>> wrote:


    Daniel,

    I'm afraid I was a bit confused with your application case.

    I assumed that there was an independent variable such as time or
    other which the other two, vt12 and vv12, depend on. If this were
    the case, the expected graph could be a curve or rather a
    trajectory with some hysteresis.

    But if your data are just measurements in no particular order of
    what is a functional relation of one variable respect to the
    other, for instance vt12 = f(vv12), then the approach is
    different. You should basically sort the independent variable in
    increasing order using gsort and apply the same sorting to the
    dependent variable:

    [x, I] = gsort(vv12,"g","i");
    y = vt12(I);

    Then you can proceed to interpolate with spline or lsg_splin.

    Regards,

    Federico Miyara


    On 10/04/2020 21:05, Daniel Stringari wrote:
    Federico,

    I appreciate the help. Below is a list of the code on which I try
    to plot the data with Isq_splin:

    c = size (vt12)
    a = 0
    b = c (1) // c (1) = 16
    n = c (1)
    x = linspace (a, b, n)
    [y, d] = lsq_splin (vt12, vv12, x ')
    plot (y, d, 'r')
    xlabel ('Speed (rpm)')
    ylabel ('Torque (Nm)')
    title ('Torque x speed values')

    //vt12 = 5350.3 5380.19 5410.08 5439.96 4149.5 4179.35 3756.57
    3602.73 3568.12 3597.85 3681.91 3711.59 6143.24 6172.86 6202.49
    6232.1
    //vv12 = 40.16   39.93   39.71   39.49   69.04   68.54 95.32  
    119.26   140.49   139.32   155.62   154.37 93.27   92.82   92.38
      91.94

    but I'm getting the error: lsq_plin: There are not enough points
    to adjust.

    Does anyone understand what could be wrong?

    On Wed, Apr 8, 2020 at 12:54 AM Federico Miyara
    <[email protected] <mailto:[email protected]>> wrote:


        Daniel,

        You may try with lsq_spline, which unlike ordinary spline,
        doesn't fit the data exactly, and it doesn't need the data
        with any particular order.

        But trying to understand your graph, it seems that you should
        parametrize two variables independently, each one with
        respect to the index. Something like this:

        x = [x1, x2, ..., xn]
        y = [y1, y2, ..., yn]

        Then you approximate x vs 1:n and y vs 1:n using spline or
        lsq_splin. Finally you plot xs vs ys (the smoothed versions
        of x and y)

        Regards,

        Federico Miyara


        On 07/04/2020 22:48, Daniel Stringari wrote:
        Good night friends,
        I wrote an email before, but I believe that I was not clear in my words 
and
        so I will write more clearly.

        In this annex 1, I have the graph I am generating. Basically I am 
extracting
        values of x (speed) and y (torque) from excel and generating vectors of 
x []
        and y [] to plot internal lines. I want to smooth these lines, but the
        functions of the scilab are only for growing points. I thought about
        creating cubic splines manually, but I don't know how to do it. Can 
anybody
        help me ?

        In addition, I would like to color my chart with level colors according 
to
        the colorbar, but I am not able to implement contour2d for this case.

        thanks.

<http://mailinglists.scilab.org/file/t498028/annex_1.png> <http://mailinglists.scilab.org/file/t498028/annex_1.png>


        --
        Sent 
from:http://mailinglists.scilab.org/Scilab-users-Mailing-Lists-Archives-f2602246.html
        _______________________________________________
        users mailing list
        [email protected]  <mailto:[email protected]>
        http://lists.scilab.org/mailman/listinfo/users


        _______________________________________________
        users mailing list
        [email protected] <mailto:[email protected]>
        http://lists.scilab.org/mailman/listinfo/users


    _______________________________________________
    users mailing list
    [email protected]  <mailto:[email protected]>
    http://lists.scilab.org/mailman/listinfo/users

    _______________________________________________
    users mailing list
    [email protected] <mailto:[email protected]>
    http://lists.scilab.org/mailman/listinfo/users


_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users

_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users

Reply via email to