Code covered by the BSD License  

Highlights from
slatec

from slatec by Ben Barrowes
The slatec library converted into matlab functions.

[a,nrda,nrow,ncol,cols,colsav,rows,rowsav,anorm,scales,iscale,ic]=cscale(a,nrda,nrow,ncol,cols,colsav,rows,rowsav,anorm,scales,iscale,ic);
function [a,nrda,nrow,ncol,cols,colsav,rows,rowsav,anorm,scales,iscale,ic]=cscale(a,nrda,nrow,ncol,cols,colsav,rows,rowsav,anorm,scales,iscale,ic);
persistent alog2 ascale cs firstCall igo ip j k p s ten20 ten4 ; if isempty(firstCall),firstCall=1;end; 

if isempty(alog2), alog2=0; end;
if isempty(ascale), ascale=0; end;
if isempty(cs), cs=0; end;
if isempty(p), p=0; end;
if isempty(s), s=0; end;
if isempty(ten20), ten20=0; end;
if isempty(ten4), ten4=0; end;
if isempty(ip), ip=0; end;
if isempty(j), j=0; end;
if isempty(k), k=0; end;
if isempty(igo), igo=0; end;
%***BEGIN PROLOGUE  CSCALE
%***SUBSIDIARY
%***PURPOSE  Subsidiary to BVSUP
%***LIBRARY   SLATEC
%***TYPE      SINGLE PRECISION (CSCALE-S, DCSCAL-D)
%***AUTHOR  Watts, H. A., (SNLA)
%***DESCRIPTION
%
%     This routine scales the matrix A by columns when needed
%
%***SEE ALSO  BVSUP
%***ROUTINES CALLED  SDOT
%***REVISION HISTORY  (YYMMDD)
%   750601  DATE WRITTEN
%   890531  Changed all specific intrinsics to generic.  (WRB)
%   890831  Modified array declarations.  (WRB)
%   891214  Prologue converted to Version 4.0 format.  (BAB)
%   900328  Added TYPE section.  (WRB)
%   910722  Updated AUTHOR section.  (ALS)
%***end PROLOGUE  CSCALE
a_shape=size(a);a=reshape([a(:).',zeros(1,ceil(numel(a)./prod([nrda])).*prod([nrda])-numel(a))],nrda,[]);
cols_shape=size(cols);cols=reshape(cols,1,[]);
colsav_shape=size(colsav);colsav=reshape(colsav,1,[]);
scales_shape=size(scales);scales=reshape(scales,1,[]);
rows_shape=size(rows);rows=reshape(rows,1,[]);
rowsav_shape=size(rowsav);rowsav=reshape(rowsav,1,[]);
%
if firstCall,   ten4 =[1.0e+4];  end;
if firstCall,  ten20=[1.0e+20];  end;
firstCall=0;
%
%***FIRST EXECUTABLE STATEMENT  CSCALE
igo=0;
if( iscale==(-1) )
%
if( ic~=0 )
for k = 1 : ncol;
[cols(k) ,nrow,dumvar2,dumvar4,dumvar2]=sdot(nrow,a(sub2ind(size(a),1,k):end),1,a(sub2ind(size(a),1,k):end),1);      a(sub2ind(size(a),1,k):end)=dumvar2; 
end; k = fix(ncol+1);
end;
%
ascale = anorm./ncol;
for k = 1 : ncol;
cs = cols(k);
if((cs>ten4.*ascale) ||(ten4.*cs<ascale) )
igo=1;
break;
end;
if((cs<1../ten20) ||(cs>ten20) )
igo=1;
break;
end;
end;
end;
%
if(igo==0)
for k = 1 : ncol;
scales(k) = 1.;
end; k = fix(ncol+1);
a_shape=zeros(a_shape);a_shape(:)=a(1:numel(a_shape));a=a_shape;
cols_shape=zeros(cols_shape);cols_shape(:)=cols(1:numel(cols_shape));cols=cols_shape;
colsav_shape=zeros(colsav_shape);colsav_shape(:)=colsav(1:numel(colsav_shape));colsav=colsav_shape;
scales_shape=zeros(scales_shape);scales_shape(:)=scales(1:numel(scales_shape));scales=scales_shape;
rows_shape=zeros(rows_shape);rows_shape(:)=rows(1:numel(rows_shape));rows=rows_shape;
rowsav_shape=zeros(rowsav_shape);rowsav_shape(:)=rowsav(1:numel(rowsav_shape));rowsav=rowsav_shape;
return;
end;
%
alog2 = log(2.);
anorm = 0.;
for k = 1 : ncol;
cs = cols(k);
if( cs~=0. )
p = log(cs)./alog2;
ip = fix(-0.5.*p);
s = 2..^ip;
scales(k) = s;
if( ic~=1 )
cols(k) = s.*s.*cols(k);
anorm = anorm + cols(k);
colsav(k) = cols(k);
end;
for j = 1 : nrow;
a(j,k) = s.*a(j,k);
end; j = fix(nrow+1);
else;
scales(k) = 1.;
end;
end; k = fix(ncol+1);
%
if( ic==0 )
a_shape=zeros(a_shape);a_shape(:)=a(1:numel(a_shape));a=a_shape;
cols_shape=zeros(cols_shape);cols_shape(:)=cols(1:numel(cols_shape));cols=cols_shape;
colsav_shape=zeros(colsav_shape);colsav_shape(:)=colsav(1:numel(colsav_shape));colsav=colsav_shape;
scales_shape=zeros(scales_shape);scales_shape(:)=scales(1:numel(scales_shape));scales=scales_shape;
rows_shape=zeros(rows_shape);rows_shape(:)=rows(1:numel(rows_shape));rows=rows_shape;
rowsav_shape=zeros(rowsav_shape);rowsav_shape(:)=rowsav(1:numel(rowsav_shape));rowsav=rowsav_shape;
return;
end;
%
for k = 1 : nrow;
nrda_orig=nrda;    [rows(k) ,ncol,dumvar2,nrda,dumvar2,dumvar6]=sdot(ncol,a(sub2ind(size(a),k,1):end),nrda,a(sub2ind(size(a),k,1):end),nrda);    nrda(dumvar6~=nrda_orig)=dumvar6(dumvar6~=nrda_orig);      a(sub2ind(size(a),k,1):end)=dumvar2; 
rowsav(k) = rows(k);
anorm = anorm + rows(k);
end; k = fix(nrow+1);
a_shape=zeros(a_shape);a_shape(:)=a(1:numel(a_shape));a=a_shape;
cols_shape=zeros(cols_shape);cols_shape(:)=cols(1:numel(cols_shape));cols=cols_shape;
colsav_shape=zeros(colsav_shape);colsav_shape(:)=colsav(1:numel(colsav_shape));colsav=colsav_shape;
scales_shape=zeros(scales_shape);scales_shape(:)=scales(1:numel(scales_shape));scales=scales_shape;
rows_shape=zeros(rows_shape);rows_shape(:)=rows(1:numel(rows_shape));rows=rows_shape;
rowsav_shape=zeros(rowsav_shape);rowsav_shape(:)=rowsav(1:numel(rowsav_shape));rowsav=rowsav_shape;
end
%DECK CSCAL

Contact us at files@mathworks.com