Having trouble with global array variables
Ben Abbott
bpabbott at mac.com
Sun Jul 6 19:01:55 CDT 2008
On Jul 6, 2008, at 7:43 PM, Olumide wrote:
> Hello -
>
> The following script is supposed to use the user-defined cov()
> function
> to initialize a matrix which is later solved. For some reason, the
> global variable position is either not visible or disappears this
> function. What am I doing wrong?
>
> Thanks,
>
> - Olumide
>
> ############################### SCRIPT ###############################
>
> debug_on_warning(1);
> debug_on_error(1);
>
> clear height;
> clear sigma;
> clear position;
> clear B;
global position;
> position = [ 0,0,0; 256,0,0; 0,256,0; 256,256,0; 128,128,5 ];
> #position = [ 0,0,0; 0,128,0; 256,128,0; 256,0,0; 0,256,0; 256,256,0;
> 128,128,5 ];
> zeroMatrix = [ 0,0,0; 0,0,0; 0,0,0 ];
> zeroVec = [ 0; 0; 0];
> dim = size(position)(1);
>
> ################### Subroutines ###################
>
> function dist = r( i , x , y )
> global position;
> dist = sqrt( ( x - position(i,1) )^2 + ( y - position(i,2) )^2 );
> endfunction
>
>
> function c = covariance( i, x, y )
> rad = r( i, x, y );
> c = rad^2 * log10(rad);
> endfunction
>
>
> function c = cov( i, j )
global position;
> if(i == j)
> c = 0;
> else
> rad = r( j, position(i,1), position(i,2) );
> c = rad^2 * log10(rad);
> endif
> endfunction
>
> ################### Construct & solve Matrix ###################
>
> for i = 1:dim
> B(i, 1) = 1;
> B(i, 2) = position(i,1);
> B(i, 3) = position(i,2);
>
> height(i,1) = position(i,3);
>
> for j = 1:i
> sigma(i,j) = sigma(j,i) = cov(i,j);
> endfor
> endfor
>
> M = [[sigma, B];[B',zeroMatrix]];
> I = [height;zeroVec];
>
> O = M\I;
The line "global position" should occur in the original script as well
as in each function that uses it.
To be safe, be sure to insert the line "global position" ahead of any
line that uses the variable "position".
I haven't tried to run your script, but I did insert the lines where
they belong ... hopefully, I got it all right.
Ben
More information about the Help-octave
mailing list