File: tsimp.pl

package info (click to toggle)
pdl 1.99988-5
  • links: PTS
  • area: main
  • in suites: slink
  • size: 3,908 kB
  • ctags: 3,426
  • sloc: perl: 15,352; ansic: 7,852; fortran: 3,327; makefile: 39; sh: 19
file content (50 lines) | stat: -rw-r--r-- 741 bytes parent folder | download | duplicates (11)
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
48
49
50
#use blib;
use PDL;
use PDL::Primitive;
use PDL::Graphics::PGPLOT;
use PDL::Opt::Simplex;

use Carp;

$SIG{__DIE__} = sub {print Carp::longmess(@_); die FOO};

# First, a 1-dimensional test:

sub func1 {
	my($x) = @_;
	return ($x**2)->slice('(0)');
}

sub logs1 {
	print "NOW: $_[0],$_[1]\n\n";
}
simplex(ones(1)*10,0.3,0.01,15,\&func1,\&logs1);

# Try a simple ellipsoid:

my $mult = pdl 4,1;

dev "/XSERVE";
env -15,5,-15,5;
hold;

sub func {
	my($x) = @_;
	my $b = ($mult * $x) ** 2;
	sumover($b,(my $res = null));
	$res;
}

sub logs {
	print "NOW: $_[0],$_[1]\n\n";
	line($_[0]->slice("(0)"),$_[0]->slice("(1)"));
	line($_[0]->slice("(0),0:2:2"),$_[0]->slice("(1),0:2:2"));
}

simplex(pdl(-10,-10), 0.5, 0.01, 30,
	\&func,
	\&logs
);