Code covered by the BSD License  

Highlights from
slatec

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

[m,n,sx,ix,lmx,ipagef]=pinitm(m,n,sx,ix,lmx,ipagef);
function [m,n,sx,ix,lmx,ipagef]=pinitm(m,n,sx,ix,lmx,ipagef);
persistent firstCall i iopt lp4 n20008 n20012 nerr one zero ; if isempty(firstCall),firstCall=1;end; 

if isempty(i), i=0; end;
if isempty(iopt), iopt=0; end;
if isempty(lp4), lp4=0; end;
if isempty(n20008), n20008=0; end;
if isempty(n20012), n20012=0; end;
if isempty(nerr), nerr=0; end;
%***BEGIN PROLOGUE  PINITM
%***SUBSIDIARY
%***PURPOSE  Subsidiary to SPLP
%***LIBRARY   SLATEC
%***TYPE      SINGLE PRECISION (PINITM-S, DPINTM-D)
%***AUTHOR  Hanson, R. J., (SNLA)
%           Wisniewski, J. A., (SNLA)
%***DESCRIPTION
%
%     PINITM LIMITS THE TYPE OF STORAGE TO A SEQUENTIAL SCHEME.
%     THE MATRIX IS STORED BY COLUMNS.
%     SPARSE MATRIX INITIALIZATION SUBROUTINE.
%
%            M=NUMBER OF ROWS OF THE MATRIX.
%            N=NUMBER OF COLUMNS OF THE MATRIX.
%  SX(*),IX(*)=THE WORK ARRAYS WHICH ARE USED TO STORE THE SPARSE
%              MATRIX.  THESE ARRAYS ARE AUTOMATICALLY MAINTAINED BY
%              THE PACKAGE FOR THE USER.
%          LMX=LENGTH OF THE WORK ARRAY SX(*).
%              LMX MUST BE AT LEAST N+7 WHERE
%              FOR GREATEST EFFICIENCY LMX SHOULD BE AT LEAST N+NZ+6
%              WHERE NZ IS THE MAXIMUM NUMBER OF NONZEROES TO BE
%              STORED IN THE MATRIX.  VALUES OF LMX BETWEEN N+7 AND
%              N+NZ+6 WILL CAUSE DEMAND PAGING TO OCCUR.
%              THIS IS IMPLEMENTED BY THE PACKAGE.
%              IX(*) MUST BE DIMENSIONED AT LEAST LMX
%      IPAGEF=UNIT NUMBER WHERE DEMAND PAGES WILL BE STORED.
%
%     THIS SUBROUTINE IS A MODIFICATION OF THE SUBROUTINE LINITM,
%     SANDIA LABS. REPT. SAND78-0785.
%     MODIFICATIONS BY K.L. HIEBERT AND R.J. HANSON
%     REVISED 811130-1000
%     REVISED YYMMDD-HHMM
%
%***SEE ALSO  SPLP
%***ROUTINES CALLED  XERMSG
%***REVISION HISTORY  (YYMMDD)
%   811215  DATE WRITTEN
%   890831  Modified array declarations.  (WRB)
%   891214  Prologue converted to Version 4.0 format.  (BAB)
%   900315  CALLs to XERROR changed to CALLs to XERMSG.  (THJ)
%   900328  Added TYPE section.  (WRB)
%   910403  Updated AUTHOR and DESCRIPTION sections.  (WRB)
%***end PROLOGUE  PINITM
if isempty(zero), zero=0; end;
if isempty(one), one=0; end;
ix_shape=size(ix);ix=reshape(ix,1,[]);
if firstCall,   zero =[0.0e0];  end;
if firstCall,  one=[1.0e0];  end;
firstCall=0;
%***FIRST EXECUTABLE STATEMENT  PINITM
iopt = 1;
%
%     CHECK FOR INPUT ERRORS.
%
if( m<=0 || n<=0 )
nerr = 55;
[dumvar1,dumvar2,dumvar3,nerr,iopt]=xermsg('SLATEC','PINITM','MATRIX DIMENSION M OR N .LE. 0.',nerr,iopt);
end;
%
%     VERIFY IF VALUE OF LMX IS LARGE ENOUGH.
%
if( lmx<n+7 )
nerr = 55;
[dumvar1,dumvar2,dumvar3,nerr,iopt]=xermsg('SLATEC','PINITM','THE VALUE OF LMX IS TOO SMALL.',nerr,iopt);
end;
%
%     INITIALIZE DATA STRUCTURE INDEPENDENT VALUES.
%
sx(1) = zero;
sx(2) = zero;
sx(3) = ipagef;
ix(1) = fix(lmx);
ix(2) = fix(m);
ix(3) = fix(n);
ix(4) = 0;
sx(lmx-1) = zero;
sx(lmx) = -one;
ix(lmx-1) = -1;
lp4 = fix(n + 4);
%
%     INITIALIZE DATA STRUCTURE DEPENDENT VALUES.
%
i = 4;
n20008 = fix(lp4);
while((n20008-i)>=0 );
sx(i) = zero;
i = fix(i + 1);
end;
i = 5;
n20012 = fix(lp4);
while((n20012-i)>=0 );
ix(i) = fix(lp4);
i = fix(i + 1);
end;
sx(n+5) = zero;
ix(n+5) = 0;
ix(lmx) = 0;
%
%     INITIALIZATION COMPLETE.
%
ix_shape=zeros(ix_shape);ix_shape(:)=ix(1:numel(ix_shape));ix=ix_shape;
end %subroutine pinitm
%DECK PJAC

Contact us at files@mathworks.com