%%% File Name : rnn_gen_test_exact.m %%% %%% Outputs %%% %%% qqq_out : The vector resulted from the test %%% %%% i_out : Number of iterations needed for convergence %%% %%% qqq_array_out : Matrix that contains the intermediate resulted vectors %%% Inputs %%% %%% Probe_in : The the input probe vector %%% %%% Display_in : = 1 for displaying intermediate results %%% %%% dis : convergence stopping crieteria %%% %%% Date : September, 1, 1999 %%% %%% Author : Hossam Eldin Mostafa Abdelbaki %%% %%% Address : University of Central Florida, %%% %%% : School of Computer Science %%% %%% Email : ahossam@cs.ucf.edu %%% %%% Home Page : http://www.cs.ucf.edu/~ahossam/ %%% %%% Help : read the manual file (rnnsimv2.pdf) %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [qqq_out,i_out,qqq_out_array_out] = rnn_gen_test_exact(Probe_in,Num_Iter_in,Display_in,dis) global wplus wminus r global LAMBDA lambda; global N_Total qqq_out; global Res distance; distance = dis; Res = .0001; i_out = 0; LAMBDA = []; lambda = []; prepare_test_patterns(Probe_in); for i = 1:Num_Iter_in qqq_out = solve_nonlinear_equations; if(nargout == 3) qqq_out_array_out(i,:) = qqq_out; end if(nargout >= 2) flag1 = check_equal; if(flag1 == 0) i_out = i; return end end if(Display_in == 1) show_output(i); end LAMBDA = qqq_out; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%% Begin calculate_exact_output %%%%%%%%%%%%%%%%%%%%%% function q_result = solve_nonlinear_equations global wplus wminus; global r; global N_Total; global LAMBDA lambda Res; lambda_minus = .5*ones(size(LAMBDA)); %lambda_minus = [.1 .1 .1 .1 .1]; for i = 1:N_Total for j = 1:N_Total Pplus(i,j) = wplus(i,j)/r(i); Pminus(i,j) = wminus(i,j)/r(i); end end for llll = 1:200 for i = 1:N_Total for j = 1:N_Total if(i == j) F(i,j) = r(i)/(r(i) + lambda_minus(i)); else F(i,j)=0; end end end lambda_plus = LAMBDA*inv(eye(N_Total,N_Total)-F*Pplus); G = lambda_plus*F*Pminus + lambda; % abs(lambda_minus - G) % llll % pause iii = 0; for ll = 1:length(lambda_minus) if(abs(lambda_minus(i) - G(i)) > .001 | lambda_minus(i) < 0) iii = iii + 1; end end if(iii > 0) lambda_minus = G; else break; end end for i = 1:N_Total for j = 1:N_Total if(i == j) F(i,j) = r(i)/(r(i) + lambda_minus(i)); end if(i ~= j) F(i,j)=0; end end end lambda_plus = LAMBDA*inv(eye(N_Total,N_Total)-F*Pplus); for i = 1:N_Total q(i) = lambda_plus(i)/(r(i)+lambda_minus(i)); if q(i) > 1 q(i) = 1; end if(q(i) < 0) q(i) = 0; end % D(i) = lambda_minus(i)+r(i); end q_result = q; %%%%%%%%%%%%%%%%%%%%% end solve_nonlinear_equations %%%%%%%%%%%%%%%%%%%%%%%% %%%%% Begin Function prepare_test_patterns %%%%%%%%%%%%%%%%%%%%%%%% function prepare_test_patterns(W) global LAMBDA lambda N_Total sz = size(W); N_Test_Patterns = sz(1); N_Total = sz(2); N_Input = N_Total ; Applied_lambda = zeros(N_Test_Patterns ,N_Input); Applied_LAMBDA = zeros(N_Test_Patterns ,N_Input); for j = 1:N_Input if (W(j) >= 0) Applied_LAMBDA(j) = W(j); % Applied_lambda(j)= .1; elseif(W(j) <0) Applied_lambda(j)= -W(j); % Applied_LAMBDA(j) = .1; end end for i = 1:N_Input LAMBDA(i) = Applied_LAMBDA(i) ; lambda(i) = Applied_lambda(i) ; end %%%%%%%% End Function prepare_test_patterns %%%%%%%%%%%%%% %%%%%%% Function show_output %%%%%%%%%%%%%%%%%%%%%%%%%%%%% function show_output(pp) global qqq_out; mess1 = sprintf(' Iteration No. %d\n',pp); disp(mess1); disp(qqq_out) pause %%%%%%%% end show_output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function aa = check_equal global LAMBDA qqq_out distance aa = 0; %for kk=1:length(qqq_out) % if(abs(qqq_out(kk) - LAMBDA(kk)) > 0.0001) % aa = aa + 1; % return % end %end if(norm(qqq_out - LAMBDA) > distance) aa = aa +1; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%