С Новым годом! Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 206
1

Создание датчика для генерации случайных чисел методом суммы

27.05.2019, 13:50. Показов 1182. Ответов 6

Author24 — интернет-сервис помощи студентам
Добрый день! Сможете проверить, правильно ли я сделал реализацию генератора случайных чисел на основе метода суммы? Я не понял, по какой переменной надо строить гистаграмму: по x или по U, а также почему у меня не вывелись математическое ожидание, дисперсия и среднеквадратическое отклонение?

Код программы:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function random_summ(x1,a,c,m,N)
x = ones(1,N);
U = ones(1,N);
M = 0;
D = 0;
for i = 1:N
    if(i == 1)
        x(i) = x1;
    else
        x(i) = mod((a*x(i-1) + c),m);
    end
    U(i) = x(i)/m;
    M = M + U(i)/N;
end
disp(['Математическое ожидание равно ' M]);
for k = 1:N
    D = D + ((U(k) - M)^2)/(N - 1);
end
disp(['Дисперсия равна ' D]);
q = sqrt(D);
disp(['Среднеквадратическое отклонение равно ' q]);
subplot(2,1,1);
hist(x,N);
subplot(2,1,2);
hist(U,N);
Результат программы:
Matlab M
1
2
3
4
random_summ(3,8,3,47021,100);
Математическое ожидание равно  
Дисперсия равна  
Среднеквадратическое отклонение равно
Миниатюры
Создание датчика для генерации случайных чисел методом суммы   Создание датчика для генерации случайных чисел методом суммы   Создание датчика для генерации случайных чисел методом суммы  

Создание датчика для генерации случайных чисел методом суммы   Создание датчика для генерации случайных чисел методом суммы   Создание датчика для генерации случайных чисел методом суммы  

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.05.2019, 13:50
Ответы с готовыми решениями:

Создание датчиков для генерации случайных чисел по экспоненциальному и показательному закону распределения
Добрый вечер! Я пишу алгоритмы генерации случайных чисел для экспоненциального и показательного...

Форматирование файла целых чисел, полученных с помощью датчика случайных чисел, нахождение контрольной суммы
Помогите пожалуйста решить, и распишите каждую строчку (т.е что тут сделано) Составить...

Средства для генерации случайных чисел
В Си было удобно подключить рандомные числа. через randomize(); a=random(10)-5; В Си++ кроме...

Формула для генерации случайных чисел заданного диапазона
srand(time(NULL)); int massize = 3; int mas; for (int i = 0; i < massize; i++) { for (int b...

6
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 206
27.05.2019, 19:38  [ТС] 2
Теперь я написал метод произведения, но я все равно не понял:
1) По какой переменной надо строить гистограмму - по x или по U?
2) Как в операторе вывода сложить строку и число, чтобы вывести вероятностные характеристики полученного массива чисел (математическое ожидание, дисперсия, среднеквадратическое отклонение)?
Про функцию strcat я знаю, но проблема в том, что она "обрезает" пробелы. Остался вариант типа [str1 str2] или [str1, str2]. Но я не знаю, нужно ли строки разделять запятой и складываются ли они с числами? Вывелась только строка, но численную величину я не увидел.

Код программы:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function random_multiple(x1,m,N)
x = ones(1,N);
U = ones(1,N);
M = 0;
D = 0;
for i = 1:N
    if(i == 1)
        x(i) = x1;
    else
        x(i) = mod((x1*x(i-1)),m);
    end
    U(i) = x(i)/m;
    M = M + U(i)/N;
end
disp(['Математическое ожидание равно ' M]);
for k = 1:N
    D = D + ((U(k) - M)^2)/(N - 1);
end
disp(['Дисперсия равна ' D]);
q = sqrt(D);
disp(['Среднеквадратическое отклонение равно ' q]);
subplot(2,1,1);
hist(x,N);
subplot(2,1,2);
hist(U,N);
Результат:
Matlab M
1
2
3
4
random_multiple(3,14236,100);
Математическое ожидание равно  
Дисперсия равна  
Среднеквадратическое отклонение равно
Миниатюры
Создание датчика для генерации случайных чисел методом суммы  
0
Эксперт по математике/физике
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
28.05.2019, 07:38 3
Цитата Сообщение от БузинВладимир Посмотреть сообщение
Сможете проверить, правильно ли я сделал реализацию генератора случайных чисел
А неужели самому не видно, что результат Вы получаете целые числа от 0 до 4, а надо чтобы получались числа с плавающей точкой от 0 до 1.
0
Модератор
1747 / 1593 / 532
Регистрация: 13.09.2015
Сообщений: 5,541
28.05.2019, 16:59 4
Цитата Сообщение от БузинВладимир Посмотреть сообщение
Как в операторе вывода сложить строку и число
Нужно число преобразовать в строку командой num2str.
БузинВладимир, лучше сразу задать x(1)=x1, а цикл начинать с 2, чтобы не использовать условие if, так как оно будет проверяться при каждой итерации, что снизит скорость работы. Вычисление значений U и M тоже целесообразно вынести за пределы цикла, написав
Matlab M
1
2
U=x/m;
M=sum(U)/N;
Цитата Сообщение от SSC Посмотреть сообщение
А неужели самому не видно, что результат Вы получаете целые числа от 0 до 4, а надо чтобы получались числа с плавающей точкой от 0 до 1.
Там и получаются числа от 0 до 1 (нижний график). По оси Y показано количество чисел, попавших в интервал.
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 206
29.05.2019, 20:47  [ТС] 5
Выкладываю новые правки кода, но мне не понятны следующие моменты:
1) До скольки знаков после запятой нужно округлить математическое ожидание, дисперсию и среднеквадратическое отклонение при преобразовании их в строки?
2) По какой переменной нужно строить гистограмму:
- по переменной x для числа испытаний N;

Matlab M
1
hist(x,N);
- по переменной U для числа испытаний N;

Matlab M
1
hist(U,N);
- по переменной x в диапазоне значений переменной U?

Matlab M
1
2
U = x/m;
hist(x, U);
3) Как (по каким формулам и для какой переменной) рассчитать S, t и "тетта" для автокорреляционной функции? Какую переменную x или U надо окружить функциями time start() и time stop(), чтобы узнать время её расчёта?

Функция для метода суммы:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function random_summ(x1,a,c,m,N)
x = ones(1,N);
U = ones(1,N);
M = 0;
D = 0;
x(1) = x1;
for i = 2:N
    x(i) = mod((a*x(i-1) + c),m);
end
U=x/m;
M=sum(U)/N;
disp(['Математическое ожидание равно ' num2str(M)]);
for k = 1:N
    D = D + ((U(k) - M)^2)/(N - 1);
end
disp(['Дисперсия равна ' num2str(D)]);
q = sqrt(D);
disp(['Среднеквадратическое отклонение равно ' num2str(q)]);
subplot(2,1,1);
hist(x,N);
subplot(2,1,2);
hist(U,N);
Функция для метода произведения:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function random_multiple(x1,m,N)
x = ones(1,N);
U = ones(1,N);
M = 0;
D = 0;
x(1) = x1;
for i = 2:N
    x(i) = mod((x1*x(i-1)),m);
end
U=x/m;
M=sum(U)/N;
disp(['Математическое ожидание равно ' num2str(M)]);
for k = 1:N
    D = D + ((U(k) - M)^2)/(N - 1);
end
disp(['Дисперсия равна ' num2str(D)]);
q = sqrt(D);
disp(['Среднеквадратическое отклонение равно ' num2str(q)]);
subplot(2,1,1);
hist(x,N);
subplot(2,1,2);
hist(U,N);
Результат:
Matlab M
1
2
3
4
5
6
7
8
>> random_summ(3,8,3,47021,100);
Математическое ожидание равно 0.42284
Дисперсия равна 0.090676
Среднеквадратическое отклонение равно 0.30113
>> random_multiple(3,14236,100);
Математическое ожидание равно 0.46397
Дисперсия равна 0.09616
Среднеквадратическое отклонение равно 0.3101
Миниатюры
Создание датчика для генерации случайных чисел методом суммы   Создание датчика для генерации случайных чисел методом суммы   Создание датчика для генерации случайных чисел методом суммы  

0
Эксперт по математике/физике
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
30.05.2019, 14:22 6
Цитата Сообщение от БузинВладимир Посмотреть сообщение
По какой переменной нужно строить гистограмму:
Чувствую какую-то фигню рисуете. Особенно hist(x,N)
Может так больше физического смысла будет
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
disp(['Дисперсия равна ' num2str(D)]);
q = sqrt(D);
disp(['Среднеквадратическое отклонение равно ' num2str(q)]);
subplot(2,1,1);
plot(1:N,U,'o-');
%hist(x,N);
subplot(2,1,2);
hist(U,floor(sqrt(N)));
grid on
 
figure
dx=0.1;
Dx=0:dx:1;
[N1,XX]=histc(U,Dx);
N1=N1/(N*dx);
hb0=bar(Dx,N1,'histc');
ylabel('Вероятность, о.е.');
xlabel('Диапазоны');
grid on
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 206
02.06.2019, 22:00  [ТС] 7
Я переписал все 4 функции, но у меня опять возникли вопросы:
1) Какую автокорреляционную функцию использовать - autocorr, xcorr или linespace, - для какой переменной - x или y и с каким значением во втором параметре - N, N-1 или вообще без него?
2) какой график нужно строить для автокорреляционной функции - hist(AutoCorr,N) или plot(N,AutoCorr)?
3) Нужно ли рассчитывать математическое ожидание, дисперсию и среднеквадратическое отклонение для величины x, имеющей показательный или экспоненциальный закон распределения и полученной из величины U с равномерным законом путём нелинейного преобразования, или формулы 1-5, 1-6 и 1-7 справедливы только для величины U с равномерным законом?
Сможете довести до ума мои алгоритмы? Моя мама даст столько, сколько Вам нужно. Или хотя бы посмотрите и укажите ошибки в моих программах и скажите, в какой строке что исправить.
Функция для метода суммы
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function U = random_summ(x1,a,c,m,N) 
x = ones(1,N); 
x(1) = x1; 
for i = 2:N 
x(i) = mod((a*x(i-1) + c),m); 
end 
U=x/m; 
M=mean(U); 
disp(['Математическое ожидание равно ' num2str(M)]); 
D = sum((U - M).^2)/(N - 1); 
disp(['Дисперсия равна ' num2str(D)]); 
q = sqrt(D); 
disp(['Среднеквадратическое отклонение равно ' num2str(q)]); 
AutoCorr = autocorr(U,N-1); 
subplot(2,1,1); 
hist(U,N); 
title('Случайная величина U'); 
subplot(2,1,2); 
hist(AutoCorr,N); 
title('Автокорреляционная функция autocorr()');

Функция для метода произведения
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function U = random_multiple(x1,m,N) 
x = ones(1,N); 
x(1) = x1; 
for i = 2:N 
x(i) = mod((x1*x(i-1)),m); 
end 
U=x/m; 
M=mean(U); 
disp(['Математическое ожидание равно ' num2str(M)]); 
D = sum((U - M).^2)/(N - 1); 
disp(['Дисперсия равна ' num2str(D)]); 
q = sqrt(D); 
disp(['Среднеквадратическое отклонение равно ' num2str(q)]); 
AutoCorr = autocorr(U,N-1); 
subplot(2,1,1); 
hist(U,N); 
title('Случайная величина U'); 
subplot(2,1,2); 
hist(AutoCorr,N); 
title('Автокорреляционная функция autocorr()');

Функция для экспоненциального закона
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function random_exp(k,N) 
U = random_summ(3,8,3,47021,N); 
x = (-k)*log(1 - U); 
M_0 = 1/k; 
disp(['Математическое ожидание теоретически равно ' num2str(M_0)]); 
M_x=mean(U); 
disp(['Математическое ожидание для случайной величины с экспоненциальным законом распределения равно ' num2str(M_x)]); 
D_x = sum((x - M_x).^2)/(N - 1); 
disp(['Дисперсия для случайной величины с экспоненциальным законом распределения равна ' num2str(D_x)]); 
q_x = sqrt(D_x); 
disp(['Среднеквадратическое отклонение для случайной величины с экспоненциальным законом распределения равно ' num2str(q_x)]); 
AutoCorr = autocorr(x,N-1); 
subplot(2,1,1); 
hist(x,N); 
title('Случайная величина x'); 
subplot(2,1,2); 
hist(AutoCorr,N); 
title('Автокорреляционная функция autocorr()');

Функция для показательного закона
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function random_pokaz(k,N) 
U = random_summ(3,8,3,47021,N); 
x = (-log(1 - U))/k; 
M_0 = 1/k; 
disp(['Математическое ожидание теоретически равно ' num2str(M_0)]); 
M_x=mean(U); 
disp(['Математическое ожидание для случайной величины с показательным законом распределения равно ' num2str(M_x)]); 
D_x = sum((x - M_x).^2)/(N - 1); 
disp(['Дисперсия для случайной величины с показательным законом распределения равна ' num2str(D_x)]); 
q_x = sqrt(D_x); 
disp(['Среднеквадратическое отклонение для случайной величины с показательным законом распределения равно ' num2str(q_x)]); 
AutoCorr = autocorr(x,N-1); 
subplot(2,1,1); 
hist(x,N); 
title('Случайная величина x'); 
subplot(2,1,2); 
hist(AutoCorr,N); 
title('Автокорреляционная функция autocorr()');

Результат
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
a = random_summ(3,8,3,47021,100); 
Математическое ожидание равно 0.42284 
Дисперсия равна 0.090676 
Среднеквадратическое отклонение равно 0.30113 
» b = random_multiple(3,14236,100); 
Математическое ожидание равно 0.46397 
Дисперсия равна 0.09616 
Среднеквадратическое отклонение равно 0.3101 
» random_exp(1,500); 
Математическое ожидание равно 0.50092 
Дисперсия равна 0.089141 
Среднеквадратическое отклонение равно 0.29857 
Математическое ожидание теоретически равно 1 
Математическое ожидание для случайной величины с экспоненциальным законом распределения равно 0.50092 
Дисперсия для случайной величины с экспоненциальным законом распределения равна 1.3399 
Среднеквадратическое отклонение для случайной величины с экспоненциальным законом распределения равно 1.1575 
» random_pokaz(1,500); 
Математическое ожидание равно 0.50092 
Дисперсия равна 0.089141 
Среднеквадратическое отклонение равно 0.29857 
Математическое ожидание теоретически равно 1 
Математическое ожидание для случайной величины с показательным законом распределения равно 0.50092 
Дисперсия для случайной величины с показательным законом распределения равна 1.3399 
Среднеквадратическое отклонение для случайной величины с показательным законом распределения равно 1.1575

Вот изображения:
Миниатюры
Создание датчика для генерации случайных чисел методом суммы   Создание датчика для генерации случайных чисел методом суммы   Создание датчика для генерации случайных чисел методом суммы  

Создание датчика для генерации случайных чисел методом суммы  
0
02.06.2019, 22:00
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.06.2019, 22:00
Помогаю со студенческими работами здесь

Реализовать алгоритм средних квадратов для генерации случайных чисел
Помогите пожалуйста написать задачу на паскале для реализации алгоритма средних квадратов для...

Реализовать алгоритм средних квадратов для генерации случайных чисел
Помогите написать программу: "Реализовать алгоритм средних квадратов для генерации случайных...

Нужен скрипт для генерации случайных чисел в заданном диапазоне значений
Итак, нужен скрипт который бы записывал в строчку в файл N кол-во случайных чисел в диапазоне от A...

С помощью датчика случайных чисел получить 30 целых чисел, лежащих в диапазоне от 0 до 5
Здраствуйте! С помощью датчика случайных чисел получить 30 целых чисел, лежащих в диапазоне от 0 до...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru