SUBROUTINE svbksb_sp(u,w,v,b,x)
	USE nrtype; USE nrutil, ONLY : assert_eq
	REAL(SP), DIMENSION(:,:), INTENT(IN) :: u,v
	REAL(SP), DIMENSION(:), INTENT(IN) :: w,b
	REAL(SP), DIMENSION(:), INTENT(OUT) :: x
	INTEGER(I4B) :: mdum,ndum
	REAL(SP), DIMENSION(size(x)) :: tmp
	mdum=assert_eq(size(u,1),size(b),'svbksb_sp: mdum')
	ndum=assert_eq((/size(u,2),size(v,1),size(v,2),size(w),size(x)/),&
		'svbksb_sp: ndum')
	where (w /= 0.0)
		tmp=matmul(b,u)/w
	elsewhere
		tmp=0.0
	end where
	x=matmul(v,tmp)
	END SUBROUTINE svbksb_sp

	SUBROUTINE svbksb_dp(u,w,v,b,x)
	USE nrtype; USE nrutil, ONLY : assert_eq
	REAL(DP), DIMENSION(:,:), INTENT(IN) :: u,v
	REAL(DP), DIMENSION(:), INTENT(IN) :: w,b
	REAL(DP), DIMENSION(:), INTENT(OUT) :: x
	INTEGER(I4B) :: mdum,ndum
	REAL(DP), DIMENSION(size(x)) :: tmp
	mdum=assert_eq(size(u,1),size(b),'svbksb_dp: mdum')
	ndum=assert_eq((/size(u,2),size(v,1),size(v,2),size(w),size(x)/),&
		'svbksb_dp: ndum')
	where (w /= 0.0)
		tmp=matmul(b,u)/w
	elsewhere
		tmp=0.0
	end where
	x=matmul(v,tmp)
	END SUBROUTINE svbksb_dp