- •2. Решение нелинейных уравнений
- •1. Машинная арифметика и ошибки вычислений.
- •2. Решение нелинейных уравнений.
- •В уравнении
- •3. Численное интегрирование.
- •Результаты численного интегрирования тестовой задачи.
- •3.6. Адаптивные программы.
- •При решении системы из двух уравнений обычно применяют метод Крамера, согласно которому корни уравнений находятся по отношению двух определителей
- •Неизвестные параметры находим подстановкой
- •8. Решение Обыкновенных дифференциальных уравнений.
2. Решение нелинейных уравнений.
2.1. Постановка задачи.
Одной из часто встречающихся практических задач является вычисление корней нелинейного уравнения. В общем случае уравнение имеет вид
. (2.1)
Корнем уравнения называется такое значение аргумента х0, при котором это уравнение обращается в тождество. Графически корень уравнения соответствует значению аргумента х0, при котором график функции пересекает ось абсцисс.
Даже в случае обнаружения достаточно узкого участка, содержащего корень уравнения, точное решение можно найти только в исключительных случаях. Численные методы позволяют найти приближенное значение корня. Фактически всегда решается уравнение
или, (2.2)
где - некоторая положительная достаточно малая величина. Попытка поиска точного решения или, что то же самое, задание в программе=0 приводит к зацикливанию вычислительной программы.
Будем считать, что функция f(x) на интервале [a,b] непрерывна. При этом функция может не быть гладкой, т.е. содержать изломы, но на этом интервале не должна иметь разрывов.
Задача распадается на несколько отдельных задач:
оценить диапазон определения функции (диапазон значений, которые может принимать аргумент);
исследовать количество, характер и расположение корней;
найти приближенные значения корней;
выбрать из них интересующие и вычислить их с требуемой точностью.
Зависимость f(x) может выражаться с помощью системы уравнений и не иметь аналитического вида. Однако и в этом случае мы должны иметь возможность для любого х из допустимого диапазона найти соответствующее ему значение f(x).
2.2. Выбор диапазона поиска.
Если аналитический вид уравнения известен, то первая задача решается путем анализа вида функции f(x). Например, в уравнении
х не может принимать значения, равные или меньше -3, т.к. логарифм нуля и отрицательных чисел не существует.
В уравнении
х должен быть больше нуля, в уравнении
,
кроме того, необходимо учесть, что при х=2 функция имеет разрыв и это значение аргумента следует исключить из области определения функции.
Если аналитический вид функции не известен, то проблема нахождения области определения функции становится более сложной. Здесь могут оказаться полезными сведения о физических условиях задачи. Например, при описании процесса движения воды при давлении, близком к атмосферному, ее температура ограничена пределами 0-100С.
2.3. Выделение корней.
Для того, чтобы быть уверенным, что на некотором интервале находится корень уравнения, необходимо, чтобы на этом интервале функция меняла знак. Для поиска подобных интервалов диапазон определения функции разбивается на несколько достаточно больших интервалов одинаковой длины и затем вычисляются значения функции на их границах. Далее на интервалах, где функция меняет знаки, проводится поиск корня.
Блок-схема процедуры определения интервала приведена на рис.2.1.
Сначала задается интервал [a,b], внутри и на границах которого существует функция f(x) и может находиться один из корней. Тут же указывается шаг поиска dx. Затем вычисляется значение функции на левой границе интервала в точке а и организуется цикл, в котором рассчитывается значение функции на расстоянии dx от точки а. Если на участке [a,a+dx] функция поменяла знак или приняла нулевое значение, т.е. произведение f(a)*f(b)0, то это означает, что внутри участка [a,a+dx] существует корень уравнения. Если по условиям задачи требуется найти только один корень, то цикл на этом прекращается и производится вычисление корня с требуемой точностью одним из рассмотренных ниже методов. Если необходимо найти все корни уравнения, то выделение участков, содержащих корни, продолжается по аналогичной схеме.
При f(a)*f(b)>0 первоначальный интервал уменьшается на величину шага dx и проверяется, не достигла ли точка а правой границы интервала. Если этого не произошло, то цикл повторяется. Случай, когда был пройден весь интервал [a,b] и ни разу функция не поменяла знак, означает, что на данном интервале ни один корень уравнения не найден. При этом расчет приостанавливается и на экран компьютера выводится соответствующее сообщение.
Такая ситуация может быть обусловлена двумя причинами:
на интервале [a,b] действительно нет корней, в этом случае в зависимости от поставленной задачи необходимо согласиться с полученным сообщением или указать другой интервал поиска;
на интервале [a,b] существует четное количество корней, при этом была выбрана слишком большая ширина участков и парные корни оказались внутри одного участка. В этом случае можно повторить поиск с меньшим значением dx.
2.4. Метод половинного деления (метод дихотомии).
Приближенные значения корней уточняют различными итерационными методами, предполагающими последовательное приближение к искомому значению при выполнении однотипных операций. Если заранее известен интервал [a,b], на котором функция меняет знак, т.е. выполняется условие , то наиболее надежным является метод половинного деления. Блок-схема метода приведена на рис. 2.2.
Для определения корня этим методом необходимо указать интервал [a,b], на котором функция меняет знак, и допустимую погрешность . Затем вычисляются значения функции на границах интервала f(a) и f(b). После этого организуется цикл, в котором вычисляются середина интервала c=(a+b)/2 и значение функции f(c). Далее проверяется условие . При его выполнении принимается, что точкас является корнем уравнения, на экран выводится соответствующее сообщение и расчет прекращается. Если значение функции в точке с по абсолютной величине превосходит допустимую погрешность , то из двух половин выбирается та, на которой функция меняет знак, и цикл повторяется.
Недостатки метода:
Для начала расчета необходимо найти отрезок, на котором функция меняет знак.
Если на этом отрезке несколько корней, то заранее неизвестно, к какому из корней сойдется процесс, хотя к одному из них обязательно сойдется.
Метод не применим для решения систем уравнений.
Метод половинного деления используется, когда требуется высокая надежность счета, а скорость сходимости малосущественна.
2.5. Метод хорд.
В том случае, когда значение функции на одной границе интервала значительно ближе к нулю, чем на другой границе, более логично искать решение не на середине отрезка, а в области, расположенной ближе к первой границе.
откуда
. (2.3)
Метод хорд сохраняет все недостатки метода половинного деления, но при этом обычно обеспечивает более быструю сходимость.
2.6. Метод Ньютона.
Этот метод также называется методом касательных или методом линеаризации. Если функция f(x) в области определения имеет непрерывную производную, значения которой легко вычисляются, то можно значительно ускорить процесс приближения к корню.
,
откуда находится координата точки x1:
.
Поскольку за один ход не удается найти корень уравнения, то процесс повторяется, новые приближения определяются по рекуррентной формуле
(2.4)
до тех пор, пока не будет выполнено условие (2.2).
Блок-схема метода Ньютона приведена на рис. 2.6. Если нулевое приближение выбрано достаточно близко к корню, то скорость сходимости велика. К достоинствам этого метода следует отнести также то, что для начала расчета не требуется указывать диапазон, на котором функция меняет знак, а достаточно выбрать только начальную точку.
Согласно (2.4) получим формулу
,
которая позволяет вычислить квадратный корень, используя только операции сложения и деления. Именно эта формула запрограммирована в карманных калькуляторах.
2.7. Метод секущих.
В методе Ньютона необходимо вычислять производные . Это может потребовать много времени, может оказаться трудным или даже невозможным делом, особенно если вычисление включает, например, вычисление интеграла, решение дифференциального уравнения или если значение функции определяется результатом работы некоторого физического устройства.
Значение производной можно вычислить приблизительно по значениям функции в двух точках x1 и x2, как это показано на рис.2.8.
,
получим новую формулу для определения следующего приближения к корню
(2.5)
Блок-схема метода секущих представлена на рис.2.9.
От «разболтки» страхуются так называемым приемом Гарвика. Выбирают не очень малое 1, ведут итерации до выполнения условия и затем продолжают расчет до тех пор, покаубывают. Первое же возрастание обычно означает начало «разболтки», тогда расчет прекращают и последнюю итерацию не используют.
Следует отметить еще одну сторону метода секущих. Формула (2.5) идентична формуле (2.3) метода хорд:
.
Однако, метод касательных не требует указания диапазона изменения знака функции и при этом обеспечивает обычно большую скорость расчета, чем метод хорд. В свою очередь, метод хорд гарантирует нахождения корня и исключает возможность появления «разболтки», так как корень всегда находится внутри диапазона неопределенности и длина диапазона сокращается на каждом шаге.