Using Octave: Difference between revisions

Jump to navigation Jump to search
187 bytes removed ,  13 January 2023
Updated the package section to use Octave Packages instead of Forge (as forge is being deprecated
(→‎Command evaluation: wiki markup)
(Updated the package section to use Octave Packages instead of Forge (as forge is being deprecated)
 
(10 intermediate revisions by 3 users not shown)
Line 1: Line 1:
First, follow the [https://www.gnu.org/software/octave/doc/interpreter/Installation.html installation guide]
First, follow the installation instructions for:
to install GNU Octave on your system. Then, launch the interactive prompt by
* [[Octave for macOS|macOS]]
typing <code>octave</code> in a terminal or by clicking the icon in the programs menu.
* [[Octave for GNU/Linux|GNU/Linux]] and [[Octave for other Unix systems|other Unix systems]]
For further guidance, see the manual page on
* [[Octave_for_Microsoft_Windows|Microsoft Windows]]
[https://www.gnu.org/software/octave/doc/interpreter/Running-Octave.html Running Octave].
or consult the [https://www.gnu.org/software/octave/doc/interpreter/Installation.html GNU Octave manual] to install GNU Octave on your system.
 
Then, start the GNU Octave by clicking the icon in the programs menu or launch the interactive prompt by typing <code>octave</code> in a terminal.
See the manual page on [https://www.gnu.org/software/octave/doc/interpreter/Running-Octave.html running Octave].


[[File:GNU Octave screenshot.png|thumb|center|500px|The GNU Octave graphical user interface (GUI).]]


= Variable Assignment =
= Variable Assignment =
Line 27: Line 29:


<syntaxhighlight lang="octave">t = 99 + 1  # prints 't = 100'</syntaxhighlight>
<syntaxhighlight lang="octave">t = 99 + 1  # prints 't = 100'</syntaxhighlight>
<syntaxhighlight>t =  100</syntaxhighlight>
<syntaxhighlight lang="text">t =  100</syntaxhighlight>


<syntaxhighlight lang="octave">t = 99 + 1; # nothing is printed
<syntaxhighlight lang="octave">t = 99 + 1; # nothing is printed
disp(t);</syntaxhighlight>
disp(t);</syntaxhighlight>
<syntaxhighlight> 100</syntaxhighlight>
<syntaxhighlight lang="text"> 100</syntaxhighlight>


= Elementary math =
= Elementary math =
Line 37: Line 39:
Many mathematical operators are available in addition to the standard
Many mathematical operators are available in addition to the standard
arithmetic.  Operations are floating-point.  Read more
arithmetic.  Operations are floating-point.  Read more
<a href="https://www.gnu.org/software/octave/doc/interpreter/Arithmetic.html">about elementary math</a>.</p><pre class="oct-code">x = 3/4*pi;
[https://www.gnu.org/software/octave/doc/interpreter/Arithmetic.html about elementary math].
y = sin(x)</pre><pre class="oct-code-output">y =  0.70711
 
</pre>
<syntaxhighlight lang="octave">x = 3/4 * pi;
y = sin (x)</syntaxhighlight>
<syntaxhighlight lang="text">y =  0.70711</syntaxhighlight>
 




Line 48: Line 53:
to as vectors.  Use a space or a comma <code>,</code> to separate elements in a row and
to as vectors.  Use a space or a comma <code>,</code> to separate elements in a row and
semicolon <code>;</code> to start a new row.  Read more
semicolon <code>;</code> to start a new row.  Read more
<a href="https://www.gnu.org/software/octave/doc/interpreter/Linear-Algebra.html">about matrices</a>.</p><pre class="oct-code">rowVec = [8 6 4]</pre><pre class="oct-code-output">rowVec =
[https://www.gnu.org/software/octave/doc/interpreter/Linear-Algebra.html about matrices].
<syntaxhighlight lang="octave">rowVec = [8 6 4]</syntaxhighlight>
<syntaxhighlight lang="text">rowVec =
   8  6  4
   8  6  4
</pre><pre class="oct-code">columnVec = [8; 6; 4]</pre><pre class="oct-code-output">columnVec =
</syntaxhighlight>
 
<syntaxhighlight lang="octave">columnVec = [8; 6; 4]</syntaxhighlight>
<syntaxhighlight lang="text">columnVec =
   8
   8
   6
   6
   4
   4
</pre><pre class="oct-code">mat = [8 6 4; 2 0 -2]</pre><pre class="oct-code-output">mat =
</syntaxhighlight>
 
<syntaxhighlight lang="octave">mat = [8 6 4; 2 0 -2]</syntaxhighlight>
<syntaxhighlight lang="text">mat =
   8  6  4
   8  6  4
   2  0  -2
   2  0  -2
</pre><pre class="oct-code">size(mat)</pre><pre class="oct-code-output">ans =
</syntaxhighlight>
 
<syntaxhighlight lang="octave">size(mat)</syntaxhighlight>
<syntaxhighlight lang="text">ans =
   2  3
   2  3
</pre><pre class="oct-code">length(rowVec)</pre><pre class="oct-code-output">ans =  3
</syntaxhighlight>
</pre>
 
<syntaxhighlight lang="octave">length(rowVec)</syntaxhighlight>
<syntaxhighlight lang="text">ans =  3</syntaxhighlight>




Line 68: Line 86:
Many common linear algebra operations are simple to program using Octave’s
Many common linear algebra operations are simple to program using Octave’s
matrix syntax.  Read more
matrix syntax.  Read more
<a href="https://www.gnu.org/software/octave/doc/interpreter/Linear-Algebra.html">about linear algebra</a>.</p><pre class="oct-code">columnVec * rowVec</pre><pre class="oct-code-output">ans =
[https://www.gnu.org/software/octave/doc/interpreter/Linear-Algebra.html about linear algebra].
 
<syntaxhighlight lang="octave">columnVec * rowVec</syntaxhighlight>
<syntaxhighlight lang="text">ans =
   64  48  32
   64  48  32
   48  36  24
   48  36  24
   32  24  16
   32  24  16
</pre><pre class="oct-code">rowVec * columnVec</pre><pre class="oct-code-output">ans =  116
</syntaxhighlight>
</pre><pre class="oct-code">columnVec<span class="string">'</span></pre><pre class="oct-code-output">ans =
  8  6  4
</pre>


<syntaxhighlight lang="octave">rowVec * columnVec</syntaxhighlight>
<syntaxhighlight lang="text">ans =  116</syntaxhighlight>


<syntaxhighlight lang="octave">columnVec'</syntaxhighlight>
<syntaxhighlight lang="text">ans =
  8  6  4
</syntaxhighlight>


= Accessing Elements =
= Accessing Elements =
Line 83: Line 107:
Octave is 1-indexed.  Matrix elements are accessed as
Octave is 1-indexed.  Matrix elements are accessed as
<code>matrix(rowNum, columnNum)</code>.  Read more
<code>matrix(rowNum, columnNum)</code>.  Read more
<a href="https://www.gnu.org/software/octave/doc/interpreter/Index-Expressions.html">about accessing elements</a>.</p><pre class="oct-code">mat(2,3)</pre><pre class="oct-code-output">ans = -2
[https://www.gnu.org/software/octave/doc/interpreter/Index-Expressions.html about accessing elements].
</pre>
 
<syntaxhighlight lang="octave">mat(2,3)</syntaxhighlight>
<syntaxhighlight lang="text">ans = -2</syntaxhighlight>






= Control flow wih loops =
= Control flow with loops =


Octave supports <code>for</code> and <code>while</code> loops, as well as other control flow
Octave supports <code>for</code> and <code>while</code> loops, as well as other control flow
structures.  Read more
structures.  Read more
<a href="https://www.gnu.org/software/octave/doc/interpreter/Statements.html">about control flow</a>.</p><pre class="oct-code">x = zeros (50,1);
[https://www.gnu.org/software/octave/doc/interpreter/Statements.html about control flow].
<span class="keyword">for</span> i = 1:2:100 <span class="comment"># iterate from 1 to 100 with step size 2</span>
 
<syntaxhighlight lang="octave">x = zeros (50,1);
for i = 1:2:100 # iterate from 1 to 100 with step size 2
   x(i) = i^2;
   x(i) = i^2;
<span class="keyword">endfor</span>
endfor


y = zeros (50,1);
y = zeros (50,1);
k = 1;
k = 1;
step = 2;
step = 2;
<span class="keyword">while</span> (k <= (100-step))
while (k <= 100)
   y(i) = k^2;
   y(k) = k^2;
   k = k + step;
   k = k + step;
<span class="keyword">endwhile</span></pre><pre class="oct-code-output"></pre>
endwhile</syntaxhighlight>
 
 


= Vectorization =
= Vectorization =
Line 112: Line 138:
operators <code>*</code>, <code>/</code>, and <code>^</code> all support element-wise operations writing
operators <code>*</code>, <code>/</code>, and <code>^</code> all support element-wise operations writing
a dot <code>.</code> before the operators.  Many other functions operate element-wise
a dot <code>.</code> before the operators.  Many other functions operate element-wise
by default (<a href="https://www.gnu.org/software/octave/doc/interpreter/XREFsin.html">sin</a>, <code>+</code>, <code>-</code>, etc.).  Read more
by default ([https://www.gnu.org/software/octave/doc/interpreter/XREFsin.html sin], <code>+</code>, <code>-</code>, etc.).  Read more
<a href="https://www.gnu.org/software/octave/doc/interpreter/Vectorization-and-Faster-Code-Execution.html">about vectorization</a>.</p><pre class="oct-code">i = 1:2:100;      <span class="comment"># create an array with 50-elements</span>
[https://www.gnu.org/software/octave/doc/interpreter/Vectorization-and-Faster-Code-Execution.html about vectorization].
x = i.^2;        <span class="comment"># each element is squared</span>
 
y = x + 9;        <span class="comment"># add 9 to each element</span>
<syntaxhighlight lang="octave">i = 1:2:100;      # create an array with 50-elements
z = y./i;        <span class="comment"># divide each element in y by the corresponding value in i</span>
x = i.^2;        # each element is squared
w = sin (i / 10); <span class="comment"># take the sine of each element divided by 10</span>
y = x + 9;        # add 9 to each element
</pre><pre class="oct-code-output"></pre>
z = y./i;        # divide each element in y by the corresponding value in i
w = sin (i / 10); # take the sine of each element divided by 10
</syntaxhighlight>




Line 124: Line 152:
= Plotting =
= Plotting =


The function <a href="https://www.gnu.org/software/octave/doc/interpreter/XREFplot.html">plot</a> can be called with vector arguments to
The function [https://www.gnu.org/software/octave/doc/interpreter/XREFplot.html plot] can be called with vector arguments to
create 2D line and scatter plots.  Read more
create 2D line and scatter plots.  Read more
<a href="https://www.gnu.org/software/octave/doc/interpreter/Two_002dDimensional-Plots.html">about plotting</a>.</p><pre class="oct-code">plot (i/10, w);
[https://www.gnu.org/software/octave/doc/interpreter/Two_002dDimensional-Plots.html about plotting].
title (<span class="string">'w = sin(i/10)'</span>);
xlabel (<span class="string">'i ÷ 10'</span>);
ylabel (<span class="string">'w'</span>);</pre><pre class="oct-code-output"></pre><img src="octave_basics-1.png" alt="octave_basics-1.png">


<syntaxhighlight lang="octave">plot (i / 10, w);
title ('w = sin (i / 10)');
xlabel ('i / 10');
ylabel ('w');</syntaxhighlight>


[[File:Using octave-1.png|thumb|center]]


= Strings =
= Strings =


Strings are simply arrays of characters.  Strings can be composed using
Strings are simply arrays of characters.  Strings can be composed using
C-style formatting with <a href="https://www.gnu.org/software/octave/doc/interpreter/XREFsprintf.html">sprintf</a> or
C-style formatting with [https://www.gnu.org/software/octave/doc/interpreter/XREFsprintf.html sprintf] or
<a href="https://www.gnu.org/software/octave/doc/interpreter/XREFfprintf.html">fprintf</a>.  Read more
[https://www.gnu.org/software/octave/doc/interpreter/XREFfprintf.html fprintf].  Read more
<a href="https://www.gnu.org/software/octave/doc/interpreter/Strings.html">about strings</a>.</p><pre class="oct-code">firstString = <span class="string">"hello world"</span>;
[https://www.gnu.org/software/octave/doc/interpreter/Strings.html about strings].
secondString = <span class="string">"!"</span>;
 
[firstString, secondString] <span class="comment"># concatenate both strings</span>
<syntaxhighlight lang="octave">firstString = "hello world";
</pre><pre class="oct-code-output">ans = hello world!
secondString = "!";
</pre><pre class="oct-code">fprintf (<span class="string">"%s %.10f \n"</span>, <span class="string">"The number is:"</span>, 10)</pre><pre class="oct-code-output">The number is: 10.0000000000  
[firstString, secondString] # concatenate both strings
</pre>
</syntaxhighlight>
<syntaxhighlight lang="text">ans = hello world!</syntaxhighlight>
 
<syntaxhighlight lang="octave">fprintf ("%s %.10f \n", "The number is:", 10)</syntaxhighlight>
<syntaxhighlight lang="text">The number is: 10.0000000000</syntaxhighlight>




Line 150: Line 184:


Conditional statements can be used to create branching logic in your code.
Conditional statements can be used to create branching logic in your code.
Read more
Read more [https://www.gnu.org/software/octave/doc/interpreter/The-if-Statement.html in the manual].
<a href="https://www.gnu.org/software/octave/doc/interpreter/The-if-Statement.html">in the manual</a>.</p><pre class="oct-code"><span class="comment"># Print 'Foo'      if divisible by 7,</span>
 
<span class="comment">#      'Fizz'    if divisible by 3,</span>
<syntaxhighlight lang="octave"># Print 'Foo'      if divisible by 7,
<span class="comment">#      'Buzz'    if divisible by 5,</span>
#      'Fizz'    if divisible by 3,
<span class="comment">#      'FizzBuzz' if divisible by 3 and 5</span>
#      'Buzz'    if divisible by 5,
<span class="keyword">for</span> i = 1:1:20
#      'FizzBuzz' if divisible by 3 and 5
   outputString = <span class="string">""</span>;
for i = 1:1:20
   <span class="keyword">if</span> (rem (i, 3) == 0)  <span class="comment"># rem is the remainder function</span>
   outputString = "";
     outputString = [outputString, <span class="string">"Fizz"</span>];
   if (rem (i, 3) == 0)  # rem is the remainder function
   <span class="keyword">endif</span>
     outputString = [outputString, "Fizz"];
   <span class="keyword">if</span> (rem (i, 5) == 0)
   endif
     outputString = [outputString, <span class="string">"Buzz"</span>];
   if (rem (i, 5) == 0)
   <span class="keyword">elseif</span> (rem(i,7) == 0)
     outputString = [outputString, "Buzz"];
     outputString = <span class="string">"Foo"</span>;
   elseif (rem(i,7) == 0)
   <span class="keyword">else</span>
     outputString = "Foo";
   else
     outputString = outputString;
     outputString = outputString;
   <span class="keyword">endif</span>
   endif
   fprintf(<span class="string">"i=%g: %s \n"</span>, i, outputString);
   fprintf("i=%g: %s \n", i, outputString);
<span class="keyword">endfor</span></pre><pre class="oct-code-output">i=1:   
endfor</syntaxhighlight>
 
<syntaxhighlight lang="text">i=1:   
i=2:   
i=2:   
i=3: Fizz  
i=3: Fizz  
Line 188: Line 225:
i=19:   
i=19:   
i=20: Buzz  
i=20: Buzz  
</pre>
</syntaxhighlight>




Line 194: Line 231:
= Getting Help =
= Getting Help =


The <a href="https://www.gnu.org/software/octave/doc/interpreter/XREFhelp.html">help</a> and <a href="https://www.gnu.org/software/octave/doc/interpreter/XREFdoc.html">doc</a> commands can be invoked at the
The [https://www.gnu.org/software/octave/doc/interpreter/XREFhelp.html help] and [https://www.gnu.org/software/octave/doc/interpreter/XREFdoc.html doc] commands can be invoked at the
Octave prompt to print documentation for any function.</p><pre class="pre-code">help plot
Octave prompt to print documentation for any function.
doc plot</pre>
 
<syntaxhighlight lang="octave">help plot
doc plot</syntaxhighlight>






= Octave forge packages =
= Octave packages =


Community-developed packages can be added from the
Community-developed packages can be added from the
<a href="http://octave.sourceforge.net/index.html">Octave Forge</a> website to extend
[https://gnu-octave.github.io/packages/ Octave Packages] website to extend
the functionality of Octave’s core library.  (Matlab users: Forge packages
the functionality of Octave’s core library.  (Matlab users: Packages
act similarly to Matlab’s toolboxes.)  The <a href="https://www.gnu.org/software/octave/doc/interpreter/XREFpkg.html">pkg</a> command is used
act similarly to Matlab’s toolboxes.)  The [https://www.gnu.org/software/octave/doc/interpreter/XREFpkg.html pkg] command is used
to manage these packages.  For example, to use the image processing library
to manage these packages.  For example, to use the image processing library visit its [https://gnu-octave.github.io/packages/image/ page on Octave Packages,] copy the install command and run it in octave
from the Forge, use:</p><pre class="pre-code">pkg install -forge image <span class="comment"># install package</span>
 
pkg load image          <span class="comment"># load new functions into workspace</span>
<syntaxhighlight lang="octave">pkg install "https://downloads.sourceforge.net/project/octave/Octave%20Forge%20Packages/Individual%20Package%20Releases/image-2.14.0.tar.gz" # install package
</pre><p><a href="https://www.gnu.org/software/octave/doc/interpreter/Packages.html">Read more about packages</a>.</p>
pkg load image          # load new functions into workspace
</syntaxhighlight>
 
[https://www.gnu.org/software/octave/doc/interpreter/Packages.html Read more about packages].
 
= Octave User Codes =
 
There are also User Codes available for GNU Octave which are not part of the core program or any of the packages.
 
[[:Category:User Codes|See Category User Codes]].


[[Category:Tutorials]]
[[Category:Tutorials]]
Anonymous user

Navigation menu