Численные методы © К.Ю. Поляков, 2008 1.Решение уравненийРешение уравнений 2.Вычисление площади (интеграла)Вычисление площади (интеграла) 3.Вычисление.

Презентация:



Advertisements
Похожие презентации
Численные методы (язык Паскаль) © К.Ю. Поляков, Решение уравненийРешение уравнений 2.Вычисление площади (интеграла)Вычисление площади (интеграла)
Advertisements

Метод Ньютона (метод касательных)
Решение нелинейных уравнений с применением средств программирования. Созданная программа предусматривает 5 методов решения нелинейных уравнений. Ход работы.
К.Ю. Поляков, Е.А. Ерёмин, 2013 Решение вычислительных задач на компьютере § 70. Решение уравнений 1.
Применение численных методов при моделировании химико-технологических процессов.
МЕТОДЫ ОПТИМИЗАЦИИ § 1. Основные понятия. Под оптимизацией понимают процесс выбора наилучшего варианта из всех возможных В процессе решения задачи оптимизации.
Метод используется для расчета корней уравнения вида f(x)=0. С помощью метода половинного деления всегда можно получить приближённые значения максимума.
НЕЛИНЕЙНЫЕ УРАВНЕНИЯ § 1. Уравнения с одним неизвестным.
Приближенное решение уравнений Найти корень уравнения x 3 – cosx = 0 приближенными методами (графическим и численным методом деления числового отрезка.
Департамент образования г.Южно-Сахалинска муниципальное общеобразовательное учреждение лицей 1 Разработка программного обеспечения для решения нелинейных.
НЕКОТОРЫЕ АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ. Табулирование функции одной переменной Составить алгоритм и программу вычисления таблицы значений функции.
И его применение. Определение Пусть на отрезке [а;b] оси Ох задана непрерывная функция f(x), не имеющая на нем знака. Фигуру, ограниченную графиком этой.
ОСНОВЫ ПРОГРАММИРОВАНИЯ Раздел 2. Математические основы программирования Численные алгоритмы Старший преподаватель Кафедры ВС, к.т.н. Поляков Артем Юрьевич.
Приближенное решение систем нелинейных уравнений Методами Ньютона и Итераций.
План лекции: 1. Методы интегрирования(продолжение) 2. Определенный интеграл.
Исследовательская работа на тему: « Численное решение уравнений. Метод половинного деления » Автор: Прохорова Ксения Руководитель: Фирсова Н.А. Автор:
Площадь криволинейной трапеции. Содержание Определение криволинейной трапеции Примеры криволинейных трапеций Простейшие свойства определенного интеграла.
Лекция 4. Тема: «Дифференциал и интеграл» Специальность: «Сестринское дело» Курс: 2 Дисциплина: «Математика» Подготовила: преподаватель высшей категории.
Определенный интеграл И некоторые методы приближенного вычисления определенного интеграла с помощью ЭВМ (методы трапеций, средних прямоугольников и метод.
Определенный интеграл Опр. Под определенным интегралом от данной непрерывной функции на отрезке соответствующее приращение ее первообразной. понимается.
Транксрипт:

Численные методы © К.Ю. Поляков, Решение уравнений Решение уравнений 2. Вычисление площади (интеграла)Вычисление площади (интеграла) 3. Вычисление длины кривой Вычисление длины кривой 4.Оптимизация Оптимизация

Численные методы Тема 1. Решение уравнений © К.Ю. Поляков, 2008

3 Основные понятия Типы решения: аналитическое (точное, в виде формулы) приближенное (неточное) Задача: решить уравнение Как? ? численные методы начальное приближение при N графический метод

4 Численные методы Идея: последовательное уточнение решения с помощью некоторого алгоритма. Область применения: когда найти точное решение невозможно или крайне сложно. 1)можно найти хоть какое-то решение 2)во многих случаях можно оценить ошибку (то есть можно найти решение с заданной точностью) 1)нельзя найти точное решение 2)невозможно исследовать решение при изменении параметров 3)большой объем вычислений 4)иногда сложно оценить ошибку 5)нет универсальных методов

5 Есть ли решение на [a, b] ? x y x*x* a b x y x*x* a b есть решение нет решения x y x*x* a b непрерывная Если непрерывная функция f (x) имеет разные знаки на концах интервалы [a, b], то в некоторой точке внутри [a, b] имеем f (x) = 0 ! !

6 Метод дихотомии (деление пополам) 1. Найти середину отрезка [a,b] : c = (a + b) / 2; 2. Если f(c)*f(a)<0, сдвинуть правую границу интервала b = c; 3. Если f(c)*f(a) 0, сдвинуть левую границу интервала a = c; 4. Повторять шаги 1-3, пока не будет b – a. x y x*x* a b с

7 Метод дихотомии (деления пополам) простота можно получить решение с заданной точностью (в пределах точности машинных вычислений) нужно знать интервал [a, b] на интервале [a, b] должно быть только одно решение большое число шагов для достижения высокой точности только для функций одной переменной

8 Метод деления отрезка пополам // // BinSolve находит решение на [a,b] // методом деления отрезка пополам // Вход: a, b – границы интервала, a < b // eps - точность решения // Выход: x – решение уравнения f(x)=0 // float BinSolve ( float a, float b, float eps ) { float c; while ( b - a > eps ) { c = (a + b) / 2; if ( f(a)*f(c) < 0 ) b = c; else a = c; } return (a + b) / 2; } // // BinSolve находит решение на [a,b] // методом деления отрезка пополам // Вход: a, b – границы интервала, a < b // eps - точность решения // Выход: x – решение уравнения f(x)=0 // float BinSolve ( float a, float b, float eps ) { float c; while ( b - a > eps ) { c = (a + b) / 2; if ( f(a)*f(c) < 0 ) b = c; else a = c; } return (a + b) / 2; } float f ( float x ) { return x*x – 5; } float f ( float x ) { return x*x – 5; }

9 Как подсчитать число шагов? float BinSolve ( float a, float b, float eps, int &n ) { float c; n = 0; while ( b - a > eps ) { c = (a + b) / 2; if ( f(a)*f(c) < 0 ) b = c; else a = c; n ++; } return (a + b) / 2; } float BinSolve ( float a, float b, float eps, int &n ) { float c; n = 0; while ( b - a > eps ) { c = (a + b) / 2; if ( f(a)*f(c) < 0 ) b = c; else a = c; n ++; } return (a + b) / 2; } int &n n = 0; n ++; Вызов в основной программе: float x; int N;... x = BinSolve ( 2, 3, , N ); printf("Ответ: x = %7.3f", x); printf("Число шагов: %d", N); float x; int N;... x = BinSolve ( 2, 3, , N ); printf("Ответ: x = %7.3f", x); printf("Число шагов: %d", N); значение переменной меняется внутри функции

10 Метод итераций (повторений) Задача: Эквивалентные преобразования: имеет те же решения при Идея решения: – начальное приближение (например, с графика) Проблемы: 1)как лучше выбрать ? 2)всегда ли так можно найти решение?

11 Сходимость итераций Сходящийся итерационный процесс: последовательность приближается (сходится) к точному решению. односторонняя сходимость двусторонняя сходимость

12 Расходимость итераций Расходящийся итерационный процесс: последовательность неограниченно возрастает или убывает, не приближается к решению. односторонняя расходимость двусторонняя расходимость

13 От чего зависит сходимость? сходится расходится Выводы: сходимость итераций зависит от производной итерации сходятся при и расходятся при сходимость определяется выбором параметра b

14 Как выбрать b ? наугад, пробовать разные варианты для начального приближения x 0 пересчитывать на каждом шаге, например: Какие могут быть проблемы? ?

15 Метод итераций (программа) // // Iter решение уравнения методом итераций // Вход: x – начальное приближение // b - параметр // eps - точность решения // Выход: решение уравнения f(x)=0 // n - число шагов //// float Iter ( float x, float b, float eps, int &n) { int n = 0; float dx; while ( 1 ) { dx = b*f(x); x = x + dx; if ( fabs(dx) < eps ) break; n ++; if ( n > 100 ) break; } return x; } // // Iter решение уравнения методом итераций // Вход: x – начальное приближение // b - параметр // eps - точность решения // Выход: решение уравнения f(x)=0 // n - число шагов //// float Iter ( float x, float b, float eps, int &n) { int n = 0; float dx; while ( 1 ) { dx = b*f(x); x = x + dx; if ( fabs(dx) < eps ) break; n ++; if ( n > 100 ) break; } return x; } аварийный выход нормальный выход

16 Метод Ньютона (метод касательных) Какая связь с методом итераций? ?

17 Метод Ньютона (программа) // // Newton решение уравнения методом Ньютона // Вход: x – начальное приближение // eps - точность решения // Выход: решение уравнения f(x)=0 // n - число шагов //// float Newton ( float x, float eps, int &n) { int n = 0; float dx; while ( 1 ) { dx = f(x) / df(x); x = x - dx; if ( fabs(dx) < eps ) break; n ++; if ( n > 100 ) break; } return x; } // // Newton решение уравнения методом Ньютона // Вход: x – начальное приближение // eps - точность решения // Выход: решение уравнения f(x)=0 // n - число шагов //// float Newton ( float x, float eps, int &n) { int n = 0; float dx; while ( 1 ) { dx = f(x) / df(x); x = x - dx; if ( fabs(dx) < eps ) break; n ++; if ( n > 100 ) break; } return x; } float f ( float x ) { return 3*x*x*x+2*x+5; } float df ( float x ) { return 9*x*x + 2; } float f ( float x ) { return 3*x*x*x+2*x+5; } float df ( float x ) { return 9*x*x + 2; }

18 Метод Ньютона быстрая (квадратичная) сходимость – ошибка на k -ом шаге обратно пропорциональна k 2 не нужно знать интервал, только начальное приближение применим для функция нескольких переменных нужно уметь вычислять производную (по формуле или численно) производная не должна быть равна нулю может зацикливаться

Численные методы Тема 2. Вычисление площади (интеграла) © К.Ю. Поляков, 2008

20 Площадь криволинейной трапеции x y b a y = f (x) x y b a y = f 1 (x) y = f 2 (x)

21 Метод (левых) прямоугольников x y x с 2 x с 1 h y = f 1 (x) y = f 2 (x) S1S1S1S1 S2S2S2S2 S3S3S3S3 S4S4S4S4 SiSiSiSi x x x+h f 1 (x) f 2 (x) float Area() { float x, S = 0, h=0.001; for ( x = xc1; x < xc2; x += h) S += h*(f1(x) – f2(x)); return S; } float Area() { float x, S = 0, h=0.001; for ( x = xc1; x < xc2; x += h) S += h*(f1(x) – f2(x)); return S; } for ( x = xc1; x < xc2; x += h ) S += f1(x) – f2(x); S *= h; for ( x = xc1; x < xc2; x += h ) S += f1(x) – f2(x); S *= h; Как улучшить решение? ? Почему не x <= xc2 ? ?

22 Метод (правых) прямоугольников x y x с 2 x с 1 h y = f 1 (x) y = f 2 (x) S1S1S1S1 S2S2S2S2 S3S3S3S3 S4S4S4S4 SiSiSiSi x x+h f 1 (x) f 2 (x) float Area() { float x, S = 0, h=0.001; for ( x = xc1; x < xc2; x += h) S += h*(f1(x+h) – f2(x+h)); return S; } float Area() { float x, S = 0, h=0.001; for ( x = xc1; x < xc2; x += h) S += h*(f1(x+h) – f2(x+h)); return S; } for ( x = xc1; x < xc2; x += h ) S += f1(x+h) – f2(x+h); S *= h; for ( x = xc1; x < xc2; x += h ) S += f1(x+h) – f2(x+h); S *= h;

23 Метод (средних) прямоугольников x y x с 2 x с 1 h y = f 1 (x) y = f 2 (x) S1S1S1S1 S2S2S2S2 S3S3S3S3 S4S4S4S4 float Area() { float x, S = 0, h=0.001; for ( x = xc1; x < xc2; x += h) S += h*(f1(x+h) – f2(x+h)); return S; } float Area() { float x, S = 0, h=0.001; for ( x = xc1; x < xc2; x += h) S += h*(f1(x+h) – f2(x+h)); return S; } for ( x = xc1; x < xc2; x += h ) S += f1(x+h/2) – f2(x+h/2); S *= h; for ( x = xc1; x < xc2; x += h ) S += f1(x+h/2) – f2(x+h/2); S *= h; f 1 (x) f 2 (x) x SiSiSiSi x+h Какой метод точнее? ? левые (правые): средние

24 Метод трапеций x y x с 2 x с 1 h y = f 1 (x) y = f 2 (x) for ( x = xc1; x < xc2; x += h ) S += f1(x) – f2(x) + f1(x+h) – f2(x+h); S *= h/2; for ( x = xc1; x < xc2; x += h ) S += f1(x) – f2(x) + f1(x+h) – f2(x+h); S *= h/2; Ошибка x x+h f 1 (x) f 2 (x) SiSiSiSi Как улучшить? ? S =( f1(xc1) - f2(xc1) + f1(xc2) - f2(xc2) )/2.; for ( x = xc1+h; x < xc2; x += h ) S += f1(x) – f2(x); S *= h; S =( f1(xc1) - f2(xc1) + f1(xc2) - f2(xc2) )/2.; for ( x = xc1+h; x < xc2; x += h ) S += f1(x) – f2(x); S *= h; S1S1S1S1 S2S2S2S2 S3S3S3S3 S4S4S4S4

25 Метод Монте-Карло Применение: вычисление площадей сложных фигур (трудно применить другие методы). Требования: необходимо уметь достаточно просто определять, попала ли точка (x, y) внутрь фигуры. Пример: заданы 100 кругов (координаты центра, радиусы), которые могу пересекаться. Найти площадь области, перекрытой кругами. Как найти S ? ?

26 Метод Монте-Карло 1. Вписываем сложную фигуру в другую фигуру, для которой легко вычислить площадь (прямоугольник, круг, …). 2. Равномерно N точек со случайными координатами внутри прямоугольника. 3. Подсчитываем количество точек, попавших на фигуру: M. 4. Вычисляем площадь: Всего N точек На фигуре M точек 1. Метод приближенный. 2. Распределение должно быть равномерным. 3. Чем больше точек, тем точнее. 4. Точность ограничена датчиком случайных чисел. !

Численные методы Тема 3. Вычисление длины кривой © К.Ю. Поляков, 2008

28 Длина кривой x y b a y = f (x) L Точное решение: нужна формула для производной сложно взять интеграл Приближенное решение: xixi x i +h f (x)f (x) LiLi L1L1 L2L2 LNLN

29 Длина кривой // // CurveLen вычисление длины кривой // Вход: a, b – границы интервала // Выход: длина кривой y = f(x) на интервале [a,b] // float CurveLen ( float a, float b ) { float x, dy, h = , h2 = h*h, L = 0; for ( x = a; x < b; x += h ) { dy = f(x+h) - f(x); L += sqrt(h2 + dy*dy); } return L; } // // CurveLen вычисление длины кривой // Вход: a, b – границы интервала // Выход: длина кривой y = f(x) на интервале [a,b] // float CurveLen ( float a, float b ) { float x, dy, h = , h2 = h*h, L = 0; for ( x = a; x < b; x += h ) { dy = f(x+h) - f(x); L += sqrt(h2 + dy*dy); } return L; }

Численные методы Тема 4. Оптимизация © К.Ю. Поляков, 2008

31 Найти x, при котором или при заданных ограничениях. Основные понятия Оптимизация – поиск оптимального (наилучшего в некотором смысле) решения. Цель: определить значения неизвестных параметров, при которых заданная функция достигает минимума (затраты) или максимума (доходы). Ограничения – условия, которые делают задачу осмысленной. или

32 Локальные и глобальные минимумы y = f (x) глобальный минимум локальные минимумы Задача: найти глобальный минимум. Реальность: большинство известных алгоритмов находят только локальный минимум вблизи начальной точки алгоритмы поиска глобального минимума в общем случае неизвестны Что делать: для функций одной переменной начальная точка определяется по графику случайный выбор начальной точки запуск алгоритма поиска с нескольких разных точек и выбор наилучшего результата

33 Минимум функции одной переменной Дано: на интервале [a,b] функция непрерывна и имеет единственный минимум. Найти: x * y = f (x) Принцип сжатия интервала: Как выбрать c и d наилучшим образом? ?

34 Минимум функции одной переменной Постоянное сжатие в обоих случаях: y = f (x) Коэффициент сжатия: Самое быстрое сжатие: при должно быть c d Метод «почти половинного» деления: – малое число нужно искать два значения функции на каждом шаге

35 Отношение «золотого сечения» Идея: выбрать c и d так, чтобы на каждом шаге вычислять только одно новое значение функции. Уравнение для определения g : Отношение «золотого сечения»:

36 Метод «золотого сечения» // // Gold поиск минимума функции («золотое сечение») // Вход: a, b – границы интервала // eps – точность // Выход: x, при котором f(x) имеет минимум // на интервале [a,b] // float Gold (float a, float b, float eps ) { float x1, x2, g = , R = g*(b - a); while ( fabs(b-a) > eps ) { x1 = b - R; x2 = a + R; if ( f(x1) > f(x2) ) a = x1; else b = x2; R *= g; } return (a + b) /2.; } // // Gold поиск минимума функции («золотое сечение») // Вход: a, b – границы интервала // eps – точность // Выход: x, при котором f(x) имеет минимум // на интервале [a,b] // float Gold (float a, float b, float eps ) { float x1, x2, g = , R = g*(b - a); while ( fabs(b-a) > eps ) { x1 = b - R; x2 = a + R; if ( f(x1) > f(x2) ) a = x1; else b = x2; R *= g; } return (a + b) /2.; } Как вычислять только одно значение на каждом шаге? ?

37 Функции нескольких переменных Найти, для которых при заданных ограничениях. Проблемы: нет универсальных алгоритмов поиска глобального минимума неясно, как выбрать начальное приближение (зависит от задачи и интуиции) Подходы: методы локальной оптимизации (результат зависит от выбора начального приближения) случайный поиск (без гарантии) методы глобальной оптимизации (для особых классов функций)

38 Метод покоординатного спуска Идея: выбираем начальную точку будем менять только x 1, а остальные переменные «заморозим», находим минимум по x 1 теперь будем менять только x 2, а остальные переменные «заморозим», … начальное приближение минимум простота, сводится к нескольким задачам с одной переменной можно двигаться к минимуму быстрее большой объем вычислений может не найти решение для сложных функций

39 Градиентные методы Градиент – это вектор, показывающий направление наискорейшего возрастания функции. Идея: выбираем начальную точку на каждом шаге двигаемся в направлении, противоположном градиенту минимум начальное приближение быстрая сходимость необходимо считать производные (по формуле или численно) плохо работает для быстро меняющихся функций градиент

40 Метод случайного поиска Идея: выбираем начальную точку пробуем сделать шаг в случайном направлении если значение функции уменьшилось, шаг удачный (запоминается) минимум начальное приближение простота реализации не требует вычисления производных много вариантов с самообучением хорошо работает для функций с многими локальными минимумами очень большой объем вычислений

41 Конец фильма