| [dnrm2result,n,dx,incx]=dnrm2(n,dx,incx); |
function [dnrm2result,n,dx,incx]=dnrm2(n,dx,incx);
dnrm2result=[];
persistent cuthi cutlo firstCall hitest i j next nn one summlv xmax zero ; if isempty(firstCall),firstCall=1;end;
;
if isempty(i), i=0; end;
if isempty(j), j=0; end;
if isempty(nn), nn=0; end;
%***BEGIN PROLOGUE DNRM2
%***PURPOSE Compute the Euclidean length (L2 norm) of a vector.
%***LIBRARY SLATEC (BLAS)
%***CATEGORY D1A3B
%***TYPE doubleprecision (SNRM2-S, DNRM2-D, SCNRM2-C)
%***KEYWORDS BLAS, EUCLIDEAN LENGTH, EUCLIDEAN NORM, L2,
% LINEAR ALGEBRA, UNITARY, VECTOR
%***AUTHOR Lawson, C. L., (JPL)
% Hanson, R. J., (SNLA)
% Kincaid, D. R., (U. of Texas)
% Krogh, F. T., (JPL)
%***DESCRIPTION
%
% B L A S Subprogram
% Description of parameters
%
% --Input--
% N number of elements in input vector(s)
% DX doubleprecision vector with N elements
% INCX storage spacing between elements of DX
%
% --Output--
% DNRM2 doubleprecision result (zero if N .LE. 0)
%
% Euclidean norm of the N-vector stored in DX with storage
% increment INCX.
% If N .LE. 0, return with result = 0.
% If N .GE. 1, then INCX must be .GE. 1
%
% Four phase method using two built-in constants that are
% hopefully applicable to all machines.
% CUTLO = maximum of SQRT(U/EPS) over all known machines.
% CUTHI = minimum of SQRT(V) over all known machines.
% where
% EPS = smallest no. such that EPS + 1. .GT. 1.
% U = smallest positive no. (underflow limit)
% V = largest no. (overflow limit)
%
% Brief outline of algorithm.
%
% Phase 1 scans zero components.
% move to phase 2 when a component is nonzero and .LE. CUTLO
% move to phase 3 when a component is .GT. CUTLO
% move to phase 4 when a component is .GE. CUTHI/M
% where M = N for X() real and M = 2*N for complex.
%
% Values for CUTLO and CUTHI.
% From the environmental parameters listed in the IMSL converter
% document the limiting values are as follows:
% CUTLO, S.P. U/EPS = 2**(-102) for Honeywell. Close seconds are
% Univac and DEC at 2**(-103)
% Thus CUTLO = 2**(-51) = 4.44089E-16
% CUTHI, S.P. V = 2**127 for Univac, Honeywell, and DEC.
% Thus CUTHI = 2**(63.5) = 1.30438E19
% CUTLO, D.P. U/EPS = 2**(-67) for Honeywell and DEC.
% Thus CUTLO = 2**(-33.5) = 8.23181D-11
% CUTHI, D.P. same as S.P. CUTHI = 1.30438D19
% DATA CUTLO, CUTHI /8.232D-11, 1.304D19/
% DATA CUTLO, CUTHI /4.441E-16, 1.304E19/
%
%***REFERENCES C. L. Lawson, R. J. Hanson, D. R. Kincaid and F. T.
% Krogh, Basic linear algebra subprograms for Fortran
% usage, Algorithm No. 539, Transactions on Mathematical
% Software 5, 3 (September 1979), pp. 308-323.
%***ROUTINES CALLED (NONE)
%***REVISION HISTORY (YYMMDD)
% 791001 DATE WRITTEN
% 890531 Changed all specific intrinsics to generic. (WRB)
% 890831 Modified array declarations. (WRB)
% 890831 REVISION DATE from Version 3.2
% 891214 Prologue converted to Version 4.0 format. (BAB)
% 920501 Reformatted the REFERENCES section. (WRB)
%***end PROLOGUE DNRM2
if isempty(next), next=0; end;
dx_shape=size(dx);dx=reshape(dx,1,[]);
if isempty(cutlo), cutlo=0; end;
if isempty(cuthi), cuthi=0; end;
if isempty(hitest), hitest=0; end;
if isempty(summlv), summlv=0; end;
if isempty(xmax), xmax=0; end;
if isempty(zero), zero=0; end;
if isempty(one), one=0; end;
if firstCall, zero =[0.0d0]; end;
if firstCall, one=[1.0d0]; end;
%
if firstCall, cutlo =[8.232d-11]; end;
if firstCall, cuthi=[1.304d19]; end;
firstCall=0;
%***FIRST EXECUTABLE STATEMENT DNRM2
[dnrm2result,n,dx,incx]=snrm2(n,dx,incx);
end
|
|