Решение нелинейных алгебраических уравнений

advertisement
Лабораторная работа 3
Решение нелинейных алгебраических уравнений
1. Постановка учебно-практической задачи
Написать и оформить в виде модуля (Unit) набор функций, с помощью которых
можно находить решения нелинейных алгебраических уравнений вида:
F(x) = 0.
Функции должны обеспечить возможность:
 задания вида уравнения F(x) = 0;
 задания интервала поиска решения и начального приближения;
 задания требуемой точности решения;
 выбор метода решения.
2. Учебно-методические цели работы
Выполнение лабораторной работы направлено на:
 практическое освоение простейших приемов программирования численных
методов;
 освоение приемов применения разработанного и библиотечных модулей для
решения исследовательских задач;.
3. Рекомендации по выполнению работы
При разработке модуля решения нелинейных уравнений следует обратить внимание
на общую схему численного метода решения нелинейных алгебраических уравнений и
особенности отдельных методов.
3.1. Общая схема численного метода решения нелинейных уравнений
Численное решение нелинейных алгебраических уравнений основано на построении
последовательности значений вида: { Xi }, i = 0, 1, 2, ..., сходящейся к решению уравнения.
Эта последовательность строится с помощью итерационного процесса вида:
Xn+1 = Pm(Xn, Fn),
где Fn = F(Xn), а итерационная формула Pm определяется применяемым методом решения
уравнения. Для некоторых методов в формулу Pm могут входить значения приближений,
полученных на более ранних шагах итерационного процесса: Xn-1, Xn-2, ..., Fn-1, Fn-2,... и
значения производных функции F(X) в этих приближениях.
Условием завершения итерационного процесса поиска решения является:
Abs( F(Xn) )  .
Значение >0 задается заранее как требуемая точность решения. Поскольку на практике
условия сходимости методов решения выполняются не всегда, и итерационный процесс
может идти бесконечно, то наряду с требуемой точностью решения задается nmax максимальное количество итераций.
Для запуска итерационного процесса необходимо задать начальное приближение X0.
Кроме того, задается интервал [a, b], на котором надо искать решение уравнения. Важным
также является вопрос о существовании решения на интервале [a, b] и его единственности
(некоторые методы гарантируют сходимость только при единственности решения на
интервале). Простейшим достаточным условием существования решения является:
 функция F(X) непрерывна на интервале [a, b];
 F(a)*F(b) <= 0.
Таким образом, задача на численное решение нелинейного уравнения ставится так: на
интервале [a, b] с точностью , но не более чем за nmax шагов, найти решение уравнения
F(X) = 0, используя X0 в качестве начального приближения.
3.2. Метод дихотомии
Формула
метода
дихотомии
(деления
пополам)
имеет
вид:
д
Xn = P (Xn-2, Xn-1, Fn-2, Fn-1), где: Fn-2* Fn-1  0, т.е. отрезок [Xn-2, Xn-1] содержит корень
уравнения. На n-ом шаге метода отрезок [Xn-2, Xn-1] делится пополам, и в качестве
следующего отрезка берется та половина отрезка, которая содержит корень уравнения:
X = (Xn-2 + Xn-1) / 2;
если F(X)*Fn-1  0,
то:
X n= Xn-1, Xn-1 = X
иначе:
Xn-1 = Xn-2, Xn = X
В качестве начального отрезка берется отрезок [a, b].
Рис. 5.1. Метод секущих
3.3. Метод секущих
Метод секущих (метод хорд) отличается от метода дихотомии тем, что отрезок [Xn-2,
Xn-1] делится не пополам, а пропорционально значениям функции на концах отрезка, т.е.:
X = Xn-2 - (Xn-1 - Xn-2) / (Fn-1 - Fn-2) * Fn-2.
Геометрически (см. рис. 5.1) точка X изображается как точка пересечения прямой,
соединяющей точки (Xn-1, Fn-1), (Xn-2, Fn-2) с осью X.
Рис. 5.2. Метод касательных
3.4. Метод касательных (метод Ньютона)
В методе Ньютона каждое следующее приближение ищется как решение линейного
уравнения вида: Fn-1 + Fn-1 * (X - Xn-1) = 0, которое является отрезком степенного ряда
функции F(X) в окрестности точки Xn-1. Формула метода Ньютона имеет вид:
Xn = Xn-1 - Fn-1/Fn-1
Геометрически (см. рис. 5.2) точка Xn изображается как точка пересечения касательной к
графику функции F(X) в точке Xn-1 с осью X.
4. Рекомендации по организации программного интерфейса
Функции решения нелинейных алгебраических уравнений следует оформить в виде
отдельного модуля Solver. Рекомендуемый состав заголовочного файла этого модуля
состоит в следующем.
// Модуль решения нелинейных уравнений
typedef
double (TFun)(double);
// Найти решение нелинейного уравнения
long Root(double x0, double a, double b, double eps,
root);
// Вход :
//
x0
- начальное приближение решения
//
a, b
- интервал поиска решения
//
eps
- требуемая точность решения
//
kStp
- максим. к-во итераций
//
Fun
- функция левой части ур-я
// Выход :
//
root
- полученное решение
//
возвращаемое значение – код завершения:
//
= -1 - нарушение условия Fun(a)*Fun(b)<=
//
> 0 - к-во итераций, за которое решение
//
= 0 - выполнено kStp итераций, заданная
5. Формулировка заданий
Основное задание
1. Написать программу, включающую:
long kStp, TFun Fun, double&
0
получено с заданной точностью
точность не достигнута

основной модуль в составе: тестовой функции вычисления значений правой
части решаемого уравнения и головной функции main, обеспечивающей ввод
исходных данных задачи и вывод результата;
 модуль Solver, обеспечивающий решение нелинейного уравнения методом
дихотомии.
2. Провести сравнительный анализ сходимости метода дихотомии для различных
начальных значений.
Дополнительное задание
1. В модуль Solver добавить функции решения нелинейного уравнения методом
секущих и методом касательных. Для этого в заголовочную часть модуля добавить
описание типа метода (enum Method) и функцию установки метода решения
(SetMethod):
enum Method {m_dih, m_sek, m_tan};
// m_dih – метод дихотомии
// m_sek – метод секущих
// m_tan – метод касательных
// Установить метод pешения уравнения
void SetMethod(Method meth);
2. В основной модуль добавить несколько тестовых функций вычисления правых
частей уравнения. Обеспечить возможность выбора решаемого уравнения с
передачей соответствующей функции через указатель.
3. Провести сравнительный анализ сходимости методов для различных уравнений и
различных начальных значений.
Download