Tuesday, October 9, 2007

Basic Matrix, collected

17.1 Basic Matrix Functions, from GNU Octave Manual by John W. Eaton


Octave Examples for Solving Linear Algebra Equations, from Hanson's website.

Note: very useful for the Intro to Numerical Analysis course.


Bad Octave/Matlab 1-norm! The 1-norm is not the regular one!

Monday, October 8, 2007

Basic Plotting

Plotting set of points (vector)

angles = [o:pi/3:2*pi]
y = sin(angles)
plot(angles, y)


Plot smoother curves (vector)


angles = linspace(0, 2*pi, 100) % 100 points equally spaced btw 0 and 2pi
y = sin(angles)
plot(angles, y)

Basic options
'.' = Set dots plot style
'@' = Set points plot style
'-@' = Set linespoints plot style
'^' = Set impulses plot style
'L' = Set steps plot style
'N' = Interpreted as the plot color if N is an integer in the range 1 to 6
'NM' = if N an integer in the range 1 to 6 -> color
if M an integer in the range 1 to 6 -> point style
This is only valid in combination with the '@' or '-@' specifier
'C' = plot color
'";title;"' = here '"title"' is the label for the key

1 = red / *
2 = greed / +
3 = blue / o
4 = magenta / x
5 = cyan / house
6 = brown / there exists

Example:

plot(x, y, "@12", x, y2, x, y3, "4", x, y4, "+"), This command plot
'y' with color 1 (red) and points of type 2 (+),
'y2' with lines
'y3' with lines of color 4 (magenta)
'y4' with points displayed as '+'

plot(b, '*'), plot the data in the var. b w. points displayed as '*'.

t = 0:0.1:6.3;
plot(t, cos(t), "-;cos(t);", t, sin(t), "+3; sin(t);")



Title and Labels

title('Graph of y = sin(x)')
xlabel('Angle')
ylabel('Value')


Colors and Styles
for symbols and lines in the plot command (see help plot)
(M = only available in Matlab)

w = white
m = magneta
c = cyan
r = red
g = green
b = blue
y = yellow
k = black

. = point
o = circle
x = x-mark
+ = plus
* = star
s = square (M)
d = diamond (M)
v = triangle (down) (M)
^ = triangle (up) (M)
< = triangle (left) (M)
> = triangle (right) (M)
p = pentagram (M)
h = hexagram (M)

- = solid
: = dotted (M)
-. = dashdot (M)
-- = dashed (M)


Extra

grid on % turn on grid
grid off
hold on % keep current plot to add more
hold off
figure (N) % plot graph in window N. If no number is specified, the next number is called. If command not called, graph will be plotted in exactly the same window.

More info:
1) plot is the user-defined function from the file /usr/share/octave/2.9.9/m/plot/plot.m
2) Additional help for built-in functions and operators is
available in the on-line version of the manual. Use the command
`doc ' to search the manual index.
3) See also: semilogx, semilogy, loglog, polar, mesh, contour,
__pltopt__ bar, stairs, errorbar, replot, xlabel, ylabel, title,
print.

Sunday, October 7, 2007

Basic Functions

cos : cosin of an angle (in radians)
sin : sin of an angle (in radians)
tan : tan of an angle (in radians)
exp : exponential function
log : natural logarithm
log10 : logarithm to base 10
sinh : hyperbolic sine
cosh : hyperbolic cosine
tanh : hyperbolic tanh
acos : inverse cosine
asin : inverse sine
atan : inverse tan
atan2 : two-argument form of inverse tan
atanh : inverse tanh

abs
sign
round
: round to the nearest integer
floor : round down (towards minus infinity)
ceil : round up (towards plus infnity)
fix : round towards zero
rem : remainder after integer division

Function Programming

BASIC

1. Function is defined in a text file, just like a script, exept that the first line has the following form:

function [output1, output2, ... ] = name ( input1, input2, ... )

2. Each function is stored in a different M-file, which MUST HAVE THE SAME NAME AS THE FUNCTION.
i.e., a function called sind() must be defined in a file called sind.m

EXAMPLE 1. Sine in degrees

function s = sind(x)
%SIND(X) Calculates sine(x) in degrees
s = sin(x*pi/180);

Line 1: Tells OCTAVE that this file defines a function.
- The function is called sind.
- It takes one argument, called x.
- The result is to be known, internally, as s.
- Whatever s is set to in this function is what the user will get when they use the sind function

Line 2: Is a comment line.
- The first set of comments in the file should discribe the function.
- This line is the one printed when the user types 'help sind'.
- It is usual to use a similar format to that which is used by Octave's built-in functions.

Line 3: Does the actual work in this function. ...

End of the function
- Functions in Octave do not need to end with 'return'
- (although you can use the 'return' command to make Octave jump out of a function in the middile)
- B/c each function is in a separate M-file, once it reached the end of the file, Octave knows that it is the end of the function.
- The value that s has at the end of this function is the value that is returned.

EXTRA
- The function AUTOMATICALLY works with vectors:
If you call the sind function with a vector, it means that the x parameter inside the function will be a vector.
In this case, the sin function knows how to work with vectors, so can give the correct response.

Example 2: Unit step
Here is a more sophisticated function which generates a unit step, defined as:
y = 0 if t < t0, 1 otherwise.

function y = ustep(t, t0)
%USTEP(t, t0) unit step at t0
% A unit step is defined as
% 0 for t <>
% 1 for t >= t0
[m,n] = size(t);
% Check that this is a vector, not a matrix i.e. (1 x n) or (m x 1)
if m ~= 1 & n ~= 1
error('T must be a vector');
end
y = zeros(m, n); %Initialise output array
for k = 1:length(t)
if t(k) >= t0
y(k) = 1; % Otherwise, leave it at zero, which is correct
end
end


Line 1: The first line says that
- this function is called ustep
- the user must supply two arguments (known internally as t and t0)
- the result of the function is one variable, called y

Line 2-5: Description of the function.
- This time the help message contains several lines.

Line 6-12:
- The error function print out a message and aborts the function if there is a problem.
- The length function tells us how many elements there are in the vector t

Extra:
We can use this function to create signal.
For example, to create a unit pulse of duration one second, starting at t = 0:

t = -1:0.1:4; % Define a time scale
v = ustep(t,0) - ustep(t,1)
plot(t,v)
axis([-1 4 -1 2])

This should display the pulse.. If we then type

who

We'll get:

*** dynamically linked functions:

dispatch
*** currently compiled function:

_ptl2_ _plt_ isscalar isvector rows
_ptl2vv_ axis isstr plot ustep

*** local user variables:

t v

Basic Symbols

Boolean expression

Symbol meaning example
== equal if x==y
~= not equal if x~=y
> greater than if x>y
>=
<
<=

& AND if x==y & y>2
| OR if x==1 | y>2
~ NOT if x = ~y

Vectors

Creating Vectors
a=[1 4 5] % row vector
a=[1;4;5] % column vector
d=[a 6] % add 6 at the end of vector a

a= 1:6 % row vector, value from 1 to 6, increment 1
b= 1:.3:6 % row vector, value from 1 to 6, increment .3

zeros(m,n) % create m x n matrix, all elements are 0
ones(m,n) %
create m x n matrix, all elements are 1
linspace(x1,x2,N) % create a vector of N elements,
% evenly spaced btw x1 and x2
logspace(x1,x2,N)
% create a vector of N elements,
% logarithmically spaced btw x1 and x2


a=[1:2:6 -1 0] gives: 1 3 5 -1 0

Extracting elements
a(3) % third element, result: 5
a(3:5) % elements from 3 to 5, result: 5 -1 0
a(1:2:5) % elements from 1 to 5 w. increment 2, result: 1 5 0


Vector maths
b=[1,2,3,4,5]

a*2 % regular scalar multiplication
a.*b % element-by-element multiplication
a./b % element-by-element division
% '.' means element-by-element
b.^2 % square each element of b, result: [1,4,9,16,25]
2.^b % raise 2 to each of the powers given in b, result: result: [2,4,8,16,32]

Control Statements

To cancel a command: Ctrl C

if ... else ...
if expression
statement
else if expression
statement
else
statement
end
end

Note:
1. The brackets () are not needed around the expression
2. The block of statement does not need to be delimited by the braces {}
3. The end command is used to mark the end of the script statement.

switch selection
switch x
case x1
statements
case x2
statements
otherwise
statements
end

or, similarly
switch x
case x1, statements
case x2, statements
otherwise, statements
end

for loops
for variable = vector
statements
end

Ex:
for n=1:5
nf(n) = factorial(n);
end

disp(nf)

while loops
while expression
statements
end

Install gnuplot on Ubuntu

Copied from Miscellaneous Debris

********************************************

Though there is gnuplot available in the Ubuntu/Debian repositories, there are reasons to compile gnuplot - first and most important gnu readline support! I don’t know why Debian maintainers don’t compile the GNU readline support into GNUplot - it’s some license issues - but it’s like that and this makes gnuplot practically unusable. Second having the pdf and wxWidgets terminal is not that bad at all :)

So here are the instructions:

First we compile and install wxWidgets

  • Download wxWidgets GTK 2.8.3
  • Untar it somewhere: tar xzf wxGTK-2.8.3.tar.gz
  • cd cd wxGTK-2.8.3/
  • mkdir buildgtk
  • cd buildgtk
  • ../configure
  • make
  • sudo paco -lp wxGTK-2.8.3 make install (or just make install if you don’t use paco)
  • sudo ldconfig (you may need to add /usr/local/lib to the file /etc/ld.so.conf before)

Than we are going to install the PDFlib lite

  • Download PDFlib Lite
  • tar xzf PDFlib-Lite-7.0.1.tar.gz
  • cd PDFlib-Lite-7.0.1
  • ./configure
  • make
  • sudo paco -lD make install
  • sudo ldconfig

Than we compile gnuplot

  • Download gnuplot 4.2
  • tar xzf gnuplot-4.2.0.tar.gz
  • cd gnuplot-4.2.0
  • ./configure –with-readline=gnu (check if we have the lines “pdf terminal: yes” and “wxt terminal: yes (EXPERIMENTAL)”, if you miss the jpeg, png and gif terminal install the libgd2-xpm-dev package; also check if you find “Readline library: GNU readline library with -lncurses”, if it says only minimal readline support than install the libreadline5-dev package; you need also the libx11-dev and libxt-dev package for the X11 terminal - libxt-dev package is normally not installed by default (at the debian page about gnuplot one can find the packages necessary to build gnuplot))
  • make (if you have problems here with some latex errors than disable the latex tutorial during the configure stage with “–without-tutorial”, if you get a “103: makeinfo: not found” error message than install the texinfo package)
  • sudo paco -lD make install

Than you have gnuplot installed with nice readline support (command line like in bash), a nice new wxWidgets terminal and a pdf terminal.