File: rtest_lbfgs.mac

package info (click to toggle)
maxima 5.42.1-1
  • links: PTS
  • area: main
  • in suites: buster
  • size: 150,192 kB
  • sloc: lisp: 382,565; fortran: 14,666; perl: 14,365; tcl: 11,123; sh: 4,622; makefile: 2,688; ansic: 444; xml: 23; awk: 17; sed: 17
file content (47 lines) | stat: -rw-r--r-- 1,485 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
(kill(all), 'done);
'done$

(load("lbfgs"), float_approx_equal_tolerance : 1e-12, 'done);
'done$

block([n, FOM], local(t1, t2),
  t1[j] := 1 - u[j],
  t2[j] := 10*(u[j + 1] - u[j]^2),
  n : 8,
  FOM : sum (t1[2*j - 1]^2 + t2[2*j - 1]^2, j, 1, n/2),
  lbfgs (FOM, '[u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8]],
    [-1.2, 1, -1.2, 1, -1.2, 1, -1.2, 1], 1e-3, [1, 0]));
[u[1] = 1.000005339816132,u[2] = 1.000009942840108,u[3] = 1.000005339816132,
 u[4] = 1.000009942840108,u[5] = 1.000005339816132,u[6] = 1.000009942840108,
 u[7] = 1.000005339816132,u[8] = 1.000009942840108]$

block([FOM, X, Y], local(F),
  FOM : '((1/length(X))*sum((F(X[i]) - Y[i])^2, i, 1,
      length(X))),
  X : [1, 2, 3, 4, 5],
  Y : [0, 0.5, 1, 1.25, 1.5],
  F(x) := A/(1 + exp(-B*(x - C))),
  lbfgs (FOM, '[A, B, C], [1, 1, 1], 1e-4, [1, 0]));
[A = 1.461933911464101, B = 1.601593973254801,
C = 2.528933072164855]$

block(local(F_grad, F), F(a, b, c) := (a - 5)^2 + (b - 3)^4 + (c - 2)^6,
define(F_grad(a, b, c),
  map (lambda ([x], diff (F(a, b, c), x)), [a, b, c])),
lbfgs ([F, F_grad],
  [a, b, c], [0, 0, 0], 1e-4, [1, 0]));
[a = 5.000086823042934, b = 3.052395429705181,
c = 1.927980629919583]$

/* fails
x: 42;
lbfgs ('x^2, ['x], [1], 1e-4, [-1, -1]);
*/

/* should return last approximation if max function evaluations reached */

block ([lbfgs_nfeval_max:10], lbfgs (x^6 + y^6, [x, y], [1, 1], 1e-12, [1, 0]));
[x = 0.1082428019264297, y = 0.1082428019264297];

(reset(float_approx_equal_tolerance),0);
0