МИНИСТЕРСТВО ОБРАЗОВАНИЯ и науки РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное агентство по образованию
Рыбинская государственная авиационная технологическая академия
имени П.А. Соловьева
Кафедра МПО ЭВС
ЛАБОРАТОРНАЯ РАБОТА №1
по курсу: «Обработка экспериментальных данных»
Вариант № 5
на тему:
«ОЦЕНКА ПОКАЗАТЕЛЕЙ КАЧЕСТВА ОБЪЕКТА ПО РЕЗУЛЬТАТАМ ЭКСПЕРИМЕНТОВ »
Студенты гр. ИВП-09 Смирнов Н. Н.
Цветков Н.С.
Преподаватель: Задорина н. А.
Рыбинск 2012
Содержание
Введение 6
1 Теоретическая часть 7
2 Экспериментальная часть 9
3 Текст процедур расчета 13
require "gsl" 13
require "Qt" 13
puts "zlab in console!" 13
class TestRandom 13
def initialize (realization_size = :small, histogram_bins_count = [[7],[7,7],[7,7,7]], range = 0.0..1.0, k = 4) 13
@histogram_bins_count = histogram_bins_count 13
@general_range = range 13
@k = k 13
case realization_size 13
when :small 13
@elements_count_factor = Random.rand(7..10) 13
when :medium 13
@elements_count_factor = Random.rand(30..90) 13
when :large 13
@elements_count_factor = Random.rand(300..900) 13
end 13
random_generators = [Random.new, Random.new, Random.new] 13
13
@arrays_sizes = Array.new() 13
@arrays_sizes << @elements_count_factor * @histogram_bins_count[0][0] 13
@arrays_sizes << @elements_count_factor * @histogram_bins_count[1][0] * @histogram_bins_count[1][1] 13
@arrays_sizes << @elements_count_factor * @histogram_bins_count[2][0] * @histogram_bins_count[2][1] * @histogram_bins_count[2][2] 13
13
@raw_random_data_arrays = Array.new 13
@raw_random_data_arrays << [Array.new] 13
@raw_random_data_arrays << [Array.new, Array.new] 13
@raw_random_data_arrays << [Array.new, Array.new, Array.new] 13
13
@arrays_sizes[0].to_i.downto(0) do |number| 13
@raw_random_data_arrays[0][0] << random_generators[0].rand(range) 13
end 13
13
@arrays_sizes[1].to_i.downto(0) do |number| 13
@raw_random_data_arrays[1][0] << random_generators[0].rand(range) 13
@raw_random_data_arrays[1][1] << random_generators[1].rand(range) 13
end 13
13
@arrays_sizes[2].to_i.downto(0) do |number| 13
@raw_random_data_arrays[2][0] << random_generators[0].rand(range) 14
@raw_random_data_arrays[2][1] << random_generators[1].rand(range) 14
@raw_random_data_arrays[2][2] << random_generators[2].rand(range) 14
end 14
14
@histogram_1d = GSL::Histogram.alloc(@histogram_bins_count[0][0], [range.begin, range.end]) 14
@histogram_2d = GSL::Histogram2d.alloc(@histogram_bins_count[1][0], [range.begin, range.end], @histogram_bins_count[1][1], [range.begin, range.end]) 14
@histogram_3d = GSL::Histogram3d.alloc(@histogram_bins_count[2][0], [range.begin, range.end], @histogram_bins_count[2][1], [range.begin, range.end], @histogram_bins_count[2][2], [range.begin, range.end]) 14
14
@arrays_sizes[0].downto (0) do |array_index| 14
@histogram_1d.increment(@raw_random_data_arrays[0][0][array_index] ) 14
end 14
@arrays_sizes[1].downto (0) do |array_index| 14
@histogram_2d.increment @raw_random_data_arrays[1][0][array_index],@raw_random_data_arrays[1][1][array_index] 14
end 14
@arrays_sizes[2].downto (0) do |array_index| 14
@histogram_3d.increment @raw_random_data_arrays[2][0][array_index], @raw_random_data_arrays[2][1][array_index], @raw_random_data_arrays[2][2][array_index] 14
end 14
end 14
def uniformity 14
puts "Uniformity check:" 14
puts "chi_square:", chi_square_1d 14
puts "autocorellation", autocorellation_1d 14
#puts get_1d_sigma 14
end 14
def uniform_distribution_probability_in range 14
(1.0/(@general_range.end - @general_range.begin))*(range.end - range.begin) 14
end 14
def chi_square_1d 14
chi_square = 0 14
0.upto (@histogram_1d.bins - 1) do |bin_number| 14
bin_bounds = @histogram_1d.get_range(bin_number) 14
f_i = ((@arrays_sizes[0] + 1) * (uniform_distribution_probability_in Range.new(bin_bounds[0], bin_bounds[1]))) 14
#puts @histogram_1d.get_range(bin_number) 14
#puts @histogram_1d[bin_number] 14
#puts bin_number 14
chi_square += ((@histogram_1d[bin_number] - f_i ) ** 2)/f_i 14
end 15
chi_square 15
end 15
def get_1d_mean 15
result = 0 15
@raw_random_data_arrays[0][0].each do |item| 15
result += item 15
end 15
result /= @raw_random_data_arrays[0][0].count.to_f 15
end 15
def get_1d_sigma 15
sum1 , sum2 = 0 , 0 15
@raw_random_data_arrays[0][0].each do |item| 15
sum1 += item ** 2 15
sum2 += item 15
end 15
sum1 = sum1.to_f/@raw_random_data_arrays[0][0].count 15
sum2 = sum2.to_f/@raw_random_data_arrays[0][0].count 15
sum2 = sum2 ** 2 15
sum1 - sum2 15
end 15
def autocorellation_1d 15
autocorellation = 0 15
sigma = get_1d_sigma 15
0.upto(@raw_random_data_arrays[0][0].count - 1 - @k) do |index| 15
autocorellation += (@raw_random_data_arrays[0][0][index] - 0.5)*(@raw_random_data_arrays[0][0][index+@k] - 0.5)/(@raw_random_data_arrays[0][0].count - @k).to_f 15
end 15
autocorellation /= sigma.to_f 15
end 15
def sample_moments 15
result = Array.new 15
orders = 4 15
1.upto(orders) do |index| 15
puts "order "+index.to_s 15
a_moment = 0 15
m_moment = 0 15
mean = get_1d_mean 15
@raw_random_data_arrays[0][0].each do |item| 15
a_moment += item ** index 15
m_moment += (item - mean) ** index 15
end 15
result << [a_moment, m_moment] 15
puts "a: ", a_moment /= @raw_random_data_arrays[0][0].count 15
puts "mu: ", m_moment /= @raw_random_data_arrays[0][0].count 16
end 16
result 16
end 16
def plots 16
GSL::graph(@histogram_1d, "-T X -C -g 3") 16
h2x = @histogram_2d.xproject 16
h2y = @histogram_2d.yproject 16
#printf("%f %f %f %f\n", h2.xsigma, h2.ysigma, hx.sigma, hy.sigma) 16
GSL::graph(h2x, h2y, "-T X -C -g 3") 16
h3xy = @histogram_3d.xyproject 16
h31 = h3xy.xproject 16
h32 = h3xy.yproject 16
h3xz = @histogram_3d.xzproject 16
h33 = h3xz.yproject 16
#printf("%f %f %f %f\n", h2.xsigma, h2.ysigma, hx.sigma, hy.sigma) 16
GSL::graph(h31, h32, h33, "-T X -C -g 3") 16
16
#GSL::graph(hx, hy, "-T X -C -g 3") 16
end 16
end 16
obj = TestRandom.new(:small) 16
obj.uniformity 16
obj.sample_moments 16
obj.plots 16
Вывод 16
Введение
Одним из базовых средств имитационного моделирования является программный датчик равномерно распределенных случайных чисел (ДСЧ). От качества формируемых таким ДСЧ случайных чисел во многом зависит адекватность моделирования. Датчик подлежат обязательной проверке на соответствие равномерному закону, статистической независимости последовательности формируемых чисел, возможности формирования неповторяющейся последовательности чисел заданной длины.
В рамках данной лабораторной работы нами был разработан программный модуль для исследования датчика случайных чисел на равномерность и случайность формируемых чисел и на соответствие выборочных моментов теоретическим данным.