File: operators_logicalops.html

package info (click to toggle)
freemat 4.2%2Bdfsg1-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 141,800 kB
  • ctags: 14,082
  • sloc: ansic: 126,788; cpp: 62,046; python: 2,080; perl: 1,255; sh: 1,146; yacc: 1,019; lex: 239; makefile: 100
file content (126 lines) | stat: -rw-r--r-- 6,243 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>FreeMat: LOGICALOPS Logical Array Operators</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">FreeMat
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.1 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('operators_logicalops.html','');});
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">LOGICALOPS Logical Array Operators </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Section: <a class="el" href="sec_operators.html">Mathematical Operators</a> </p>
<h1><a class="anchor" id="Usage"></a>
Usage</h1>
<p>There are three Boolean operators available in FreeMat. The syntax for their use is: </p>
<pre class="fragment">  y = ~x
  y = a &amp; b
  y = a | b
</pre><p> where <code>x</code>, <code>a</code> and <code>b</code> are <code>logical</code> arrays. The operators are </p>
<ul>
<li>
NOT (<code>~</code>) - output <code>y</code> is true if the corresponding element of <code>x</code> is false, and ouput <code>y</code> is false if the corresponding element of <code>x</code> is true.  </li>
<li>
OR (<code></code>|) - output <code>y</code> is true if corresponding element of <code>a</code> is true or if corresponding element of <code>b</code> is true (or if both are true).  </li>
<li>
AND (<code>&amp;</code>) - output <code>y</code> is true only if both the corresponding elements of <code>a</code> and <code>b</code> are both true.  </li>
</ul>
<p>The binary operators AND and OR can take scalar arguments as well as vector arguments, in which case, the scalar is operated on with each element of the vector. As of version 1.10, FreeMat supports <code>shortcut</code> evaluation. This means that if we have two expressions </p>
<pre class="fragment">  if (expr1 &amp; expr2)
</pre><p> then if <code>expr1</code> evaluates to <code>false</code>, then <code>expr2</code> is not evaluated at all. Similarly, for the expression </p>
<pre class="fragment">  if (expr1 | expr2)
</pre><p> then if <code>expr1</code> evaluates to <code>true</code>, then <code>expr2</code> is not evaluated at all. Shortcut evaluation is useful for doing a sequence of tests, each of which is not valid unless the prior test is successful. For example, </p>
<pre class="fragment">  if isa(p,'string') &amp; strcmp(p,'fro')
</pre><p> is not valid without shortcut evaluation (if <code>p</code> is an integer, for example, the first test returns false, and an attempt to evaluate the second expression would lead to an error). Note that shortcut evaluation only works with scalar expressions. </p>
<h1><a class="anchor" id="Examples"></a>
Examples</h1>
<p>Some simple examples of logical operators. Suppose we want to calculate the exclusive-or (XOR) of two vectors of logical variables. First, we create a pair of vectors to perform the XOR operation on:</p>
<pre class="fragment">--&gt; a = (randn(1,6)&gt;0)

a = 
 0 0 0 0 1 0 

--&gt; b = (randn(1,6)&gt;0)

b = 
 1 1 0 1 0 1 
</pre><p>Next, we can compute the OR of <code>a</code> and <code>b</code>:</p>
<pre class="fragment">--&gt; c = a | b

c = 
 1 1 0 1 1 1 
</pre><p>However, the XOR and OR operations differ on the fifth entry - the XOR would be false, since it is true if and only if exactly one of the two inputs is true. To isolate this case, we can AND the two vectors, to find exactly those entries that appear as true in both <code>a</code> and <code>b</code>:</p>
<pre class="fragment">--&gt; d = a &amp; b

d = 
 0 0 0 0 0 0 
</pre><p>At this point, we can modify the contents of <code>c</code> in two ways &ndash; the Boolean way is to AND <img class="formulaInl" alt="$\sim d$" src="form_121.png"/> with <code>c</code>, like so</p>
<pre class="fragment">--&gt; xor = c &amp; (~d)

xor = 
 1 1 0 1 1 1 
</pre><p>The other way to do this is simply force <code>c(d) = 0</code>, which uses the logical indexing mode of FreeMat (see the chapter on indexing for more details). This, however, will cause <code>c</code> to become an <code>int32</code> type, as opposed to a logical type.</p>
<pre class="fragment">--&gt; c(d) = 0

c = 
 1 1 0 1 1 1 
</pre> </div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="index.html">FreeMat Documentation</a></li><li class="navelem"><a class="el" href="sec_operators.html">Mathematical Operators</a></li>
    <li class="footer">Generated on Thu Jul 25 2013 17:17:45 for FreeMat by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.1.1 </li>
  </ul>
</div>
</body>
</html>