- •Основы алгоритмизации и языки программирования Учебно-методическое пособие
- •Содержание
- •Лабораторная работа №1. Базовые языковые конструкции vfp и vba. Основы работы с данными
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №2. Определение корней уравнений Определение корня уравнения методом деления отрезка пополам (дихотомии)
- •Определение корня одномерного уравнения методами касательных и секущих
- •Определение корня одномерного уравнения методом простой итерации
- •Задания
- •Контрольные вопросы
- •Определение максимального и минимального значения функции двух переменных методом градиентного спуска (подъема)
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №4. Рекурсия. Рекурсивные алгоритмы Рекурсия. Рекурсивные алгоритмы
- •Графика и рекурсивные алгоритмы
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №5. Аппроксимация, интерполяция и экстраполяция Простейшие способы интерполяции и экстраполяции данных
- •Аппроксимация выборки случайных чисел методом наименьших квадратов
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №6. Решение систем линейных уравнений Решение систем линейных уравнений методом Гаусса
- •Решение систем линейных уравнений методом Гаусса с выбором максимального элемента
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №7. Итерационные методы решения систем линейных уравнений. Приложения численных методов решения систем линейных уравнений Метод Зейделя
- •Метод Гаусса-Зейделя
- •Обращение матрицы nхn с использованием метода Гаусса
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №8. Вычисление определенных интегралов Вычисление определенных интегралов методом прямоугольников
- •Вычисление определенных интегралов методом трапеций
- •Вычисление интеграла по методу Симпсона
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №9. Численное решение дифференциальных уравнений Методы численного решения дифференциальных уравнений первого порядка
- •Метод Эйлера
- •Метод Кранка-Николсона
- •Метод Рунге-Кутты четвертого порядка для решения уравнения первого порядка
- •Методы численного решения систем дифференциальных уравнений Гармонические колебания
- •Затухающие колебания
- •Периодический процесс с затуханием и с внешней силой
- •Решение системы дифференциальных уравнений методом Эйлера
- •Решение системы дифференциальных уравнений первого порядка методом Рунге-Кутты
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №10. Генерация равномерных и неравномерных распределений случайных чисел Использование гистограмм для отображения характера распределения случайной величины
- •Генератор дискретно-распределенных значений
- •Генерация дискретных распределений с заданным характером распределения вероятностей
- •Генерация непрерывных распределений вещественных величин Псевдонормальное распределение
- •Генерация линейно возрастающего распределения
- •Контрольные вопросы
- •Задания
- •Список рекомендуемой литературы и источников
Лабораторная работа №10. Генерация равномерных и неравномерных распределений случайных чисел Использование гистограмм для отображения характера распределения случайной величины
Пусть имеется генератор случайных чисел в диапазоне от a до b. Для простоты пусть это будет генератор равномерно распределенных числовых значений. Такое распределение можно получить, например, следующей языковой конструкцией VFP:
x = a + (b-a)*rand().
Гистограмма представляет собой множество узких, одинаковой ширины и равноудаленных друг от друга, вертикальных прямоугольников. Количество прямоугольников гистограммы соответствует количеству отрезков, на которые разбивается отрезок (a,b), высота прямоугольников соответствует количеству случайных значений попавших в данный отрезок.
Алгоритм построения гистограммы на естественном языке:
A = левая граница
B = правая граница
N = кол-во разбиений
M = кол-во испытаний
Массив AN(N)
** AN(i) элемент массива – соответствует количеству попаданий в i-ый элементарный
** отрезок
H = (B-A)/N && ширина элементарного отрезка
Цикл по L от 1 до N
AN(L)=0
Конец Цикла
Цикл по k от 1 до M && цикл ипытаний
X = ГенераторСлучайнойВеличины(a,b)
Цикл по L от 1 до N
LB = A + (L-1)*H && левая граница элементарного отрезка
RB = LB + H
Если x>=LB и x< RB тогда
AN(L) = AN(L) + 1
Выход из цикла
Конец Если
Конец Цикла
Конец Цикла
Цикл по L от 1 до N
ОтрисовкаСтолбца(L, AN(L))
Конец Цикла
Функция ГенераторСлучайнойВеличины
Параметры a,b
Возврат a + (b-a)*rand()
* Здесь rand() – системная функция возвращающая
* равномерно-распределенное случайное число от 0 до 1.
Конец Функции
Функция ОтрисовкаСтолбца
Параметры NS, HS
** NS – номер столбца
** HS – высота столбца
** ЛевоеПоле = значение левого поля в точках
** ШиринаСтолбца = Значение ширины столбца в точках
** Зазор = Значение зазора между столбцами в точках
x1= ЛевоеПоле + (ШиринаСтолбца + Зазор) * (NS-1)
** вычисляем левую границу столбца NS
x2 = x1 + ШиринаСтолбца
Отрисовка столбца номер NS и высоты HS
Конец Функции
Приведенный алгоритм построения гистограммы можно оптимизировать. Вместо цикла:
X = ГенераторСлучайнойВеличины(a,b)
Цикл по L от 1 до N
LB = A + (L-1)*H && левая граница элементарного отрезка
RB = LB + H
Если x>=LB и x< RB тогда
AN(L) = AN(L) + 1
Выход из цикла
Конец Если
Конец Цикла
в котором определяется номер диапазона можно использовать более простой способ: L = ОкруглитьВверх((x-A)/h)
Для построения гистограммы из N столбцов по результатам M испытаний генератора случайных чисел в диапазоне от A до B можно использовать следующий фрагмент программы на VFP:
h=(B-A)/N
For k = 1 to M && цикл ипытаний
X = ГенераторСлучайнойВеличины()
L=ceiling((x-a)/h)
IF L>=1 AND L<=N
AN(L)=AN(L)+1
ELSE
IF L=0
AN(1)=AN(1)+1
ELSE
? x,L
ENDIF
ENDIF
EndFor
Генератор дискретно-распределенных значений
Построим генератор дискретных случайных величин с заданными вероятностями на основе системного генератора равномерно-распределенной величины от 0 до 1: Пусть величина xi может принимать N-значений с вероятностями pi:
Xi |
Pi |
1 |
0.1 |
2 |
0.2 |
3 |
0.3 |
4 |
0.1 |
5 |
0.2 |
6 |
0.1 |
Алгоритм основывается на свойстве равномерного распределения равномерно заполнять отрезок от 0 до 1, причем вероятность попадания случайного значения в подинтервал отрезка (0,1) шириной D равна ширине этого подинтервала. Например, если отрезок (0,1) разбить на два подинтервала (0,0.2) и (0.2, 1), то вероятность попадания в подинтервал (0? 0.2) будет равна 0.2, а вероятность попадания в отрезок (0.2, 1) будет равна 0.8. Таким образом, для вышеприведенной таблицы необходимо разбить отрезок (0,1) на 6 подинтервалов.
Xi |
Pi |
Wi Ширина |
LBi Левая граница |
RBi Правая граница |
1 |
0.1 |
0.1 |
0 |
0.1 |
2 |
0.2 |
0.2 |
0.1 |
0.3 |
3 |
0.3 |
0.3 |
0.3 |
0.6 |
4 |
0.1 |
0.1 |
0.6 |
0.7 |
5 |
0.2 |
0.2 |
0.7 |
0.9 |
6 |
0.1 |
0.1 |
0.9 |
1 |
LB(1)=0, RB(1) = LB(1) + P(1)
Остальные элементы массивов левых и правых границ можно вычислить в цикле
Цикл по I от 2 до N
LB(i) = LB(i-1) + W(i-1)
RB(i) = LB(i) + P(i)
Конец Цикла
Первый вариант алгоритма
Функция ГенераторДискретныхЗначений
N=6
Массив P(N), LB(N), RB(N),W(N)
СчитываемМассив(@P,N)
LB(1)=0
RB(1) = LB(1) + P(1)
Цикл по I от 2 до N
LB(i) = LB(i-1) + W(i-1)
RB(i) = LB(i) + P(i)
Конец Цикла
XR = rand()
LB = 0
Если XR>=LB(1) и XR<RB(1)
Возврат X(1)
ИначеЕсли XR >=LB(2) и XR <RB(2)
Возврат X(2)
ИначеЕсли XR >=LB(3) и XR <RB(3)
Возврат X(3)
ИначеЕсли XR >=LB(4) и XR <RB(4)
Возврат X(4)
ИначеЕсли XR >=LB(5) и XR <RB(5)
Возврат X(5)
ИначеЕсли XR >=LB(6) и XR <=RB(6)
Возврат X(6)
Конец Если
Конец Функции
Функция ГенераторДискретныхЗначений
N=6
Массив P(N), X(N)
XR = rand()
LB = 0
Цикл по i=1 до N
Если xr>=LB и xr<LB+P(i)
Возврат X(i)
Конец Если
LB = LB + P(i)
Конец Если
Возврат 0
Конец Функции
