Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обработка / Лаба1Отчет.docx
Скачиваний:
27
Добавлен:
08.03.2015
Размер:
283.56 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ и науки РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное агентство по образованию

Рыбинская государственная авиационная технологическая академия

имени П.А. Соловьева

Кафедра МПО ЭВС

ЛАБОРАТОРНАЯ РАБОТА №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

Введение

Одним из базовых средств имитационного моделирования является программный датчик равномерно распределенных случайных чисел (ДСЧ). От качества формируемых таким ДСЧ случайных чисел во многом зависит адекватность моделирования. Датчик подлежат обязательной проверке на соответствие равномерному закону, статистической независимости последовательности формируемых чисел, возможности формирования неповторяющейся последовательности чисел заданной длины.

В рамках данной лабораторной работы нами был разработан программный модуль для исследования датчика случайных чисел на равномерность и случайность формируемых чисел и на соответствие выборочных моментов теоретическим данным.

Соседние файлы в папке Обработка