
- •Работает
- •1.1. История создания эвм.
- •1.3. Размещение данных и программ в памяти пэвм.
- •1.4.Файловая система хранения информации
- •1.5.Операционная система.
- •Лекция 2. Как составляются и выполняются программы в системе delphi
- •2.1. Понятие алгоритма и способы его записи
- •2.2. Общая характеристика языка Паскаль
- •2.3. Как составляется программа в системе Delphi
- •2.4. Наша первая программа реализует линейный алгоритм
- •3.1. Данные и их типы.
- •3.2. Операции над переменными основных скалярных типов
- •Алгоритмов
- •4.1. Понятие разветвляющегося алгоритма
- •4.2. Оператор условия if
- •4.3. Оператор выбора Case
- •4.4. Некоторые возможности, предоставляемые Delphi для организации разветвлений
- •Лекция 5. Составление и програмирование циклических алгоритмов
- •5.1. Понятие цикла
- •5.2. Оператор Repeat...Until
- •5.3. Оператор While...Do
- •5.4. Оператор For...Do
- •5.5. Вложенные циклы
- •5.6. Примеры некоторых часто встречающихся циклических алгоритмов Вычисление заданного члена рекуррентной последовательности
- •Вычисления сумм с использованием рекуррентной последовательности
- •6.1. Ошибки на этапе компиляции
- •6.4. Защищенные блоки
- •6.5. Некоторые стандартные типы исключительных ситуаций
- •6.6. Инициирование собственных исключительных ситуаций
- •6.7. Примеры фрагментов программ
- •Лекция 7. Составление программ с использованием массивов
- •7.1. Понятие массива
- •7.2. Некоторые возможности ввода-вывода в Delphi
- •7.3. Примеры часто встречающихся алгоритмов работы с массивами Сумма n элементов одномерного массива:
- •Произведение диагональных элементов квадратной матрицы:
- •Нахождение максимального элемента одномерного массива:
- •8.1. Статическое и динамическое распределение оперативной памяти
- •8.2. Понятие указателя
- •8.3. Наложение переменных
- •8.4. Динамическое распределение памяти
- •8.5. Организация динамических массивов
- •9.1. Понятие подпрограммы
- •9.2. Описание подпрограмм
- •9.3. Передача данных между подпрограммой и вызывающей ее программой
- •9.4. Оформление подпрограмм в библиотечный модуль
- •9.5. Примеры подпрограмм, оформленных в отдельные библиотечные модули
- •Пример программы, использующей модуль RabMas:
- •Множества
- •10.1. Понятие множества
- •10.2. Операции над множествами
- •10.3. Примеры работы с множествами
- •Interface
- •11.1. Зачем нужны строки
- •11.2. Описание переменных строкового типа «Короткие строки»
- •11.3. Основные операции над переменными строкового типа
- •11.4. Некоторые процедуры и функции обработки строк
- •11.5. Примеры алгоритмов обработки строк
- •Лекция 12. Программирование с использованием записей
- •12.1. Понятие записи
- •12.2. Операции над записями
- •12.3. Использование записей для работы с комплексными числами
- •13.1. Понятие файла
- •13.2. Операции над файлами
- •13.2.1. Типизированные файлы
- •13.2.2. Текстовые файлы
- •13.3. Подпрограммы работы с файлами
- •13.4. Компоненты tOpenDialog и tSaveDialog
- •Лекция 14. Программирование с отображением графической информации
- •14.1. Как рисуются изображения
- •14.2. Построение графиков с помощью компонента tChart
- •Лекция 15. Программирование с использованием рекурсии
- •15.1. Понятие рекурсии
- •15.2. Примеры рекурсивных вычислений
- •16.1. Организация работы с базами данных
- •16.2. Поиск в массиве записей
- •16.3. Сортировка массивов
- •16.3.1. Метод пузырька
- •16.3.2. Метод прямого выбора
- •16.3.3. Метод Шелла
- •16.3.4. Метод Хоара (Hoare)
- •17.1. Работа со списками
- •17.2. Добавление нового элемента в список на заданную позицию
- •17.3. Удаления элемента с заданным номером
- •17.4. Пример программы
- •Лекция 18. Связанные списки на основе рекурсивных данных
- •18.1. Что такое стек и очередь
- •18.2. Понятие рекурсивных данных и однонаправленные списки
- •18.3. Процедуры для работы со стеками
- •18.4. Процедуры для работы с односвязными очередями
- •18.5. Работа с двухсвязными очередями
- •18.6. Процедуры для работы с двусвязными очередями
- •19.1. Основные понятия и определения
- •19.2. Прямые методы решения слау
- •19.3. Итерационные методы решения слау
- •20.1. Зачем нужна аппроксимация функций?
- •20.3. Какие бывают многочлены и способы интерполяции?
- •20.4. Что такое среднеквадратичная аппроксимация?
- •20.5. Метод наименьших квадратов (мнк)
- •21.1. Формулы численного дифференцирования
- •21.2. Формулы численного интегрирования
- •22.1. Как решаются нелинейные уравнения
- •22.2. Итерационные методы уточнения корней
- •22.2.2. Метод Ньютона
- •23.1. Постановка задач оптимизации, их классификация
- •23.2. Методы нахождения минимума функции одной переменной
- •24.1. Задачи для обыкновенных дифференциальных уравнений
- •24.2. Основные положения метода сеток для решения задачи Коши
- •24.3. Многошаговые схемы Адамса
- •Литература
23.2. Методы нахождения минимума функции одной переменной
Задача нахождения минимума функции одной переменной min/(x) нередко возникает в практических приложениях. Кроме того, многие методы решения задачи минимизации функции многих переменных сводятся к многократному поиску одномерного минимума. Поэтому разработка новых, более эффективных одномерных методов оптимизации продолжается и сейчас, несмотря на кажущуюся простоту задачи.
Примечание. В дальнейшем, если не будет особо оговорено, под минимумом функции будет подразумеваться локальный минимум.
Нахождение минимума функции осуществляется в два этапа:
1. Приближенное определение местоположения минимума.
2. Вычисление точки минимума xmin c заданной точностью s одним из нижеприведенных методов.
На первом этапе, задав некоторую начальную точку x °, спускаются с заданным шагом h в направлении уменьшения функции и устанавливают интервал длиной 2h, на котором находится минимум, из условия f ( xm - h ) < f ( xm ) < f ( xm + h ). Для функции, изображенной на рис. 23.1, если A < x ° < x g , будет выделен интервал [a,b] с локальным минимумом x min 1, а если xg < x ° < B - с глобальным минимумом x min 2, т. е. тот, в области «притяжения» которого оказалась начальная точка x °.
Если
на отрезке [a,b]
функция
f
( x ) унимодальна,
т. е. она имеет на этом отрезке единственную
точку минимума x
min
и
слева от этой точки является строго
убывающей, а справа -
строго
возрастающей, то для вычисления точки
минимума с заданной точностью могут
использоваться нижеприведенные
методы:
23.2.1. Метод деления отрезка пополам
Задаются a, b и погрешность s. Вычисляются две точки вблизи середины интервала [a, b]:
x1 = (a + b - s) / 2, x2 = (a + b + s) / 2.
Если f ( x 1 ) > f ( x 2 ), то a = x 1, иначе b = x 2.
Если | b - a | > 2s, тогда повторяем с п.1.
4. Вычисляем xmin = (a + b)/2, JW = f(Xmm ).
Этот метод прост в реализации, позволяет находить минимум разрывной функции, однако требует большого числа вычислений функции для обеспечения заданной точности.
23.2.2. Метод золотого сечения
Золотое сечение - это такое деление отрезка [a, b] на две неравные части при котором отношение большего отрезка ко всему интервалу равно отношению меньшего отрезка к большему. При этом имеет место следующее соотношение:
(b - x1)/(b - a) = (x1 - a)/(b - x1) = 1- £ = 0.618, £ = (3 - V5)/2 = 0.382.
О точке, которая расположена на расстоянии £ длины от одного из концов отрезка, говорят, что она осуществляет золотое сечение данного отрезка. Каждый отрезок имеет две такие точки, расположенные симметрично относительно середины. Алгоритм поиска минимума аналогичен вышеописанному методу деления пополам и отличается тем, что вначале точки x1 и x2 выби-
У
раются так, чтобы они осуществляли золотое сечение отрезка, и вычисляются значения функции в этих точках. В последующем, после сокращения интервала путем отбрасывания неблагоприятной крайней точки, на оставшемся отрезке уже имеется точка, делящая его в золотом отношении, ( точка xj на рис. 23.2 ) известно и значение функции в этой точке. Остается лишь выбрать ей симметричную и вычислить значение функции в этой точке для того, чтобы вновь решить, какую из крайних точек отбросить.
f(xi).
Алгоритм метода:
Задаются a, b и погрешность s.
1. Вычисляются две точки
x1 = а + £(b - ci\ x2 = b -£(Ъ - ci\ yi = f (хД y2 = f(x2) .
2. Если yj > y2, то a = xj, xj = x2, yi = У2, x2 = b - £ (b-a); У2 = f(x2), иначе b = x2, x2 = xj, y2 = yi, xj = a + £ (b-a),
Если | b - a\ > 2s, то повторить п.2.
Если yj > y2, то a = xj, иначе b = x2,
5. Вычисляется xmm = (a + b)/2, ymm = f (xmin).
yj =
За одно вычисление функции отрезок, на котором находится xmin,
уменьшается в j-£ =0.62 раза, т.е. быстрее, чем метод деления пополам, в котором за два вычисления функции отрезок уменьшается в 0,5 раза.
23.2.3. Метод Фибоначи
На практике количество вычислений значений функции часто бывает ограничено некоторым числом n ( тем самым ограничено и число шагов вычислений по методу золотого сечения; оно не превышает n-1 ). Метод Фибоначчи отличается от метода золотого сечения лишь выбором первых двух симметричных точек и формул их пересчета и гарантирует более точное приближение к точке x min за n -1 шаг, чем метод золотого сечения за то же количество шагов. Согласно методу Фибоначи, на нулевом шаге первые две симметричные точки вычисляют по формулам xi0 = ао + F n ( bo - ao ) / Fn+2 ,
X20 = bo - F n ( bo - ao ) / Fn+2 = ao + F n + 1 ( bo - ao ) / Fn+2 ,
где F n , F n + 1 , F n + 2 - числа Фибоначи , определяемые рекурентной формулой
F k = F k - 1 + F k - 2 , k=3, 4, ... ; F 1 = F 2 = 1 Запишем первые десять чисел Фибоначи :
F1 =1, F2 =1, F3 =2, F4 = 3, F5 =5, F6 =8, F7 =13, F8 =21, F9 =34, F10
=55.
В последующем, после сокращения интервала путем отбрасывания неблагоприятной крайней точки, одна из точек пересчитывается по одной из соответствующих формул
k x1k = ak + F n - k ( b0 - a0 ) / Fn + 2 , x2k = ak + F n + 1 - k ( b0 - a0 ) / Fn + 2 ,
Выполняется n - 2 шага, при k = 1, 2, ... , n - 2, после чего отбрасывается крайняя неблагоприятная точка и вычисляется точка минимума x min = ( a n - 1 + b n - 1) / 2. Погрешность вычисления точки минимума не превышает (b0 - ao) / (2F n + 2), т. е. за три вычисления функции получают точку минимума с погрешностью не превышающей 1 / 10 первоначального интервала , пять вычислений - 1 / 26, восемь - 1 / 110.
Т lim Fn / Fn+2 = (3 -V5)/2, б
Т.к. n 2 то, при достаточно больших n, вычисле-
П — GO
ния по методу Фибоначи и золотого сечения начинаются практически из одной и той же пары симметричных точек.
Алгоритм метода:
Задаются a, b, число вычислений функции n.
1. Вычисляются d = ( b-a ) / Fn+2 и две точки
x1 = a + Fnd, x2 = a + Fn+1d, J1 = f (x1 X У2 = f (x2 ) .
2. Если yi > y2 , то a = xi, xi = x2, У1 = У2, x2 = a + Fn - k d; У2 =f(x2), иначе b = x2, x2 = xi, У2 = У1, xi = a + Fn - k +1 d, yi =f(xi).
п.2 повторяется n-2 раза, при k = 1, 2, ... , n-2.
3. Если У1 > У2 , то a = xi, иначе b = x2
4. Вычисляется xmin = (a + b)/2, JW = f (xmin) .
23.2.4. Метод последовательного перебора
Этот метод не требует предварительного определения местоположения точки минимума. Идея метода состоит в том, что, спускаясь из точки x0 с заданным шагом h в направлении уменьшения функции, устанавливают интервал длиной 2h, на котором находится минимум, который затем последовательно уточняют, повторяя спуск с последней точки, уменьшив шаг и изменив его знак, пока не будет достигнута заданная точность. Алгоритм метода приведен ниже.
Задаются x0, некоторый шаг h и погрешность s .
1. Вычисляем yo = f (xo)
2. Определяем направление убывания функции. Если f (xo+sh) > yo, то h = -h.
Из точки x0 делается шаг x1=x0+h и вычисляются y1 = f (x1).
Если y1 < y0, то x0 = x1, y0 = y1, и повторить с п.3
5. h = - h / 4. В точке x1 функция оказалась большей, чем в x0, следова- тельно, мы перешагнули точку минимума и организуем спуск в обратном на- правлении.
6. Если | h | > s, тогда повторить с п.3
7. xmin = xo, fmin = f.
Скорость сходимости данного метода существенно зависит от удачного выбора начального приближения x0 и шага h. Шаг h следует выбирать как половину оценки расстояния от x0 до предполагаемого минимума xmfn.
23.2.5. Метод квадратичной параболы
Для ускорения спуска к минимуму из некоторой точки x0 используют локальные свойства функции вблизи этой точки. Так, скорость и направление убывания можно определить по величине и знаку первой производной. Вторая производная характеризует направление выпуклости: если f">0, то функция имеет выпуклость вниз, иначе - вверх. Вблизи локального безусловного минимума дважды дифференцируемая функция всегда выпукла вниз. Поэтому, если вблизи точки минимума функцию аппроксимировать квадратичной параболой, то она будет иметь минимум. Это свойство и используется в методе квадратичной параболы, суть которого в следующем.
Вблизи точки x0 выбираются три точки xj, x2, x3. Вычисляются значения y1, y2, y3. Через эти точки проводится квадратичная парабола
p( x - x3) + q( x - x3) + r = pz + qz + r,
z — x x3, z1 — x1 x3, z2 — x2 x3, r — y 3, (23.1)
p = (y1 - y3) z2 - (y2 - y3) z1 q = (y1 - y3) z2 - (y2 - y3) z12
z1z2(z1-z2) z1z2(z2-z1)
Если p>0, то парабола имеет минимум в точке zm = -b/(2a). Следовательно, можно аппроксимировать положение минимума функции значением xm1 = x3 + zm и, если точность не достигнута, следующий спуск производить, используя эту новую точку и две предыдущие. Получается последовательность xm1, xm2, xm3, ... , сходящаяся к точке xm.
Алгоритм метода можно записать следующим образом Задается x0, h и s.
1.Выбираем 3 точки: x1=xo-h,x2=xo-h,x3=xo+h, 2. Вычисляем y1 = f (x1), y2 = f (x2), y3 = f (. 3.Проверяем положительность знака второй производной:
h2f'' = y1 - 2y2 + y3 > 0 (см. п. (4.7)), если нет, то начальное приближение
x0 выбрано неудачно (в x0 имеется выпуклость вверх) и следует закончить вычисления с таким сообщением, если да, то переходим к п.4.
4. Вычисляем z, z1, z2, p, q, r, zm по вышеприведенным формулам
(23.1).
5. Переименовываем точки, отбрасывая точку x1:
6. Проверяем |zm | < s, если нет, то повторяем с п.4.
xm = x3 + zm, ym = f (xm X конец.
Данный метод сходится очень быстро и является одним из наилучших методов спуска. Следует отметить, однако, что вблизи минимума расчет по приведенным здесь формулам для p и q приводит к накоплению погрешности из-за потери значащих цифр при вычитании близких чисел. Поэтому разные авторы предлагают свои эквивалентные формулы, счет по которым более устойчив. Кроме того, в алгоритм вносятся некоторые поправки, позволяющие предусмотреть различные неприятные ситуации - переполнение, деление на 0, уход от корня.
23.2.6. Метод кубической параболы
Данный метод аналогичен предыдущему, но за счет использования аппроксимации кубической параболой имеет более высокую сходимость, если функция допускает простое вычисление производной. При его использовании вблизи точки x0 выбираются две точки xi и x2 (обычно x1 = x0), вычисляются
значения функции y1, y2 и ее производной D1 = f(x1), D2 = f'(x2). Затем через эти точки проводится кубическая парабола, коэффициенты которой определяются таким образом, чтобы совпадали значения производных параболы и функции:
p(x - x2) + q( x - x2) + r (x - x2) + s = pz + qz + rz + s = P( z),
z=x-x2,z1=x1-x2,
P(0) = У2, P(0) = D2, P(z1) = У1, P'(z1) = Д.
Как нетрудно убедиться, коэффициенты параболы вычисляются по следующим формулам: s = У2, r = D2,
p = (D1 - D2 - 2(y1 - y2 - D2 ■ z1)/z1)z2, q = (D2 - D1 + 3(y1 - y2 - D2 ^ z1)/z1)/z1.'
Поэтому приближенное положение минимума можно получить по формуле xm1=x2+zm и, если точность не достигнута, следующий спуск произво-
Известно, что кубическая парабола имеет минимум в точке дить уже из точек x2, xm1 (точка xj отбрасывается). Если подкоренное выражение окажется отрицательным, то спуск следует производить до точки перегиба параболы zm1 = -q /3p . Следует также убедиться, что в начальной точке
a, D2 - D _ функция вогнута вниз — -- > o.
Алгоритм метода можно записать следующим образом. Задаются начальное значение x0, некоторый малый шаг h и s.
Вычисляем x1 = xo, D1 = f'(x1).
Если D1 > o, то изменяем знак h (h=-h).
Вычисляем x2 = x1 + h, D2 = f'(x2).
Если (D2 - D1)/ h < o, функция вогнута вверх, тогда x0 выбрана неудачно и следует закончить вычисления с этим сообщением.
Вычисляем y = f (x1), y2 = f (.
Вычисляем zj, p, q, r, zm по вышеприведенным формулам.
7. x1 = x2, y1 = y2^ D1 = D2, x2 = x2 + zm, y2 = f (X2), D2 = f '(x).
8. Проверяем |zm| < s, если нет, тогда повторяем п.6.
9. xm = x2 + Zm, ym = f (xm ^ конец.
Следует отметить, что вблизи точки минимума расчет по приведенным здесь простейшим формулам для p, q не всегда устойчив из-за ошибок округления, поэтому различные авторы рекомендуют использовать несколько преобразованные формулы.
ЛЕКЦИЯ 24. РЕШЕНИЕ ЗАДАЧИ КОШИ ДЛЯ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ