Editing Using Octave
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
First, follow | First, follow the [https://www.gnu.org/software/octave/doc/interpreter/Installation.html installation guide] | ||
to install GNU Octave on your system. Then, launch the interactive prompt by | |||
typing <code>octave</code> in a terminal or by clicking the icon in the programs menu. | |||
For further guidance, see the manual page on | |||
[https://www.gnu.org/software/octave/doc/interpreter/Running-Octave.html Running Octave]. | |||
Then, | |||
= Variable Assignment = | = Variable Assignment = | ||
Line 29: | Line 27: | ||
<syntaxhighlight lang="octave">t = 99 + 1 # prints 't = 100'</syntaxhighlight> | <syntaxhighlight lang="octave">t = 99 + 1 # prints 't = 100'</syntaxhighlight> | ||
<syntaxhighlight | <syntaxhighlight>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 | <syntaxhighlight> 100</syntaxhighlight> | ||
= Elementary math = | = Elementary math = | ||
Line 39: | Line 37: | ||
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; | |||
y = sin(x)</pre><pre class="oct-code-output">y = 0.70711 | |||
< | </pre> | ||
y = sin (x)</ | |||
< | |||
Line 53: | Line 48: | ||
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 = | |||
< | |||
< | |||
8 6 4 | 8 6 4 | ||
</ | </pre><pre class="oct-code">columnVec = [8; 6; 4]</pre><pre class="oct-code-output">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 = | ||
< | |||
< | |||
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 = | ||
< | |||
< | |||
2 3 | 2 3 | ||
</ | </pre><pre class="oct-code">length(rowVec)</pre><pre class="oct-code-output">ans = 3 | ||
</pre> | |||
< | |||
< | |||
Line 86: | Line 68: | ||
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 = | |||
< | |||
< | |||
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 | ||
</pre><pre class="oct-code">columnVec<span class="string">'</span></pre><pre class="oct-code-output">ans = | |||
8 6 4 | |||
</pre> | |||
= Accessing Elements = | = Accessing Elements = | ||
Line 107: | Line 83: | ||
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 | |||
</pre> | |||
< | |||
< | |||
= Control flow | = Control flow wih 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); | |||
<span class="keyword">for</span> i = 1:2:100 <span class="comment"># iterate from 1 to 100 with step size 2</span> | |||
< | |||
for i = 1:2:100 # iterate from 1 to 100 with step size 2 | |||
x(i) = i^2; | x(i) = i^2; | ||
endfor | <span class="keyword">endfor</span> | ||
y = zeros (50,1); | y = zeros (50,1); | ||
k = 1; | k = 1; | ||
step = 2; | step = 2; | ||
while (k <= 100) | <span class="keyword">while</span> (k <= (100-step)) | ||
y( | y(i) = k^2; | ||
k = k + step; | k = k + step; | ||
endwhile</ | <span class="keyword">endwhile</span></pre><pre class="oct-code-output"></pre> | ||
= Vectorization = | = Vectorization = | ||
Line 138: | Line 112: | ||
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 ( | by default (<a href="https://www.gnu.org/software/octave/doc/interpreter/XREFsin.html">sin</a>, <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> | |||
x = i.^2; <span class="comment"># each element is squared</span> | |||
< | y = x + 9; <span class="comment"># add 9 to each element</span> | ||
x = i.^2; # each element is squared | z = y./i; <span class="comment"># divide each element in y by the corresponding value in i</span> | ||
y = x + 9; # add 9 to each element | w = sin (i / 10); <span class="comment"># take the sine of each element divided by 10</span> | ||
z = y./i; # divide each element in y by the corresponding value in i | </pre><pre class="oct-code-output"></pre> | ||
w = sin (i / 10); # take the sine of each element divided by 10 | |||
</ | |||
Line 152: | Line 124: | ||
= Plotting = | = Plotting = | ||
The function | The function <a href="https://www.gnu.org/software/octave/doc/interpreter/XREFplot.html">plot</a> 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); | |||
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"> | |||
= 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 | C-style formatting with <a href="https://www.gnu.org/software/octave/doc/interpreter/XREFsprintf.html">sprintf</a> or | ||
<a href="https://www.gnu.org/software/octave/doc/interpreter/XREFfprintf.html">fprintf</a>. 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>; | |||
secondString = <span class="string">"!"</span>; | |||
< | [firstString, secondString] <span class="comment"># concatenate both strings</span> | ||
secondString = "!"; | </pre><pre class="oct-code-output">ans = hello world! | ||
[firstString, secondString] # concatenate both strings | </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 | ||
</ | </pre> | ||
< | |||
< | |||
< | |||
Line 184: | Line 150: | ||
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 | ||
<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> | ||
# 'Fizz' if divisible by 3, | <span class="comment"># 'Buzz' if divisible by 5,</span> | ||
# 'Buzz' if divisible by 5, | <span class="comment"># 'FizzBuzz' if divisible by 3 and 5</span> | ||
# 'FizzBuzz' if divisible by 3 and 5 | <span class="keyword">for</span> i = 1:1:20 | ||
for i = 1:1:20 | outputString = <span class="string">""</span>; | ||
outputString = ""; | <span class="keyword">if</span> (rem (i, 3) == 0) <span class="comment"># rem is the remainder function</span> | ||
if (rem (i, 3) == 0) # rem is the remainder function | outputString = [outputString, <span class="string">"Fizz"</span>]; | ||
outputString = [outputString, "Fizz"]; | <span class="keyword">endif</span> | ||
endif | <span class="keyword">if</span> (rem (i, 5) == 0) | ||
if (rem (i, 5) == 0) | outputString = [outputString, <span class="string">"Buzz"</span>]; | ||
outputString = [outputString, "Buzz"]; | <span class="keyword">elseif</span> (rem(i,7) == 0) | ||
elseif (rem(i,7) == 0) | outputString = <span class="string">"Foo"</span>; | ||
outputString = "Foo"; | <span class="keyword">else</span> | ||
else | |||
outputString = outputString; | outputString = outputString; | ||
endif | <span class="keyword">endif</span> | ||
fprintf("i=%g: %s \n", i, outputString); | fprintf(<span class="string">"i=%g: %s \n"</span>, i, outputString); | ||
endfor</ | <span class="keyword">endfor</span></pre><pre class="oct-code-output">i=1: | ||
< | |||
i=2: | i=2: | ||
i=3: Fizz | i=3: Fizz | ||
Line 225: | Line 188: | ||
i=19: | i=19: | ||
i=20: Buzz | i=20: Buzz | ||
</ | </pre> | ||
Line 231: | Line 194: | ||
= Getting Help = | = Getting Help = | ||
The | 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 | ||
Octave prompt to print documentation for any function. | Octave prompt to print documentation for any function.</p><pre class="pre-code">help plot | ||
doc plot</pre> | |||
< | |||
doc plot</ | |||
= Octave packages = | = Octave forge 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 | |||
the functionality of Octave’s core library. (Matlab users: | the functionality of Octave’s core library. (Matlab users: Forge packages | ||
act similarly to Matlab’s toolboxes.) The | act similarly to Matlab’s toolboxes.) The <a href="https://www.gnu.org/software/octave/doc/interpreter/XREFpkg.html">pkg</a> 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 | ||
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> | ||
pkg load image # load new functions into workspace | </pre><p><a href="https://www.gnu.org/software/octave/doc/interpreter/Packages.html">Read more about packages</a>.</p> | ||
</ | |||
[[Category:Tutorials]] | [[Category:Tutorials]] |