help-octave
[Top][All Lists]

## Program gives floating point exception with Octave, not in MATLAB

 From: 0000-Admin(0000) Subject: Program gives floating point exception with Octave, not in MATLAB Date: Wed, 16 Jul 1997 09:53:38 +0800

```In trying to run the script included below on an DEC AlphaStation, we
get the following error:

maximum number of iterations ---> [20,000]
Error e ---> [1.e-01]
dimension d ---> [100]
number of patterns n ---> [10]

The error occurs in different runs --- sometimes 6, sometimes 9. It
doesn't happen when using MATLAB.

Nmax = input('maximum number of iterations ---> [20,000]');
if (isempty(Nmax)), Nmax = 20000; end

sfalma = input('Error e ---> [1.e-01]');
if (isempty(sfalma)), sfalma = 1.e-05; end

d = input('dimension d ---> [100]');
if (isempty(d)), d = 100; end

n = input('number of patterns n ---> [10]');
if (isempty(n)), n = 110; end

s=.5;

for index=11:14

disp(index)
fid=fopen("data.txt", "a+")

d=100;
sfalma = 1.e-05;
max = 20000;
npatt = 50*n;
Wk = zeros(d+1,1);
gk = zeros(d+1,1);
dk = zeros(d+1,1);
Y  = zeros(2*npatt,1);
M  = zeros(2*npatt,d+1);
TS = zeros(2*n,d+1);
Q  = zeros(2*npatt,1);
Qt = zeros(2*npatt,1);
sump=0;
sumn=0;
sumt=0;

for runs = 1:10
disp(runs)

falsepos = 0;
falseneg = 0;
Wk = randn(d+1,1)/100;
TS = randn(2*n,d+1);
TS(:,d+1)=ones(2*n,1);

%m1=mean(TS);
%m1(d+1)=-m1*m1'/2;

T  = ones(2*npatt,1);

for i=1:npatt

k = 2*i-1;
if ( k < 2*n)
M(k,:) = TS(k,:);
else
k = rem(k,2*n);
M(2*i-1,:) = TS(k,:);
endif

M(2*i,:) = randn(1,d+1);
T(2*i)   = -1;
endfor

M(:,d+1) = ones(2*npatt,1);

%C = T'*M;
%B = T'*T;
%fk = B - 2*Wk'*C' + Q'*Q;

% Initial Conditions

Q = M*Wk;
Qp= (2./s)*exp(-Q./s)./(1+exp(-Q./s));
Q = (2./(1+exp(-Q./s))-1);
Qt = Qp.*(Q-T);
gk = M'*Qt;
dk = -gk;
Q2 = M*dk;
ak = -(gk'*dk)/(Q2'*Q2);

%Conjugate Algorithm

m = 2;
stop_count = 0;
er=100;
while (m<Nmax & stop_count~=1)
% disp(m)
m = m+1;
Wk = Wk + ak*dk;
Q = M*Wk;
Qp= (2./s)*exp(-Q./s)./(1+exp(-Q./s));
Q = (2./(1+exp(-Q./s))-1);
gk_1 = gk;
Qt = Qp.*(Q-T);
gk = M'*Qt;
%      Q3 = M*gk;
bk = (gk'*(gk-gk_1))/(gk_1'*gk_1);
%     bk = (Q3'*Q2)/(Q2'*Q2);
dk = -gk + bk*dk;
Q2 = M*dk;
ak = -(gk'*dk)/(Q2'*Q2);
er_1=er;
er = sqrt(norm(Q-T)^2/norm(T)^2);
if (er<sfalma | abs(er-er_1)< 1.e-05)
%      er = max(abs(gk));
%      if (er<sfalma)
stop_count = 1;

endif
endwhile

Y = M*Wk;
%Y1= M*m1';

for k=1:2*npatt

if (Y(k) > 0)
if (rem(k,2)==0)
falsepos = falsepos + 1;
endif
endif
if (Y(k) < 0)
if (rem(k,2)~=0)
falseneg = falseneg + 1;
endif
endif
endfor

ppos = falsepos*100/npatt;
sumn = sumn + falseneg*100/npatt;

ntimes = 2;
sum=0;
m=1000;
for k = 1:ntimes

Mr = randn(m,d);
Mr(:,d+1) = ones(m,1);
Yr = Mr*Wk;
fpos = 0;

for i = 1:m
if (Yr(i) > 0)
fpos = fpos + 1;
endif
endfor

sum = sum  + fpos;

endfor

averfpos = sum/ntimes;
ptest =  averfpos*100/m;

sump = sump + (ppos+ptest)/2;

endfor

Epos(index) = sump/runs;
Eneg(index) = sumn/runs;
Etotal(index) = (Epos(index)+Eneg(index))/2;
Erra(index) = .5*(1-erf(.5*sqrt(d/n)));

%Conerror(index) = (Y-T)'*(Y-T);
%Perror(index) = (Y1-T)'*(Y1-T);
%fprintf(fid,'%8.4 %8.4\n',percent1,percent2);

fprintf(fid,"%5d %12.6f %12.6f %12.6f
%12.6f\n",n,Epos(index),Eneg(index),Etotal(index),Erra(index))
fclose(fid)
n=n+10;
save data n fid
clear
end

%%%%%%%%%%%%%%%        PLOTS        %%%%%%%%%%%%%%%%%%%%

%Eneg
%Epost
%Etotal
%Conerror
%Perror
%n=[50:10:140];
%plot(n,Eneg)
%hold on
%plot(n,Epost)
%plot(n,Etotal)
%xlabel('Number of Patterns')
%ylabel('Errors')
%title('Error curves for d=100. up:Falsepositives, down:Falesnegatives, Total
Error')
%cd PLOTS
%print -dmfile Errors100sigmoid05.m
%hold off
%plot(n,Erra*100)
%hold on
%plot(n,Erra*100,'*')
%plot(n,Etotal)
%xlabel('Number of Patterns')
%ylabel('Total Errors')
%title('Total Error curves for d=100. *:Analytical, -:Experimental')
%print -dmfile TErrors100sigmoid05.m
%hold off
%plot(n,Conerror)
%hold on
%plot(n,Perror)
%plot(n,Perror,'*')
%xlabel('Number of Patterns')
%title('Quadratic Error curves for d=100. *:Plane Error, -:Experimental')
%print -dmfile Equatratic100b.m
%print  Equatratic100
%cd ..

```