INTRODUCTION

This tutorial will explain the use of relational and logical operators in GAUSS.

 

MATRIX RELATIONAL OPERATORS

  • Return a scalar 1 if the statement is true for every element in the matrix, otherwise a 0.

SCALAR EQUALITY

a = 0.7;

// Set 'c1' equal to 1 if
 // 'a' is greater than 0.5
 c1 = a > 0.5;

// Set 'c2' equal to 1 if
 // 'a' is less than 0.5
 c2 = a < 0.5;

 

will assign

c1 = 1
c2 = 0

 

MATRIX INEQUALITY

In our first example, the variable a had only one element. Let’s look at a matrix example.

 // Create a 2x3 matrix
 a = { 0.1 0.5 0.4,
 0.5 0.3 0.7 };

// Assign 'c1' to equal 1 if EVERY
 // element of 'a' is > 0.4;
 c1 = a > 0.4;

// Assign 'c2' to equal 1 if EVERY
 // element of 'a' is < 0.8;
 c2 = a < 0.8;

 

will assign

c1 = 0
c2 = 1

 

This time, c1 will be set equal to 0, because several of the elements of a are less than 0.4.

 

Whereas c2 will be set equal to 1, because every element of a is less than 0.8.

 

MATRIX EQUALITY

 // Create a 2x3 matrix
 a = { 0.1 0.5 0.4,
 0.5 0.3 0.7 };

// Assign 'c1' to equal 1 if EVERY
 // element of 'a' is equal 0.4;
 c1 = a == 0.4;

// Assign 'c2' to equal 1 if EVERY
 // element of 'a' does NOT equal 0.4
 c2 = a != 0.4;

// Assign 'c3' to equal 1 if EVERY
 // element of 'a' does NOT equal 0.8
 c3 = a != 0.8;

 

After the code above:

c1 = 0
c2 = 0
c3 = 1

 

ELEMENT-BY-ELEMENT RELATIONAL OPERATORS

  • Return a matrix or vector of 1’s and 0’s with a 1 at the location of the elements for which the operator returns true and a 0 for the other elements.

 

MATRIX ELEMENT‐BY‐ELEMENT INEQUALITY

The scalar case is the same as for the matrix operators, so we will start with a matrix example.

 // Create a 2x3 matrix
 a = { 0.1 0.5 0.4,
 0.5 0.3 0.7 };

// Return a 2x3 matrix of 1's
 // and 0's indicating whether the
 // corresponding element of 'a'
 // is > 0.4
 c1 = a .> 0.4;

// Return a 2x3 matrix of 1's
 // and 0's indicating whether the
 // corresponding element of 'a'
 // is ≤ 0.5
 c2 = a .<= 0.5;

 

After the above code

c1 = 0 1 0
     1 0 1
c2 = 1 1 1
     1 1 0

 

ExE CONFORMABILITY

The ExE conformability of the GAUSS relational operators makes it simple make comparisons along rows or columns.

 

COLUMN INEQUALITY

 // Create a 4x2 matrix
 a = { 125 23,
 150 31,
 105 19,
 150 33 };

// Create a 1x2 row vector
 b = { 120 25 };

// Check which elements in the first column of 'a'
 // are greater than the first element of 'b',
 // and which elements of the second column of 'a'
 // are greater than the second element of 'b'
 c = a .> b;

 

The above code will assign:

c = 1 0
    1 1
    0 0
    1 1

 

ROW INEQUALITY

  // Create a 4x2 matrix
 a = { 25 23,
 50 31,
 5 19,
 41 33 };

// Create a 4x1 column vector
 b = { 23,
 31,
 10,
 50 };

// Check which elements in the rows of 'a'
 // are less than or equal to the elements of the
 // corresponding row of 'b'
 c = a .<= b;

 

The above code will assign:

c = 0 1
    0 1
    1 0
    1 1

 

SCALAR LOGICAL OPERATORS

 

SCALAR ‘AND’

 a = 1;
 b = 9;
 x = 0;

// Are both 'a' and 'b' non-zero?
 c1 = a and b;

// Are both 'x' and 'a' non-zero?
 c2 = x and a;

// Are both 'b' and 0 non-zero?
 c3 = b and 0;

 

will assign

c1 = 1
c2 = 0
c3 = 0

 

SCALAR ‘OR’

 a = 1;
 b = 9;
 x = 0;

// Is either 'a' or 'b', or both, non-zero?
 c1 = a or b;

// Is either 'x' or 'a', or both, non-zero?
 c2 = x or a;

 

© 2024 Aptech Systems, Inc. All rights reserved.

 

  // Is either 'x' or 0, or both, non-zero?
 c3 = x or 0;

 

will assign

c1 = 1
c2 = 1
c3 = 0

 

SCALAR ‘NOT’

 a = 1;
 b = 9;
 x = 0;

// Is 'a' zero?
 c1 = not a;

// Is 'x' zero?
 c2 = not x;

// Does the expression (a and b) return zero?
 c3 = not (a and b);

 

will assign

c1 = 0
c2 = 1
c3 = 0 

 

ELEMENT-BY-ELEMENT RELATIONAL OPERATORS

 

ELEMENT-BY-ELEMENT ‘.AND’

Matrix and scalar case.

 a = { 1 2,
 3 0 };
 b = 9;
 x = 0;

// Are both 'a' and 'b' non-zero?
 c1 = a .and b;

// Are both 'a' and 'x' non-zero?
 c2 = a .and x;

 

will assign

c1 = 1 1
     1 0
c2 = 0 0
     0 0

 

Matrix and matrix case.

 a = { 1 2,
 3 0 };
 b = { 9 0,
 1 1 };

// Are both 'a' and 'b' non-zero?
 c1 = a .and b;

 

will assign

c1 = 1 0
     1 0

 

Matrix and row vector case.

 // 2x3 matrix
 a = { 1 0 8,
 0 3 1 };

// 1x3 row vector
 b = { 9 0 1 };

// Are the corresponding elements of 'a' and 'b' non-zero?
 c1 = a .and b;

 

will assign

c1 = 1 0 1
     0 0 1

 

Matrix and column vector case.

 // 3x3 matrix
 a = { 1 0 8,
 0 3 1,
 1 1 0 };

// 3x1 column vector
 b = { 2,
 1,
 0 };

// Are the corresponding elements of 'a' and 'b' non-zero?
 c1 = a .and b;

 

will assign

c1 = 1 0 1
     0 1 1
     0 0 0

 

ELEMENT-BY-ELEMENT ‘.OR’

Matrix and scalar case.

 a = { 1 2,
 3 0 };
 b = 9;
 x = 0;

// Are the elements of either 'a' or 'b', or both, non-zero?
 c1 = a .or b;

// Are the elements of either 'a' or 'x', or both, non-zero?
 c2 = a .or x;

 

will assign

c1 = 1 1
     1 1
c2 = 1 1
     1 0

 

Matrix and matrix case.

 a = { 1 2,
 3 0 };
 b = { 9 0,
 1 1 };

// Are the elements of either 'a' or 'b', or both, non-zero?
 c1 = a .or b;

 

will assign

c1 = 1 1
     1 1

 

Matrix and row vector case.

// 2x3 matrix
 a = { 1 0 8,
 0 3 1 };

// 1x3 row vector
 b = { 9 0 1 };

// Are the corresponding elements of either
 // 'a' or 'b', or both, non-zero?
 c1 = a .or b;

 

will assign

c1 = 1 0 1
     1 1 1

 

Matrix and column vector case.

// 3x3 matrix
 a = { 1 0 8,
 0 3 1,
 1 1 0 };

// 3x1 column vector
 b = { 2,
 1,
 0 };

// Are the corresponding elements of either
 // 'a' or 'b', or both, non-zero?
 c1 = a .or b;

 

will assign

c1 = 1 1 1
     1 1 1
     1 1 0

 

ELEMENT-BY-ELEMENT ‘.NOT’

 a = { 4 6,
 1 0,
 8 2 };

// Are the elements of 'a' zero?
 c1 = .not a;

 

will assign

c1 = 0 0
     0 1
     0 0