Code covered by the BSD License  

Highlights from
slatec

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

[lun,kprint,ipass]=cprpqx(lun,kprint,ipass);
function [lun,kprint,ipass]=cprpqx(lun,kprint,ipass);
persistent a ac err erri firstCall i id ideg idegp1 info j relerr w z zk ; if isempty(firstCall),firstCall=1;end; 

if isempty(ideg), ideg=0; end;
if isempty(idegp1), idegp1=0; end;
if isempty(info), info=0; end;
if isempty(i), i=0; end;
if isempty(j), j=0; end;
if isempty(id), id=0; end;
if isempty(a), a=zeros(1,6); end;
if isempty(err), err=0; end;
if isempty(erri), erri=0; end;
if isempty(relerr), relerr=0; end;
if isempty(ac), ac=zeros(1,6); end;
if isempty(z), z=zeros(1,5); end;
if isempty(zk), zk=zeros(1,5); end;
if isempty(w), w=zeros(1,21); end;
if firstCall,   ideg=[5];  end;
if firstCall,   a=[1.,-3.7,7.4,-10.8,10.8,-6.8];  end;
if firstCall,   zk=[complex(1.7,0.),complex(1.,1.),complex(1.,-1.),complex(0.,1.4142135623730950488),complex(0.,-1.4142135623730950488)];  end;
firstCall=0;
ipass = 1;
idegp1 = fix(ideg + 1);
relerr = sqrt(r1mach(4));
for j = 1 : idegp1;
ac(j) = complex(a(j),0.);
end; j = fix(idegp1+1);
info = 0;
[ideg,ac,z,dumvar4,info,w]=cpzero(ideg,ac,z,w(sub2ind(size(w),max(4,1)):end),info,w);   dumvar4i=find((w(sub2ind(size(w),max(4,1)):end))~=(dumvar4));   w(4-1+dumvar4i)=dumvar4(dumvar4i); 
if( info~=0 )
ipass = 0;
if( info==1 && kprint>=1 )
writef(lun,[' CPZERO TEST FAILS: LEADING COEFFICIENT OR DEGREE OF',' POLYNOMIAL IS ZERO' ' \n']);
end;
%format (' CPZERO TEST FAILS: LEADING COEFFICIENT OR DEGREE OF',' POLYNOMIAL IS ZERO');
if( info==2 && kprint>=1 )
writef(lun,[' CPZERO TEST FAILS: NON-CONVERGENCE IN 125 ITERATIONS' ' \n']);
end;
%format (' CPZERO TEST FAILS: NON-CONVERGENCE IN 125 ITERATIONS');
end;
for j = 1 : ideg;
err = abs(z(j)-zk(1));
id = 1;
for i = 2 : ideg;
erri = abs(z(j)-zk(i));
if( erri<err )
id = fix(i);
end;
err = min(erri,err);
end; i = fix(ideg+1);
if( abs(z(j)-zk(id))./abs(zk(id))>=relerr )
ipass = 0;
end;
end; j = fix(ideg+1);
info = 0;
[ideg,a,z,dumvar4,info,w]=rpzero(ideg,a,z,w(sub2ind(size(w),max(4,1)):end),info,w);   dumvar4i=find((w(sub2ind(size(w),max(4,1)):end))~=(dumvar4));   w(4-1+dumvar4i)=dumvar4(dumvar4i); 
if( info~=0 )
ipass = 0;
if( info==1 && kprint>=1 )
writef(lun,[' RPZERO TEST FAILS: LEADING COEFFICIENT OR DEGREE OF',' POLYNOMIAL IS ZERO' ' \n']);
end;
%format (' RPZERO TEST FAILS: LEADING COEFFICIENT OR DEGREE OF',' POLYNOMIAL IS ZERO');
if( info==2 && kprint>=1 )
writef(lun,[' RPZERO TEST FAILS: NON-CONVERGENCE IN 125 ITERATIONS' ' \n']);
end;
%format (' RPZERO TEST FAILS: NON-CONVERGENCE IN 125 ITERATIONS');
end;
for j = 1 : ideg;
err = abs(z(j)-zk(1));
id = 1;
for i = 2 : ideg;
erri = abs(z(j)-zk(i));
if( erri<err )
id = fix(i);
end;
err = min(erri,err);
end; i = fix(ideg+1);
if( abs(z(j)-zk(id))./abs(zk(id))>=relerr )
ipass = 0;
end;
end; j = fix(ideg+1);
if( kprint>=2 && ipass~=0 )
writef(lun,[' CPRPQX PASSES ALL TESTS.' ' \n']);
end;
%format (' CPRPQX PASSES ALL TESTS.');
if( kprint>=1 && ipass==0 )
writef(lun,[' CPRPQX FAILS SOME TESTS.' ' \n']);
end;
%format (' CPRPQX FAILS SOME TESTS.');
return;
end %subroutine cprpqx

Contact us at files@mathworks.com