[Gretl-devel] matrix declaration in a pakage
Ignacio Diaz-Emparanza
ignacio.diaz-emparanza at ehu.es
Fri Jul 6 05:10:20 EDT 2007
On Friday 06 July 2007 03:54:08 Allin Cottrell wrote:
> On Wed, 4 Jul 2007, Ignacio Diaz-Emparanza wrote:
> > If you want to use a matrix in a function pakage, the matrix
> > need to be declared previously...
>
> I have just put in place a new Windows snapshot which should
> have better error-reporting for user-defined functions.
>
> As for the issue of "matrix needs to be declared previously",
> there are two cases:
>
> A. The matrix argument is direct or by-value, of type "matrix".
> In this case it is indeed an error if you type a name to which
> there corresponds no pre-existing matrix. This error should now
> be flagged properly.
>
OK, this is an input matrix and needs to be known previously. I think Gretl
works well in this case.
> B. The matrix argument is indirect or by-reference, of type
> "matrix *". In this case, if you type a name, and no matrix
> exists of that name, a new "null matrix" [in fact, a 1 x 1 matrix
> with value 0] will be created automatically and supplied as the
> argument in question.
>
> The point is that in case B it's plausible that the function is
> not interested in the original content of the matrix. but is
> rather offering to re-size and fill the matrix with something that
> might be of interest to the caller. (Obviously, if you as the
> writer of a function package actually expect valid incoming
> information in such an indirect matrix argument, you'll have to
> check for this.)
This is exactly the case. My function is not interested in the original
content of the matrix, but does some calculations to fill it.
The problem is that the behaviour in Linux is correct, but in Windows, the
original matrix must be previously declared.
>
> I've taken another look at the code, and I don't see anything
> relevant that should differ between Linux and Windows -- though.
> of course, I could have missed some weird subtlety!
I tried now with the current Windows snaphot and the problem is there.
The function that originated this naive "matrixdec" package was
function matrixdec (series Y, matrix *inreg)
series yl = Y(-1)
return series yl
end function
I am writing this small package because my real function is very complicated.
But I am reproducing the problem perfectly with this small package. The
matrix "inreg" is computed internally in my real package and its value should
be assigned to the matrix name the user provides in the dialog box. In this
small matrixdec package I am not assigning internally a value to the matrix,
but this is not a problem (I can run it perfectly in Linux).
To run the package in Linux I open a time series data file (data3-6, for
example) and select "/File/Function Files/On local machine" and
select "matrixdec". In the dialog box I put, for example, Ct in the series
field, blabla (or whatever you want) in the matrix "inreg" field, and any
name (dC) in the return field. Clicking on "ok" the series with the first lag
of Ct is computed (I know it is silly, but serves as an example). The main
window normally it is not automatically refreshed so you can
select "/Data/Refresh window" to see the new created series dC.
If I follow the same steps in Windows, when I click on the "ok" button in the
dialog box I obtain the error "Unspecified error".
I do not obtain the error if, before executing the function, I open a gretl
console and run the command "matrix blabla".
--
Ignacio Diaz-Emparanza
DEPARTAMENTO DE ECONOMÍA APLICADA III (ECONOMETRÍA Y ESTADÍSTICA)
UPV/EHU
Avda. Lehendakari Aguirre, 83 | 48015 BILBAO
T.: +34 946013732 | F.: +34 946013754
www.et.bs.ehu.es
More information about the Gretl-devel
mailing list