ece210/lessons/lesson04/octave-log.txt

573 lines
13 KiB
Plaintext

octave:2> z = zeros(3)
z =
0 0 0
0 0 0
0 0 0
octave:3> mean(1:5)
ans = 3
octave:4> zeros(3)
ans =
0 0 0
0 0 0
0 0 0
octave:5> zeros(3, 1)
ans =
0
0
0
octave:6> help sum
'sum' is a built-in function from the file libinterp/corefcn/data.cc
-- sum (X)
-- sum (X, DIM)
-- sum (..., "native")
-- sum (..., "double")
-- sum (..., "extra")
Sum of elements along dimension DIM.
If DIM is omitted, it defaults to the first non-singleton
dimension.
The optional "type" input determines the class of the variable used
for calculations. By default, operations on floating point inputs
(double or single) are performed in their native data type, while
operations on integer, logical, and character data types are
performed using doubles. If the argument "native" is given, then
the operation is performed in the same type as the original
argument.
For example:
sum ([true, true])
=> 2
sum ([true, true], "native")
=> true
If "double" is given the sum is performed in double precision even
for single precision inputs.
For double precision inputs, the "extra" option will use a more
accurate algorithm than straightforward summation. For single
precision inputs, "extra" is the same as "double". For all other
data type "extra" has no effect.
See also: cumsum, sumsq, prod.
Additional help for built-in functions and operators is
available in the online version of the manual. Use the command
'doc <topic>' to search the manual index.
Help and information about Octave is also available on the WWW
at https://www.octave.org and via the help@octave.org
mailing list.
octave:7> sum(eye(3))
ans =
1 1 1
octave:8> eye(3)
ans =
Diagonal Matrix
1 0 0
0 1 0
0 0 1
octave:9> sum(eye(3))
ans =
1 1 1
octave:10> sum(eye(3), 2)
ans =
1
1
1
octave:11> sum(eye(3), 3)
ans =
1 0 0
0 1 0
0 0 1
octave:12> hold on
octave:13> close all
octave:14> close("all")
octave:15> hold("on")
octave:16> close("all")
octave:17> figure
octave:18> figure()
octave:19> close("all")
octave:20> hist(1:10)
octave:21> close all
octave:22> a = hist(1:10)
a =
1 1 1 1 1 1 1 1 1 1
octave:23> help find
'find' is a built-in function from the file libinterp/corefcn/find.cc
-- IDX = find (X)
-- IDX = find (X, N)
-- IDX = find (X, N, DIRECTION)
-- [i, j] = find (...)
-- [i, j, v] = find (...)
Return a vector of indices of nonzero elements of a matrix, as a
row if X is a row vector or as a column otherwise.
To obtain a single index for each matrix element, Octave pretends
that the columns of a matrix form one long vector (like Fortran
arrays are stored). For example:
find (eye (2))
=> [ 1; 4 ]
If two inputs are given, N indicates the maximum number of elements
to find from the beginning of the matrix or vector.
If three inputs are given, DIRECTION should be one of "first" or
"last", requesting only the first or last N indices, respectively.
However, the indices are always returned in ascending order.
If two outputs are requested, 'find' returns the row and column
indices of nonzero elements of a matrix. For example:
[i, j] = find (2 * eye (2))
=> i = [ 1; 2 ]
=> j = [ 1; 2 ]
If three outputs are requested, 'find' also returns a vector
containing the nonzero values. For example:
[i, j, v] = find (3 * eye (2))
=> i = [ 1; 2 ]
=> j = [ 1; 2 ]
=> v = [ 3; 3 ]
If X is a multi-dimensional array of size m x n x p x ..., J
contains the column locations as if X was flattened into a
two-dimensional matrix of size m x (n + p + ...).
Note that this function is particularly useful for sparse matrices,
as it extracts the nonzero elements as vectors, which can then be
used to create the original matrix. For example:
sz = size (a);
[i, j, v] = find (a);
b = sparse (i, j, v, sz(1), sz(2));
See also: nonzeros.
Additional help for built-in functions and operators is
available in the online version of the manual. Use the command
'doc <topic>' to search the manual index.
Help and information about Octave is also available on the WWW
at https://www.octave.org and via the help@octave.org
mailing list.
octave:24> cube = @(x) x.^3;
octave:25> cube
cube =
@(x) x .^ 3
octave:26> cube(3)
ans = 27
octave:27> paraboloid = @(x, y) x.^2 + y.^2;
octave:28> paraboloid(3, 4)
ans = 25
octave:29> @(x) x.^3
ans =
octave:35> a = 9
a = 9
octave:36> capture = @() a;
octave:37> capture
capture =
@() a
octave:38> capture()
ans = 9
octave:39> capture = @() 9
capture =
@() 9
octave:40> capture()
ans = 9
octave:41> capture = @() a;
octave:42> capture()
ans = 9
octave:43> a = 3
a = 3
octave:44> capture()
ans = 9
octave:45> n = 4
n = 4
octave:46> n = 2
n = 2
octave:47> pown = @(x) x.^n
pown =
@(x) x .^ n
octave:48> pown(3)
ans = 9
octave:49> n = 4
n = 4
octave:50> pown(3)
ans = 9
octave:51>
^[[200~compose = @(f, g) @(x) f(g(x));^[[201~octave:51>
octave:51>
octave:51>
octave:51>
octave:51> compose = @(f, g) @(x) f(g(x));
octave:52>
octave:52>
octave:52>
octave:52>
octave:52>
octave:52> add_three = @(x) x + 3;
times_four = @(x) x * 4;
x_times_four_plus_three = compose(add_three, times_four);
octave:55> x_times_four_plus_three
x_times_four_plus_three =
@(x) f (g (x))
octave:56> function y = times_four_plus_three(x)
> x2 = x.*4;
> y = x2 + 3;
> end
octave:57> times_four_plus_three(1)
ans = 7
octave:58> answer = times_four_plus_three(1)
answer = 7
octave:59> function [y, z] = mystery_math(p, q)
> y = p + q;
> z = p - q;
> disp('did the math!');
> end
octave:60> mystery_math(3, 4)
did the math!
ans = 7
octave:61> [val1, val2] = mystery_math(3, 4)
did the math!
val1 = 7
val2 = -1
octave:62>
[cat@lazarus:~/classes/ece210-materials/2024-van-west/lessons/lesson04]
$ ls
BasicClass.m datatypes.m for_loops.m lecture.txt
controlflow.m distance.m funnnnnn.m
[cat@lazarus:~/classes/ece210-materials/2024-van-west/lessons/lesson04]
$ cat distance.m
% In a file like this one (which only defines normal functions, and in which
% the first function is hononymous with the filename), the first function is a
% public function, and all other functions are local helper functions.
%
% Note that you DO NOT want to put clc; clear; close all; at the top of a file
% like this; it only makes sense to do this at the top of script files when you
% want to clean your workspace!
% Calculate Euclidean distance
% A public function, callable by other files and from the Command Window if
% this is in the MATLAB path.
function d = distance(x, y)
d = sqrt(sq(x) + sq(y));
end
% A local helper function. Only accessible within this file.
function x = sq(x)
x = x * x;
end
[cat@lazarus:~/classes/ece210-materials/2024-van-west/lessons/lesson04]
$ octave
GNU Octave, version 7.3.0
Copyright (C) 1993-2022 The Octave Project Developers.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. For details, type 'warranty'.
Octave was configured for "x86_64-pc-linux-gnu".
Additional information about Octave is available at https://www.octave.org.
Please contribute if you find this software useful.
For more information, visit https://www.octave.org/get-involved.html
Read https://www.octave.org/bugs.html to learn how to submit bug reports.
For information about changes from previous versions, type 'news'.
octave:1> who
octave:2> distance(3, 4)
ans = 5
octave:3> path
Octave's search path contains the following directories:
.
/usr/lib/x86_64-linux-gnu/octave/7.3.0/site/oct/x86_64-pc-linux-gnu
/usr/lib/x86_64-linux-gnu/octave/site/oct/api-v57/x86_64-pc-linux-gnu
/usr/lib/x86_64-linux-gnu/octave/site/oct/x86_64-pc-linux-gnu
/usr/share/octave/7.3.0/site/m
/usr/share/octave/site/api-v57/m
/usr/share/octave/site/m
/usr/share/octave/site/m/startup
/usr/lib/x86_64-linux-gnu/octave/7.3.0/oct/x86_64-pc-linux-gnu
/usr/share/octave/7.3.0/m
/usr/share/octave/7.3.0/m/audio
/usr/share/octave/7.3.0/m/deprecated
/usr/share/octave/7.3.0/m/elfun
/usr/share/octave/7.3.0/m/general
/usr/share/octave/7.3.0/m/geometry
/usr/share/octave/7.3.0/m/gui
/usr/share/octave/7.3.0/m/help
/usr/share/octave/7.3.0/m/image
/usr/share/octave/7.3.0/m/io
/usr/share/octave/7.3.0/m/java
/usr/share/octave/7.3.0/m/legacy
/usr/share/octave/7.3.0/m/linear-algebra
/usr/share/octave/7.3.0/m/miscellaneous
/usr/share/octave/7.3.0/m/ode
/usr/share/octave/7.3.0/m/optimization
/usr/share/octave/7.3.0/m/path
/usr/share/octave/7.3.0/m/pkg
/usr/share/octave/7.3.0/m/plot
/usr/share/octave/7.3.0/m/plot/appearance
/usr/share/octave/7.3.0/m/plot/draw
/usr/share/octave/7.3.0/m/plot/util
/usr/share/octave/7.3.0/m/polynomial
/usr/share/octave/7.3.0/m/prefs
/usr/share/octave/7.3.0/m/profiler
/usr/share/octave/7.3.0/m/set
/usr/share/octave/7.3.0/m/signal
/usr/share/octave/7.3.0/m/sparse
/usr/share/octave/7.3.0/m/specfun
/usr/share/octave/7.3.0/m/special-matrix
/usr/share/octave/7.3.0/m/startup
/usr/share/octave/7.3.0/m/statistics
/usr/share/octave/7.3.0/m/strings
/usr/share/octave/7.3.0/m/testfun
/usr/share/octave/7.3.0/m/time
/usr/share/octave/7.3.0/m/web
/usr/share/octave/7.3.0/data
octave:4> power_to_dB = @(p) 10*log10(p);
octave:5> dB_to_power = @(db) 10.^(db./10);
octave:6> power_to_dB(10)
ans = 10
octave:7> power_to_dB(1000)
ans = 30
octave:8> power_to_dB(100)
ans = 20
octave:9> dB_to_power(10)
ans = 10
octave:10> dB_to_power(-10)
ans = 0.1000
octave:11> for v = [1 2 5 7]
> v
> end
v = 1
v = 2
v = 5
v = 7
octave:12> for i = 1:10
> i + 3
> end
ans = 4
ans = 5
ans = 6
ans = 7
ans = 8
ans = 9
ans = 10
ans = 11
ans = 12
ans = 13
octave:13> total = 0
total = 0
octave:14> for i = 1:10
> total = total + i
> end
total = 1
total = 3
total = 6
total = 10
total = 15
total = 21
total = 28
total = 36
total = 45
total = 55
octave:15> sum(1:10)
ans = 55
octave:16> 1 < 2
ans = 1
octave:17> who
Variables visible from the current scope:
ans dB_to_power i power_to_dB total v
octave:18> whos
Variables visible from the current scope:
variables in scope: top scope
Attr Name Size Bytes Class
==== ==== ==== ===== =====
ans 1x1 1 logical
dB_to_power 1x1 0 function_handle
i 1x1 8 double
power_to_dB 1x1 0 function_handle
total 1x1 8 double
v 1x1 8 double
Total is 6 elements using 25 bytes
octave:19> if 1 < 2
> disp('math still works today');
> else
> disp('oh no');
> end
math still works today
octave:20> i = 0
i = 0
octave:21> while i < 10
> i = i + 1
> end
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
octave:22> try
> a = [1 2; 3 4];
> b = [1 2 3 4];
> c = a*b;
> catch err
> disp('yo! don't do that!')
error: parse error:
syntax error
>>> disp('yo! don't do that!')
^
octave:22> try
> a = [1 2; 3 4];
> b = [1 2 3 4];
> c = a*b;
> catch err
> disp('yo! do not do that!')
> end
yo! do not do that!
octave:23> a
a =
1 2
3 4
octave:24> b
b =
1 2 3 4
octave:25> a*b
error: operator *: nonconformant arguments (op1 is 2x2, op2 is 1x4)
octave:26> clear
octave:27> whos
octave:28> a = 10
a = 10
octave:29> class(a)
ans = double
octave:30> b = int8(a)
b = 10
octave:31> class(b)
ans = int8
octave:32> b + .5
ans = 11
octave:33> whos
Variables visible from the current scope:
variables in scope: top scope
Attr Name Size Bytes Class
==== ==== ==== ===== =====
a 1x1 8 double
ans 1x1 1 int8
b 1x1 1 int8
Total is 3 elements using 10 bytes
octave:34>
octave:34>
octave:34>
^[[200~imshow(uint8(rand(128, 128, 3)));^[[201~octave:34>
octave:34>
octave:34> imshow(uint8(rand(128, 128, 3)));
octave:35> close all
octave:36>
^[[200~imshow(double(rand(128, 128, 3)));^[[201~octave:36>
octave:36>
octave:36>
octave:36>
octave:36> imshow(double(rand(128, 128, 3)));
octave:37> close all
octave:38> imshow(uint8(rand(128, 128, 3)));
octave:39> close all
octave:40> imshow(uint8(rand(128, 128, 3)));
octave:40> eps
ans = 2.2204e-16
octave:41> eps(1)
ans = 2.2204e-16
octave:42> eps(.001)
ans = 2.1684e-19
octave:43> eps(10000)
ans = 1.8190e-12
octave:44> eps(1e100)
ans = 1.9427e+84
octave:45> 10^(10^10)
ans = Inf
octave:46> a = 5
a = 5
octave:47> b = "hello!"
b = hello!
octave:48> s = struct('a', 5, 'b', "hello!")
s =
scalar structure containing the fields:
a = 5
b = hello!
octave:49> s
s =
scalar structure containing the fields:
a = 5
b = hello!
octave:50> s.a
ans = 5
octave:51> s.b
ans = hello!
octave:52>