# This file tests Algae's leastsq function.

printf ("Starting the leastsq test...\n");

assert = function (t)
{
  if (!test (t))
  {
    printf ("...failed.\a\n");
    exception ();
  }
};

A = label ([1,1;2,1;3,1]; ; "a","b");
b = 2,2.3,2;
x = leastsq (A; b);
assert (abs(x["a"]) < 1e-8);
assert (abs(x["b"]-2.1) < 1e-8);

A = [0,0,1; 1,0,1; 0,1,1; 1,1,1; 0,0,1; 1,0,1; 0,1,1; 1,1,1];
b =      0,     1,     1,     2,     1,     2,     2,     3;
x = leastsq (A; b);
assert (norm (x-(1,1,.5)) < 1e-8);

A = fill (5,5; 1:25);
b = fill (5; 1);
x = leastsq (A; b);
assert (norm (A*x-b) < 1e-8);

A = fill (5,5; (1:25)^4);
b = fill (5;1);
x = leastsq (A; b);
assert (norm (A*x-b) < 1e-8);
assert (norm (x-solve(A;b)) < 1e-8);

A = [0,0,1; 1,1,1];
b =      0,     1;
x = leastsq (A; b);
assert (norm (A*x-b) < 1e-8);
assert (abs (norm (x) - 1/sqrt(2)) < 1e-8);

b = rand (100);
assert (abs (leastsq (fill (100,1; 1); b) - sum (b) / b.ne) < 1e-8);

printf ("...passed.\n");


syntax highlighted by Code2HTML, v. 0.9.1