[Top][All Lists]

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

Re: Class of User Types [Was: Moving code from octave-forge to octave [W

From: Paul Kienzle
Subject: Re: Class of User Types [Was: Moving code from octave-forge to octave [Was: polyderiv problem?]]
Date: Fri, 25 Feb 2005 08:57:21 -0500

On Feb 25, 2005, at 8:24 AM, David Bateman wrote:

Paul Kienzle wrote:

Another alternative is to delay recording the primitive polynomial type until something is actually assigned to the matrix, and from then on check
that it is consistent.  Would that work for you?

Err, I have to admit that you can do

gf(floor(8*rand(4,4)),8) + ones(4,4)

As the galois/matrix operations are already taken into account with the matrix promoted the a galois field. However

a = zeros(4,4); a(:,1) = gf(floor(8*rand(4,1)),8)

won't promote a, but leave it as a matrix, and so the implementation of triu won't work. I suppose an alternative for the galois fields is to modify the assign function to promote the matrix to a galois field as well... This might also work for the fixed point operators.

I was thinking:

   z = zeros(4,4,class(X));
   for i=1:columns(X), z(1:i,:) = X(1:i,:); end

so z would already be known to be a galois type but with an indeterminate

Or maybe something more generic, such as array(exemplar,dims) so that
dispatch will work.  Also, this makes more sense for some types such
as 'cell' for which I was assuming the zeros function would create a
set of empty cells.

Then triu would be:

   z = array(X,size(X));
   for i=1:columns(X), z(1:i,:) = X(1:i,:); end

Otherwise, zeros(dims,'auto',exemplar) does do what we want assuming
the class registers a zeros constructor.

I don't see that we need an explicit zero constructor,

octave_value retval = args(0);
retval = retval.resize(dim_vector(0,0)).resize(args(0).dims());

does exactly the right.

Okay, that means we can implement it without touching octave.  I'm
not too keen on the name 'array' though.  I suppose we could get
away with just exposing resize and implement triu as:

    z = resize(resize(X,[0,0]),size(X));
    for i=1:columns(X), z(1:i,:) = X(1:i,:); end

Not quite as pretty but it'll do.  Resize can also be used to implement

- Paul

reply via email to

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