
- •Основы алгоритмизации и языки программирования Учебно-методическое пособие
- •Содержание
- •Лабораторная работа №1. Базовые языковые конструкции vfp и vba. Основы работы с данными
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №2. Определение корней уравнений Определение корня уравнения методом деления отрезка пополам (дихотомии)
- •Определение корня одномерного уравнения методами касательных и секущих
- •Определение корня одномерного уравнения методом простой итерации
- •Контрольные вопросы
- •Задания
- •Определение максимального и минимального значения функции двух переменных методом градиентного спуска (подъема)
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №4. Рекурсия. Рекурсивные алгоритмы Рекурсия. Рекурсивные алгоритмы
- •Графика и рекурсивные алгоритмы
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №5. Аппроксимация, интерполяция и экстраполяция Простейшие способы интерполяции и экстраполяции данных
- •Аппроксимация выборки случайных чисел методом наименьших квадратов
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №6. Решение систем линейных уравнений Решение систем линейных уравнений методом Гаусса
- •Решение систем линейных уравнений методом Гаусса с выбором максимального элемента
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №7. Итерационные методы решения систем линейных уравнений. Приложения численных методов решения систем линейных уравнений Метод Зейделя
- •Метод Гаусса-Зейделя
- •Обращение матрицы nхn с использованием метода Гаусса
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №8. Вычисление определенных интегралов Вычисление определенных интегралов методом прямоугольников
- •Вычисление определенных интегралов методом трапеций
- •Вычисление интеграла по методу Симпсона
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №9. Численное решение дифференциальных уравнений Методы численного решения дифференциальных уравнений первого порядка
- •Метод Эйлера
- •Метод Кранка-Николсона
- •Метод Рунге-Кутты четвертого порядка для решения уравнения первого порядка
- •Методы численного решения систем дифференциальных уравнений Гармонические колебания
- •Затухающие колебания
- •Периодический процесс с затуханием и с внешней силой
- •Решение системы дифференциальных уравнений методом Эйлера
- •Решение системы дифференциальных уравнений первого порядка методом Рунге-Кутты
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №10. Генерация равномерных и неравномерных распределений случайных чисел Использование гистограмм для отображения характера распределения случайной величины
- •Генератор дискретно-распределенных значений
- •Генерация дискретных распределений с заданным характером распределения вероятностей
- •Генерация непрерывных распределений вещественных величин Псевдонормальное распределение
- •Генерация линейно возрастающего распределения
- •Контрольные вопросы
- •Задания
- •Список рекомендуемой литературы и источников
Контрольные вопросы
Что такое корень уравнения?
Что такое непрерывность и гладкость функции?
Дайте определение разрывной функции, приведите примеры разрывных и непрерывных функций.
Дайте определение монотонности функции, приведите примеры монотонности и немонотонности.
Приведите условие наличия корня монотонной функции на заданном отрезке.
Определите понятия точность и погрешность нахождения корней уравнения.
Как определяются точность и погрешность нахождения корней уравнения в методе деления отрезка пополам?
Приведите определение итерационной процедуры.
В чем заключается итерационная процедура метода деления отрезка пополам?
Приведите условие завершения итераций в методе деления отрезка пополам.
Приведите условие применимости метода секущих.
Как определяется точность и погрешность нахождения корней уравнения в методе секущих.
Дайте определение понятию «разностная производная».
Выведите основные формулы метода секущих.
Приведите алгоритм итерационной процедуры метода секущих.
В чем состоит условие завершения итераций в методе секущих?
При каких условиях применим метод простой итерации?
Как определяется точность и погрешность нахождения корней в методе простой итерации?
Приведите алгоритм итерационной процедуры метода простой итерации.
Выведите условие сходимости метода простой итерации.
Выведите модифицированную формулу метода простой итерации.
Опишите алгоритм модифицированного метода простой итерации.
Задания
Найти корни одного из следующих уравнений, используя методы: простой итерации, деления отрезка пополам, касательных и секущих.
1. ln x + (x + 1)3 = 0;
2. x×2x = 1;
3. x – cos x = 0;
4. 3x + cos x + 1 = 0;
5. x + lg x = 0,5;
6. 2 – x = ln x;
7. (2 – x)×ex = 0;
8. 2,2×x – 2x = 0;
9. x2 + 4 sin x = 0;
10. 2x – lg x = 7;
11. 5x – 8 ln x = 8;
12. 3×x – ex = 0;
13. x (x + 1)2 = 1;
14. x = (x + 1)3;
15. x2 = sin x;
16. x3 = sin x;
17. x2 = ln (x+1);
18. 2x + lg x = – 0,5;
19. 2x + cos x = 0,5;
20. sin 0,5x +1 = x2; x>0;
21. 0,5x + lg (x–1) = 0,5;
22. sin (0,5 + x) = 2x – 0,5;
23. lg (2 + x) +2x = 3;
24. lg (1 + 2x) = 2 – x;
25. 2 sin (x – 0,6) = 1,5 – x.
Лабораторная работа №3. Поиск максимального и минимального значения функции одной и двух переменных
Поиск максимального и минимального значения функции одной переменной методом последовательного перебора
Большинство итерационных алгоритмов определения максимума или минимума функции, как одной, так и нескольких переменных, применяются для определения локального максимума (минимума). «Локальный максимум (минимум)» означает, что в рассматриваемой области должен быть только один максимум или минимум. «Найти максимум или минимум» означает вычислить максимальное или минимальное значаение функции и значение аргумента.
Математическим условием максимума или минимума функции f(х) в точке х0 является равенство нулю первой производной данной функции в точке х0.
Численно посчитать значение первой производной некоторой функции можно по следующим разностным формулам:
(1)
(2)
. (3)
Формула (1) – разностаная формула для производной «разность вперед», (2) – разностная формула для производной «разность назад», (3) – разностная формула для производной «центральная разность».
В точке максимума или минимума функции ее производная равна нулю. Более того, знак производной функции определяет характер поведения функции в любой данной точке: если производная положительна – функция возрастает, если производная отрицательна – функция убывает.
Чтобы определить примерное расположение интересующего нас максимума (минимума) можно использовать табулирование функции или основанные на табулировании методы прямого перебора значений функции на некоторой сетке аргумента (или аргументов, в случае многомерной функции).
Простейшие методы определения максимума или минимума основываются на построении таблицы значений разностной производной исследуемой функции и определении координат нуля производной. Чаще всего используется формула (1). Точность определения максимума или минимума функции определяется величиной шага при определении разностной производной, чем меньше шаг – тем точнее локализован максимум или минимум.
На практике при табулировании функции точный ноль производной получить практически невозможно. Поэтому ноль производной вычисляют с некоторой допустимой погрешностью как разницу между ближайшими близкими к нулю положительным и отрицательным значениями производной в данной точке. При этом погрешность может быть учтена как для значений производной функции (по оси Y), так и для значения координаты точки (по оси Х).
Рассмотрим функцию одной переменной f(x). Пусть эта функция имеет максимум fm=f(xm) в точке xm на отрезке a<x<b.
Описание алгоритма определения максимального (минимального) значения функции одной переменной методом последовательного перебора:
Задаем начальные значения рабочего шага h0, точность определения максимума (минимума) d, начального значения аргумента функции x0.
Вычисляем значение функции в начальной точке f0=f(x0).
В цикле вычисляем:
новое приближение х: x1=x0+d;
новое значение функции f1 в точке x1;
производную функции df=(f1-f0)/(x1-x0);
в соответствии со знаком производной определяем рабочий шаг h=знак(df)h0;
если производная меньше нуля, то рабочий шаг h будет равен:– h0;
если значение функции в начальной точке f0 меньше значения функции в следующей f1 точке и если h0 меньше шага d, то максимум найден,
иначе делим h0 пополам и продолжаем вычисления в цикле.
Если цикл завершен, то печатать сообщение, что максимум (минимум) не найден.
Алгоритм определения максимального (минимального) значения функции одной переменной методом последовательного перебора на естественном языке:
d=0.01
x0=0.5
h0=1
max_k=10000
f0=функция(x0)
Цикл по k от 1 до max_k
x1=x0+d
f1=функция(x1)
df=(f1-f0)/(x1-x0)
h=знак(df)*h0
x0=x0+h
f0=функция(x0)
Если f0<f1 то
Если h0<d то
Печать "Максимум x0=", x0
Печать " f0= ", f0," x1=",x1, " f1=", f1
Выход Из Программы
Конец Если
h0=h0/5
Конец Если
Конец Цикла
Печать "Максимум не найден"
ОПРЕДЕЛЕНИЕ ФУНКЦИИ функция
Параметр x
Возврат -10*(x-20)*(x-400)
Обозначяение знак(df) в данном алгоритме – стандартная функция, возвращающая знак своего аргумента.
Пример решения на языке VFP:
_screen.FontSize = 10
clear
d=0.01
x0=0.5
h0=1
f0=функция(x0)
FOR k=1 TO 10000
x1=x0+d
f1=функция(x1)
df=(f1-f0)/(x1-x0)
h=SIGN(df)*h0
x0=x0+h
f0=функция(x0)
IF f0<f1
IF h0<d
? "Максимум x0=", x0, " f0= ", f0," x1=",x1, " f1=", f1
RETURN
endif
h0=h0/5
ENDIF
endfor
? "Максимум не найден"
FUNCTION функция
LPARAMETERS x
RETURN -10*(x-20)*(x-40)
Пример решения на языке VBA:
Sub maxf()
d = 0.01
x0 = 0.5
h0 = 1
f0 = функция(x0)
For k = 1 To 10000
x1 = x0 + d
f1 = функция (x1)
df = (f1 - f0) / (x1 - x0)
h = Sgn(df) * h0
x0 = x0 + h
f0 = функция (x0)
If f0 < f1 Then
If h0 < d Then
Debug.Print "Максимум найден за " & k & " итераций!"
Debug.Print "x0= " & x0 & " : f0= " & f0 & " : x1= " & x1 & " : f1= " & f1
Exit Sub
End If
h0 = h0 / 5
End If
Next
Debug.Print "Максимум не найден"
End Sub
Function функция (x)
функция = -10 * (x - 20) * (x - 40)
End Function
Результат работы программы на VBA:
Максимум найден за 42 итераций!
x0= 29,988 : f0= 999,99856 : x1= 30,006 : f1= 999,99964