help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: octave-speed


From: Paul Thomas
Subject: Re: octave-speed
Date: Sat, 5 Feb 2005 10:13:36 +0100

Rafael,

I was curious as to just what performance improvement could be obtained with a little C++ routine, so....... here it is. It si bare bones, has no error or parameter checking but it works. The commented out line uses the cmath library sqrt, instead of calling the octave sqrt through feval. The times are:

Original in octave         5.2s
C++ call octave sqrt     0.58s
C++ call cmath sqrt      0.16s

The octave part-

tic;
Ns = 1e5;
m = [1:(Ns-1)];
T = (sqrt (m .* (m+1)));
n = zeros (1, Ns);
n(1) = 8;
n = funct_iter ("sqrt", T, n);    %call to .oct function
printf ("time=%g\n", toc);
printf ("n=%g\n", n(Ns));

and funct_iter.cpp -

#include <octave/oct.h>
#include <octave/parse.h>
#include <cmath>
DEFUN_DLD (funct_iter, args,,
         "Function iteration demo")
{
 octave_value_list retval;
 std::string fcn = args( 0 ).string_value();
 ColumnVector T(args (1).vector_value ());
 ColumnVector n(args (2).vector_value ());
 int Ns = n.rows ();
 for (int i = 0; i < (Ns - 1); i++)
   {
     octave_value argi (T(i)*n(i));
     octave_value_list fargs (argi);

/* feval returns an octave_value_list, (0) picks out the 1st item on the list and
   scalar_value () converts it into a scalar */

     n(i+1) = feval (fcn,  fargs, 1)(0).scalar_value ();

/*      n(i+1) = sqrt (n(i)*T(i)); */

   }
 retval(0) = n;
 return retval;
}



-------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.

Octave's home on the web:  http://www.octave.org
How to fund new projects:  http://www.octave.org/funding.html
Subscription information:  http://www.octave.org/archive.html
-------------------------------------------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]