bug in csape (part of package splines)

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

bug in csape (part of package splines)

Ted Rippert
csape(x, y, "cond") with a boundary condition of "periodic" will work  
for a one dimensional vector, but not for a matrix value for y. This  
is fixed by changing line 162 in csape.m from:

   c(2:n,idx) = z(:,2:end) - z(:,1) * fact;

to:

   c(2:n,:) = z(:,2:end) - z(:,1) * fact;

------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Octave-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/octave-dev
Reply | Threaded
Open this post in threaded view
|

Re: bug in csape (part of package splines)

Nir Krakauer-2
Dear Ted,

Can you give an example where it fails?

Nir

On Wed, Nov 21, 2012 at 3:25 AM, Ted Rippert <[hidden email]> wrote:
> csape(x, y, "cond") with a boundary condition of "periodic" will work
> for a one dimensional vector, but not for a matrix value for y. This
> is fixed by changing line 162 in csape.m from:
>
>    c(2:n,idx) = z(:,2:end) - z(:,1) * fact;
>
> to:
>
>    c(2:n,:) = z(:,2:end) - z(:,1) * fact;

------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Octave-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/octave-dev
Reply | Threaded
Open this post in threaded view
|

Re: bug in csape (part of package splines)

Ted Rippert
Nir,

Setup two one dimensional variables, y1 and y2 and a 2-D variable y  
with the same points. In this case a circle with the 5th point equal  
to the first. Run csape with the periodic condition and then inspect  
the structures produced. y should yield the same coefficients as y1  
and y2, just stacked into an array:

 >>> x = linspace(0, 2*pi, 5);
 >>> y1 = cos(x);
 >>> y2 = sin(x);
 >>> pp1 = csape(x, y1, 'periodic');
 >>> pp2 = csape(x, y2, 'periodic');
 >>> y = [y1; y2];
 >>> pp = csape(x, y, 'periodic');
 >>> pp1.P
ans =

    0.12901  -0.60793   0.00000   1.00000
    0.12901   0.00000  -0.95493   0.00000
   -0.12901   0.60793   0.00000  -1.00000
   -0.12901   0.00000   0.95493  -0.00000

 >>> pp2.P
ans =

   -0.12901  -0.00000   0.95493   0.00000
    0.12901  -0.60793   0.00000   1.00000
    0.12901  -0.00000  -0.95493   0.00000
   -0.12901   0.60793  -0.00000  -1.00000

 >>> pp.P
ans =

   -0.12901  -0.00000  -0.31831   1.00000
    0.12901  -0.60793  -0.00000   0.00000
    0.12901  -0.00000   0.31831  -1.00000
   -0.12901   0.60793   0.00000  -0.00000
    0.00000   0.00000   0.63662   0.00000
    0.00000   0.00000  -0.63662   1.00000
    0.00000   0.00000  -0.63662   0.00000
    0.00000   0.00000   0.63662  -1.00000

As you see they are quite different. This is from a saved session  
using spline 1.0.7, but I have had similar results with the latest  
splines 1.1.0. Actually, it looks like the only thing that has changed  
between 1.0.7 and 1.1.0 is the function mkpp now has different  
filednames. The latest edit noted in the comments of csape.m is Feb.  
19th 2001 in both versions.

All this is easy to see in a plot of the points overlaid with the  
splines too:

 >>> xpp = linspace(0, 2*pi, 201);
 >>> plot(y1, y2, 'ko', ppval(pp1, xpp), ppval(pp2, xpp), 'b-')
 >>> figure
 >>> yy = ppval(pp, xpp);
 >>> plot(y(1,:), y(2,:), 'ko', yy(1,:), yy(2,:), 'b-')

Now, after editing csape.m per my recommendation:

 >>> pp = csape(x, y, 'periodic');
 >>> pp.P
ans =

    0.12901  -0.60793   0.00000   1.00000
    0.12901   0.00000  -0.95493   0.00000
   -0.12901   0.60793   0.00000  -1.00000
   -0.12901   0.00000   0.95493  -0.00000
   -0.12901  -0.00000   0.95493   0.00000
    0.12901  -0.60793   0.00000   1.00000
    0.12901  -0.00000  -0.95493   0.00000
   -0.12901   0.60793  -0.00000  -1.00000

Just looking at idx in csape.m ( idx = ones (columns(a),1); ), you can  
see that using it in a matrix index on the left side of an equation  
makes no sense anyway.

Ted

On Nov 21, 2012, at 1:09 PM, Nir Krakauer wrote:

> Dear Ted,
>
> Can you give an example where it fails?
>
> Nir
>
> On Wed, Nov 21, 2012 at 3:25 AM, Ted Rippert <[hidden email]>  
> wrote:
>> csape(x, y, "cond") with a boundary condition of "periodic" will work
>> for a one dimensional vector, but not for a matrix value for y. This
>> is fixed by changing line 162 in csape.m from:
>>
>>   c(2:n,idx) = z(:,2:end) - z(:,1) * fact;
>>
>> to:
>>
>>   c(2:n,:) = z(:,2:end) - z(:,1) * fact;


------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Octave-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/octave-dev
Reply | Threaded
Open this post in threaded view
|

Re: bug in csape (part of package splines)

Nir Krakauer-2
Thanks very much. I fixed this as you indicate in the SVN repository,
and added tests to check for it happening again.

------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Octave-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/octave-dev