Author: Harald Schilly
Views : 210
Compute Environment: Ubuntu 20.04 (Default)

# Octave 5.2.0 on CoCalc Ubuntu 20.04

https://www.gnu.org/software/octave/news/release/2020/01/31/octave-5.2.0-released.html

In :
version()

ans = 5.2.0 
In :
function sqs = squares(n)
# Compute the squares of the numbers from 1 to n.

### BEGIN SOLUTION
# Put correct code here. This code is removed for the student version, but is
# used to confirm that your tests are valid.
if (n <= 0)
error("n must be positive")
endif
sqs = (1:n).^2;
### END SOLUTION
endfunction

In :
# [Modify the tests below for your own problem]
# Check that squares returns the correct output for several inputs:
assert(squares(1), )
assert(squares(2), [1 4])

# Check that squares raises an error for invalid input:
number_of_errors = 0;
for n = [0 -1]
try
squares(n);
catch
number_of_errors++;
end_try_catch
endfor
assert(number_of_errors, 2)

### BEGIN HIDDEN TESTS
# students will NOT see these extra tests
assert(squares(10), [1 4 9 16 25 36 49 64 81 100])
### END HIDDEN TESTS

In :
function s = foo(a, b)
# Compute the sum of a and b.

### BEGIN SOLUTION
s = a + b;
### END SOLUTION
endfunction

In :
foo(23,23)

ans = 46 
In :
[2 3 4]' * [4 3 -1]

ans = 8 6 -2 12 9 -3 16 12 -4 
In :
x = rand(3,3)^3

x = 3.0625 3.0801 3.9551 1.9432 1.8293 2.4635 2.0440 2.0871 2.6698 
In :
save r-octave.mat x -7

In :
scatter(sort(rand(1000, 1)), sort(randn(1000, 1))) In :
i = 0:.1:2*pi;
plot(i, sin(i)) In :
pkg load dicom

error: package dicom is not installed error: called from load_packages at line 41 column 7 pkg at line 461 column 7
In :
dicomuid()

warning: the 'dicomuid' function belongs to the image package from Octave Forge which you have installed but not loaded. To load the package, run 'pkg load image' from the Octave prompt. Please read <https://www.octave.org/missing.html> to learn how you can contribute missing functionality. error: 'dicomuid' undefined near line 1 column 1
In :
pkg load symbolic;
syms x;
f = sin(x);
diff(f,x)

Symbolic pkg v2.9.0: /usr/local/lib/python3.8/dist-packages/sympy/__init__.py:672: SymPyDeprecationWarning: importing sympy.core.compatibility with 'from sympy import *' has been deprecated since SymPy 1.6. Use import sympy.core.compatibility instead. See https://github.com/sympy/sympy/issues/18245 for more info. self.Warn( Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 12, in octoutput_drv File "<stdin>", line 54, in octoutput File "<stdin>", line 55, in octoutput File "/usr/local/lib/python3.8/dist-packages/sympy/__init__.py", line 677, in __getattr__ return getattr(self.mod, name) AttributeError: module 'sympy.core.compatibility' has no attribute 'integer_types' Waiting...............warning: readblock: timeout of 30 exceeded, breaking out warning: called from readblock at line 101 column 7 python_ipc_popen2 at line 99 column 16 python_ipc_driver at line 62 column 15 pycall_sympy__ at line 163 column 11 valid_sym_assumptions at line 38 column 10 assumptions at line 82 column 7 syms at line 97 column 13 no output so far error: ipc_popen2: something wrong? timed out starting python error: called from python_ipc_popen2 at line 101 column 7 python_ipc_driver at line 62 column 15 pycall_sympy__ at line 163 column 11 valid_sym_assumptions at line 38 column 10 assumptions at line 82 column 7 syms at line 97 column 13 error: diff: order K must be a scalar or []
In :
pkg load symbolic; syms x
f = 2 * (cos(x) + sin(x)^2)
f1 = diff(f, x)

/usr/local/lib/python3.8/dist-packages/sympy/__init__.py:672: SymPyDeprecationWarning: importing sympy.core.compatibility with 'from sympy import *' has been deprecated since SymPy 1.6. Use import sympy.core.compatibility instead. See https://github.com/sympy/sympy/issues/18245 for more info. self.Warn( Traceback (most recent call last): File "<stdin>", line 4, in <module> File "<stdin>", line 12, in octoutput_drv File "<stdin>", line 55, in octoutput File "/usr/local/lib/python3.8/dist-packages/sympy/__init__.py", line 677, in __getattr__ return getattr(self.mod, name) AttributeError: module 'sympy.core.compatibility' has no attribute 'integer_types' error: Python exception: AttributeError: module 'sympy.core.compatibility' has no attribute 'integer_types' occurred while copying variables to Python. Try "sympref reset" and repeat your command? (consider filing an issue at https://github.com/cbm755/octsympy/issues) error: called from pycall_sympy__ at line 191 column 5 valid_sym_assumptions at line 38 column 10 assumptions at line 82 column 7 syms at line 97 column 13 f = 4.4528 5.8010 5.5184 5.5299 6.3750 6.0808 3.9436 5.3045 4.7635 error: diff: order K must be a scalar or []
In :
xx = -10:0.1:10;
plot(xx, f(xx))

warning: non-integer range used as index error: f(-10): subscripts must be either integers 1 to (2^63)-1 or logicals
In :
pkg load image

In :
a = ones(100, 100);
b = ones(100, 100);
b(3, 1) = .5;
psnr(a, b)

ans = 46.021

This plot shows the famous 3D sombrero.

A quadratic meshgrid of $x$ and $y$ coordinates is evaluated via $\sqrt{x^2 + y^2} + \epsilon$ and the value $r$ is then the value plotted along the third dimension.

Reference: 3d plots

In :
tx = ty = linspace (-8, 8, 41)';
[xx, yy] = meshgrid (tx, ty);
r = sqrt (xx .^ 2 + yy .^ 2) + eps;
tz = sin (r) ./ r;
mesh (tx, ty, tz);
xlabel ("tx");
ylabel ("ty");
zlabel ("tz");
title ("3-D Sombrero plot"); In :
[x,y] = meshgrid(-16:0.5:16);
r = hypot(x,y)/2 + eps;
figure;
surf(sin(r)./r);
colormap(jet); In [ ]:



This draws the set of points, where the given equation is satisfied. Here, it shows a tilted ellipse.

$x^2 + 3 (y-1)^2 + \frac{x y}{2} = 6$

Reference: ezplot

In :
ezplot (@(x, y) x.^2 + 3 * (y - 1).^2 + .5 * x .* y - 6) Imagine you want to evaluate a binary function $f(x,\,y) := x + 2 y$.

For evaluating it in vectorized notation, you need a grid for the cartesian product of all $x$ and $y$.

In :
x = 0:3;
y = 0:4;
[xx, yy] = meshgrid(x, y);
xx + 2*yy

ans = 0 1 2 3 2 3 4 5 4 5 6 7 6 7 8 9 8 9 10 11

## dsolve and sympy in symbolic

In :
pkg load symbolic
syms y(x)
de = diff(y) == x;
f = dsolve(de, y(1) == 1)

Traceback (most recent call last): File "<stdin>", line 4, in <module> File "<stdin>", line 12, in octoutput_drv File "<stdin>", line 55, in octoutput File "/usr/local/lib/python3.8/dist-packages/sympy/__init__.py", line 677, in __getattr__ return getattr(self.mod, name) AttributeError: module 'sympy.core.compatibility' has no attribute 'integer_types' error: Python exception: AttributeError: module 'sympy.core.compatibility' has no attribute 'integer_types' occurred while copying variables to Python. Try "sympref reset" and repeat your command? (consider filing an issue at https://github.com/cbm755/octsympy/issues) error: called from pycall_sympy__ at line 191 column 5 valid_sym_assumptions at line 38 column 10 assumptions at line 82 column 7 syms at line 97 column 13 warning: 'dsolve' is a method of class 'sym'; it must be called with a 'sym' argument (see 'help @sym/dsolve'). Please read <https://www.octave.org/missing.html> to learn how you can contribute missing functionality. error: 'dsolve' undefined near line 1 column 5

## Octave's ODE PKG in Action

In :
pkg load odepkg;

In :
dxdt = @(t, x) - 0.24 * x.^2 + t;
tsteps = [0:0.1:5];
[t, x] = ode45(dxdt, tsteps, [-1:0.5:3]);
plot(t, x) In [ ]:


In [ ]:



You can run numerical optimizations via the optim package.

In this example we minimize the classical Rosenbrock function in 20 dimensions using BFGS.

In :
pkg load optim;

function [obj_value, gradient] = objective(theta, location)
x = theta - location + ones(rows(theta),1); # move minimizer to "location"
endfunction

dim = 20;                 # dimension of Rosenbrock function
theta0 = zeros(dim+1,1);  # starting values
location = (0:dim)/dim;   # true values
location = location';
control = {Inf,1};        # maxiters, verbosity

bfgsmin("objective", {theta0, location}, control);

------------------------------------------------ bfgsmin final results: 65 iterations function value: 3.42399e-16 STRONG CONVERGENCE Function conv 1 Param conv 1 Gradient conv 1 used analytic gradient param gradient (n) change 0.00000 0.00000 -0.00000 0.05000 -0.00000 0.00000 0.10000 0.00000 0.00000 0.15000 -0.00000 0.00000 0.20000 -0.00000 0.00000 0.25000 0.00000 0.00000 0.30000 -0.00000 0.00000 0.35000 -0.00000 0.00000 0.40000 -0.00000 0.00000 0.45000 0.00000 0.00000 0.50000 -0.00000 0.00000 0.55000 0.00000 -0.00000 0.60000 -0.00000 0.00000 0.65000 -0.00000 0.00000 0.70000 0.00000 -0.00000 0.75000 -0.00000 0.00000 0.80000 0.00000 0.00000 0.85000 -0.00000 0.00000 0.90000 0.00000 0.00000 0.95000 -0.00000 0.00000 1.00000 0.00000 0.00000
In [ ]:


In [ ]: