From help-octave-request at bevo dot che dot wisc dot edu Tue Dec 8 21:01:46 1998 Subject: rand within dld function From: Dirk Eddelbuettel To: heberf Cc: help-octave at bevo dot che dot wisc dot edu Date: Tue, 8 Dec 1998 22:00:47 -0500 (EST) Hi Heber, Heber> A simple question: How do I generate one uniform random number from Heber> within a .oct file function? For some reason I can't make it work Heber> out. The following code is a variation on what JWE once recommended for calling functions in .m files from code in .oct files. After all, the mechanism is the same -- you just have tell Octave's parser what you want to get executed. So the following will call Octave's "rand" function with whatever argument is in args(0). See below for how calls with '1' and '3' give just what rand(1) and rand(3) would have generated. Cheers, Dirk ----------------------------------------------------------------------------- #include "config.h" #include "oct-obj.h" #include "oct-map.h" #include "defun-dld.h" #include "toplev.h" DEFUN_DLD (call_oct_from_oct, args, nargout, "Should uniform random variable of dimension args(0).") { string func = "rand"; // read arg 0 double x = args(0).double_value(); // and put it into a new list octave_value_list arg; arg(0) = x; // function to call octave_value_list retval = feval (func, arg, 1); return retval; } ----------------------------------------------------------------------------- edd at sonny:~/octave/oct/source> octave Octave, version 2.0.13.94 (i386-pc-linux-gnu). Copyright (C) 1996, 1997, 1998 John W. Eaton. This is free software with ABSOLUTELY NO WARRANTY. For details, type `warranty'. octave:1> call_oct_from_oct(1) ans = 0.63730 octave:2> call_oct_from_oct(3) ans = 0.10647 0.49915 0.57270 0.47568 0.75489 0.65061 0.86098 0.28920 0.88621 -- Linux is not only free; it is, arguably, a better operating system, offering a degree of stability and an ability to scale up that NT cannot match. -- The Economist, Oct 3, 1998