Verfasst am: 18.01.2019, 08:41
Titel: Probleme mit Output
Hallo liebe Community,
ich als Anfänger programmiere leider ziemlich umständlich und versuche mich seit kurzer Zeit es zu verbessern. Bei meinem Beispiel hab ich Probleme mit meinem Output. Ich würde gerne im Qui-Quadrat und Run-Test jeweils die Zahlen bekommen die akzeptiert oder verworfen werden.
Leider bekomme ich bei beiden Tests nur die Zahlen die akzeptiert werden und auch leider bei beiden Tests genau die gleichen Zahlen wie beim anderen, obwohl diese komplett anders berechnet werden. Kann mir bitte jemand helfen wie ich das richtig machen kann??
for i = 1:n
calc_rand = a * x0 + b;
calc_rand = mod(calc_rand, m);
x0 = calc_rand;
random_nr(i) = calc_rand/m; % to receive real random numbers we devide with m end
r = sqrt(n); % r = sqrt(n) -> so we get about 10 separate sub quantities
% parameter for chi-quadrat test
npi = n * (1/r);
probability_npi = 1/r;
class_limit_low = 0; % lower limit of a class intervall
class_limit_high = probability_npi; % upper limit of a class intervall
numbers_in_intervall = zeros(1,r); % counts the quantity of random numbers in one class
for i = 1:r
for j = 1:n
if(class_limit_low <= random_nr(j)) && (random_nr(j) < class_limit_high)% which random numbers are in which class
numbers_in_intervall(i) = numbers_in_intervall(i) + 1; % count the quantity of random numbers in one class end end
class_limit_low = class_limit_high; % for the next intervall set the lower limit of the class equal to the uppper limit % lower limit of the next class is upper limit of the class before
class_limit_high = class_limit_high+probability_npi; % the new upper limit is the old upper limit + probability of npi end
chi_quadrat = 0;
for k = 1:length(numbers_in_intervall)% from 1 to the amount of numbers in class
chi_quadrat = sum((numbers_in_intervall(k) - npi)^2)/npi; % sum of x0 = ((n-np)^2)/np end
% receive chi quadrat from the table
degrees_Of_freedom_r = r-1;
degrees_Of_freedom = degrees_Of_freedom_table(degrees_Of_freedom_r); % degrees of freedom in the table
probability = probabilities(helper_for_probability); % probability
chi_quadrat_table = chi(degrees_Of_freedom, helper_for_probability); % chi quadrat from the table
% compare the calculated chi quadrat and the qui quadrat from the table fprintf('\n');
fprintf('Ergebnis des Chi-Quadrat-Test:');
fprintf('\n');
if chi_quadrat <= chi_quadrat_table
random_nr_accepted = random_nr;
fprintf('Die angeführten Zahlen werden mit einem Signifikanzniveau von %g Prozent akzeptiert:', significance*100);
fprintf('\n');
disp(random_nr_accepted');
else fprintf('Die angeführten Zahlen werden mit einem Signifikanzniveau von %g Prozent verworfen:', significance*100);
fprintf('\n');
random_nr_rejected = random_nr;
disp(random_nr_rejectet');
end
% Run-Test
random_nr_run = random_nr; % same random numbers for the run test
counter_length = 0; % counts the length for m = 1:n-1% compare each random number with the following if random_nr_run(m) < random_nr_run(m+1)% if the following random number is bigger
counter_length = counter_length + 1; % add one to the counter else
length_run(m) = counter_length;
counter_length = 0; % we put the counter to 0 end end
max_length_run = max(length_run);
for m = 1:max_length_run
counter_runs = 0; % counter for each length is zero at the start for n = 1:length(length_run)% from 1 to length of length_run if length_run(n) == m % compare all amounts of runs and counts them togehter
counter_runs = counter_runs + 1; % add one to the counter
runs(:,m) = counter_runs; % adds all sumed up amounts of runs to a vector from 1 to max_length end end end
for o = 1:max_length_run % from 1 to max_length_run
pi_run(o) = (1/prod(1:(o))) - (1/prod(1:(o+1))); % formula P = sum((1/l!)-(1/(l+1!)))
npi_run(o) = n_run*pi_run(o);
end
chi_quadrat_run = 0;
for p = 1:max_length_run
chi_quadrat_run = chi_quadrat_run + ((runs(p) - npi_run(p))^2)/npi_run(p); % x0 = sum((((n-npi)^2)/npi) end
for x = 1:length(probabilities) if probabilities(x) == significance % when p = the significance
helper_for_probability_run = x; % this is the location for the probability end end
% compare the calculated chi quadrat for the run test and the qui quadrat from the table fprintf('\n');
fprintf('Run-Test:\n');
if chi_quadrat_run <= chi_quadrat_table_run
random_nr_run_accepted = random_nr_run;
fprintf('Die angeführten Zahlen werden mit einem Signifikanzniveau von %g Prozent akzeptiert: \n', significance);
disp(random_nr_run_accepted');
else
random_nr_run_rejected = random_nr_run;
fprintf('Die angeführten Zahlen werden mit einem Signifikanzniveau von %g Prozent verworfen: \n', significance);
disp(random_nr_run_rejected');
end
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.