This fifth article of the mathematical journey through open source, introduces the minimal, octave can do for you.
You wanted a non-programmers way of doing mathematics and there you go – octave. Sounds like something to do with music, but in reality it is the name the octave author’s chemical engineering professor, who was well know for his ‘back of the envelope’ calculations.
All of bench calculator!!!
All the operations of bench calculator are just a subset of octave. So, no point going round the wheel again. Whatever operations can be done in bc – arithmetic, logical, relational, conditional – all can be done with equal ease in octave. As in bc, it can as well be used as a mathematical programming language. Ha! Then, why did we waste time on learning bc, we could have straight away come to octave. Yes! Yes! Except one thing – the precision-less-ness. We can’t get that in octave. If we need that, we would have to go back to bc. Okay! Fine. So, what with octave – we start with N-dimensions, what else. Hey don’t worry! In simple language, I mean vectors & matrices.
Getting Started
Command: Typing ‘octave‘ on the shell brings up the octave‘s interactive shell. Type ‘quit’ or Control-D to exit. The interactive shell starts with a welcome message. As in bc, we pass option -q for it to not show. Additionally, we’ll use the -f option for it to not pick any local start-up scripts (if any). So, for our examples, the command would look like ‘octave -qf‘ to start octave with an interactive shell.
Prompts & Results: Input prompt is typically denoted by ‘octave:X>‘, where X just a number showing the command count. Valid results are typically shown with ‘<variable> = ‘, or ‘ans = ‘ or ‘=> ‘, and then the command count incremented for the next input. Errors cause error messages to be printed and then octave brings back the input prompt without incrementing the command count. Putting a semicolon (;) at the end of an statement, suppresses it result (return value) to be displayed.
Comments could start with # or %. For block comments, #{ … }# or %{ … }% can be used.
Detailed topic help could be obtained using ‘help <topic>’ or complete documentation using ‘doc’ on the octave shell.
All in a go:
$ octave -qf
octave:1> # This is a comment
octave:1> pi # Built-in constant
ans = 3.1416
octave:2> e # Built-in constant again
ans = 2.7183
octave:3> i # Same as j – the imaginary number
ans = 0 + 1i
octave:4> x = 3^4 + 2*30;
octave:5> x
x = 141
octave:6> y
error: `y' undefined near line 6 column 1
octave:6> doc # Complete doc; Press 'q' to come back
octave:7> help plot # Help on plot
octave:8> A = [1 2 3; 4 5 6; 7 8 9] # 3x3 matrix
A =
1 2 3
4 5 6
7 8 9
octave:9> quit
Matrices with a Heart
Yes, we already saw a matrix in creation. It can also be created through multiple lines. Octave continues waiting for further input by prompting just ‘>’. Checkout below for creating the 3×3 magic square matrix in the same way, followed by various other interesting operations:
$ octave -qf
octave:1> M = [ # 3x3 magic square
> 8 1 6
> 3 5 7
> 4 9 2
> ]
M =
8 1 6
3 5 7
4 9 2
octave:2> B = rand(3, 4); # 3x4 matrix w/ randoms in [0 1]
octave:3> B
B =
0.068885 0.885998 0.542059 0.797678
0.652617 0.904360 0.036035 0.737404
0.043852 0.579838 0.709194 0.053118
octave:4> B' # Transpose of B
ans =
0.068885 0.652617 0.043852
0.885998 0.904360 0.579838
0.542059 0.036035 0.709194
0.797678 0.737404 0.053118
octave:5> A = inv(M) # Inverse of M
A =
0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778
octave:6> M * A # Should be identity, at least approx.
ans =
1.00000 0.00000 -0.00000
-0.00000 1.00000 0.00000
0.00000 0.00000 1.00000
octave:7> function rv = psine(x) # Our phase shifted sine
>
> rv = sin(x + pi / 6);
>
> endfunction
octave:8> x = linspace(0, 2*pi, 400); # 400 pts from 0 to 2*pi
octave:9> plot(x, psine(x)) # Our function's plot
octave:10> polar(x, 10 * (1 - sin(x)), 'm*') # bonus Heart
octave:11> quit
Figure 1 shows the plot window which pops up by the command # 9 – plot.
Figure 2 is the bonus magenta heart of stars (*) from polar coordinates draw command # 10 – polar.
What next?
With ready-to-go level of introduction to octave, we are all set to explore it the fun way. What fun? Next one left to your imagination. And as we move on, we would take up one or more fun challenge(s), and try to see, how we solve it using octave.
Pingback: Getting Recursive with Bench Calculator | Playing with Systems
Pingback: The Imaginary Music of Octave – Part II | Playing with Systems