svbksb.pl
author Andreas Thurnherr <ant@ldeo.columbia.edu>
Mon, 13 Apr 2020 11:06:22 -0400
changeset 40 c1803ae2540f
parent 17 4b7486d77b39
permissions -rw-r--r--
.

#======================================================================
#                    S V B K S B . P L 
#                    doc: Sat Jul 31 22:47:03 1999
#                    dlm: Wed Mar 11 19:29:39 2015
#                    (c) 1999 A.M. Thurnherr
#                    uE-Info: 20 0 NIL 0 0 72 2 2 4 NIL ofnI
#======================================================================

# SVBKSB routine from Numerical Recipes adapted to ANTS
#
#	solves Ax = b for x, given b
#
#	Notes:
#		- A = U W V' as done in [svdcmp.pl]

# HISTORY:
#	Jul 31, 1999: - manually converted from c-source
#	Mar 11, 2015: - fixed syntax errors (code had never been used before)

require "$ANTS/nrutil.pl";

use strict;

sub svbksb($$$$$)
{
	my($uR,$wR,$vR,$bR,$xR) = @_;
	my($jj,$j,$i);									# int
	my($s);										# float
	my(@tmp);									# float[]

	&vector(\@tmp,1,$#{$wR});
	for ($j=1; $j<=$#{$wR}; $j++) {
		$s = 0;
		if ($wR->[$j]) {
			for ($i=1; $i<=$#{$uR}; $i++) {
				$s += $uR->[$i][$j] * $bR->[$i];
			}
			$s /= $wR->[$j];
		}
		$tmp[$j]=$s;
	}
	for ($j=1; $j<=$#{$wR}; $j++) {
		$s = 0;
		for ($jj=1; $jj<=$#{$wR}; $jj++) {
			$s += $vR->[$j][$jj] * $tmp[$jj];
		}
		$xR->[$j] = $s;
	}
}