0
|
1 |
#======================================================================
|
17
|
2 |
# S V B K S B . P L
|
0
|
3 |
# doc: Sat Jul 31 22:47:03 1999
|
17
|
4 |
# dlm: Wed Mar 11 19:29:39 2015
|
0
|
5 |
# (c) 1999 A.M. Thurnherr
|
17
|
6 |
# uE-Info: 20 0 NIL 0 0 72 2 2 4 NIL ofnI
|
0
|
7 |
#======================================================================
|
|
8 |
|
|
9 |
# SVBKSB routine from Numerical Recipes adapted to ANTS
|
17
|
10 |
#
|
|
11 |
# solves Ax = b for x, given b
|
|
12 |
#
|
|
13 |
# Notes:
|
|
14 |
# - A = U W V' as done in [svdcmp.pl]
|
0
|
15 |
|
|
16 |
# HISTORY:
|
|
17 |
# Jul 31, 1999: - manually converted from c-source
|
17
|
18 |
# Mar 11, 2015: - fixed syntax errors (code had never been used before)
|
0
|
19 |
|
|
20 |
require "$ANTS/nrutil.pl";
|
|
21 |
|
17
|
22 |
use strict;
|
|
23 |
|
0
|
24 |
sub svbksb($$$$$)
|
|
25 |
{
|
|
26 |
my($uR,$wR,$vR,$bR,$xR) = @_;
|
|
27 |
my($jj,$j,$i); # int
|
|
28 |
my($s); # float
|
|
29 |
my(@tmp); # float[]
|
|
30 |
|
|
31 |
&vector(\@tmp,1,$#{$wR});
|
|
32 |
for ($j=1; $j<=$#{$wR}; $j++) {
|
|
33 |
$s = 0;
|
|
34 |
if ($wR->[$j]) {
|
|
35 |
for ($i=1; $i<=$#{$uR}; $i++) {
|
|
36 |
$s += $uR->[$i][$j] * $bR->[$i];
|
|
37 |
}
|
|
38 |
$s /= $wR->[$j];
|
|
39 |
}
|
|
40 |
$tmp[$j]=$s;
|
|
41 |
}
|
|
42 |
for ($j=1; $j<=$#{$wR}; $j++) {
|
|
43 |
$s = 0;
|
|
44 |
for ($jj=1; $jj<=$#{$wR}; $jj++) {
|
17
|
45 |
$s += $vR->[$j][$jj] * $tmp[$jj];
|
0
|
46 |
}
|
17
|
47 |
$xR->[$j] = $s;
|
0
|
48 |
}
|
|
49 |
}
|
|
50 |
|
|
51 |
|