Ортега Дж., Пул У. Введение в численные методы решения дифференциальных уравнений. Под ред. А.А.Абрамова (1986) (1095855), страница 28
Текст из файла (страница 28)
Точное решение (4.1.13) краевой задачи получается прн з = — 10(1+ е зо)/(1 — е зо) = — 10. Если мы решим задачу Коши со значением з, точным до двух десятичных Рис. 4.3. Решения точной и возмушеи- ной задач точное решение знаков, скажем при з = — 9,99, то получим картину, показанную на рис. 4.3. Вследствие этого для получения хорошего приближения к решению краевой задачи требуется значительно более точное значение з.
Проблема, конечно, связана с тем, что решение задачи Коши растет, как е, и, чтобы подавить эту быстро растущую компоненту, начальное усло1Ог вие приходится определять очень точно. Дополнительные замечания и ссылки 4.1 Метод стрельбы для решения двухточечных краевых задач описывается в большинстве книг по численному анализу. Особенно подробное изложение дано в книге ~65) .
Другим подходом к решению двухточечных краевых задач, основанным на сведении к задачам Коши, является метод инвариантного погружения. Этот метод, однако, приводит к задачам Коши для дифференциальных уравнений в частных производных, а не для обыкновенных дифференциальных уравнений. Детальное рассмотрение метода инвариантного погружения можно найти в книге ( 44) .
УПРАЖНЕНИЯ 4.1 4.1.1. Решите двухточечную краевую задачуу" +у'+У = — (х' +х+ 1),у(0) =у(1) = = 0 методом стрельбы, используя для решения задачи Коши один из методов гл. 2. Сравните ваши численные результаты с точным аналитическим решением задачи. (Указание: Для нахождения аналитического решения воспользуйтесь методом неопределенных коэффициентов для случая, когда правая часть является многочленом второй степени.) 4.1.2. Решите численно задачу о полете снаряда, задаваемую соотношениями (4.1.4), (4.1.5) и (4.1.7) .
Для решения задачи Коши используйте один из методов гл.2. 4.1.3. Попытайтесь решить задачу (4.1.11) — (4.1.12) тем же методом, которыЯ вы использовали в упражнении 4.1.2. Сравните ваши лучшие результаты с точным решением (4.1.15) и обьясните расхождение.'ПроаналнзируЯте также все трудности, с которыми вы встретились при получении численного решения. 114 4.2. Решение нелинейных уравнений с одним неизвестным В предыдущем разделе мы видели, что метод стрельбы с одним свободным параметром можно рассматривать как задачу о нахождении решения нелинейного уравнения 1"(х) = О. (4.2.1) Во многих других областях научного программирования также возникают задачи, решение которых сводится к отысканию корней уравнений или в более общем случае, к вопросу о решении систем нелинейных уравнений.
который мы обсудим в следующем разделе. Частный, но важный случай (4.2.1) возникает, когда функция Г(х) является полиномом Дх) = а„х" +... + а1х + ао. (4.2.2) В этом случае нэ основной теоремы алгебры следует, что г имеет ровно л комплексных нулей (вещественных или невещественных), если нули считать с учетом их кратности. Для произвольной функции ~ обычно трудно установить, сколько корней имеет уравнение (4.2.1): уравнение может не иметь корней, иметь один корень, конечное или бесконечное множество корней. Для того чтобы на заданном интервале (а, Ь) имелось не более одного корня, достаточно выполнения простого условия Г(х) >О для всех х Е(а, Ь) (4.2.3) (или ~ (х) ( О внутри этого интервала) .
Однако это условие не гарантирует существования карня на интервале. (В упражнениях 4.2.1 и 4.2.2 предлагается доказать эти утверждения.) Если, однако, функция .Г непрерывна и Да) <О, ДЬ)> О, (4.2.4) то интуитивно ясно (н строго доказано в известной теореме анализа), что Г должна иметь по крайней мере один корень на интервале (а, Ь) . 115 Давайте теперь предположим, что условие (4.2.4) выполняется, и для простоты будем считать, что на интервале (а, Ь) уравнение имеет ровно один корень. (Нет необходимости предполагать выполнение (4.2.3); ситуация может быть такой, как показано на рнс. 4.4.) Одним из простейших способов построения приближения к корню функции г" в данной ситуации является метод половинного деления, который представляет собой просто систематизацию метода, предложенного в предыдущем разделе для подбора начального условия.
Пусть хз = (и + Ь)/2 — средняя точка интервала (а, д), Вычислим значение ~'(х!) . Еслибы(х,) > О, то корень уравнения (4.2.1), который в дальнейшем будем обозначать через х', должен лежать между а и х,; если /(х ! ) < О, как в ситуации, показанной на рис. 4.4, то х' лежит между х, и Ь. Продолжим теперь этот процесс, вьщеляя интервал, в котором должен лежать корень х', и вычисляя значение /" в его средней точке с целью определения следующего интервала. Для функции, показанной на рис.
4.4, шаги процесса выглядели бы следующим образом. 1./'(х!) <О. Следовательно,х' Е(х„Ь). Поцожитьхз = (х! + Ь)/2. 2./(хз) > О. Следовательно,х' Е (х,, хз). Положить х, = (х, +ха)/2. 3./(хз) < О. Следовательно,х' е(хз, хз). Положить ха = (х, +ха)/2. 4. Г(ха) < О. Следовательно, х' е (ха, хз). Положить ха = (хз +ха)/2.
(4.2.5) Эта оценка получена при молчаливом предположении, что значения /"(х~) вычисляются точно. При счете на ЭВМ из-за ошибок округления (а возможно, и из-за ошибки дискретизации — вспомните, что вычисление функции /' в методе стрельбы требовало интегрирования задачи Коши) дело, естественно, обстоит не так. Заметим, однако, что в методе половинного деления используется не значение/(х1), а только знак /(х1), так что до тех пор, пока знак /(хз) определяется верно, метод нечувствителен к ошибкам при вычислении /(х;). Может возникнуть мысль, что ошибки округления не а !5оа 'Ю а„о!о!! 6$ и О о зс!а! х к с о а заи! и,!яи х а,аиз! а !ьв!ао С Л з 0,0500 — о,! 000 а,ио о;ют а,ти !ьооа а,ооа !,о!!о !,аог !,!аи !,аоа !,аов !,аю Рис.
4.5. График полинома ха — бх' + 15х4 — 20х' + 15х~ — бх + 1, полученный по программе на фортране с точностью 14 десятичных знаков. Теоретически этот полипом равен нулю при х = 1 и положителен во всех остальных точках. (Ыы благодарны за этот пример профессору Джону Раасу) 11б Ясно, что на каждом шаге метода половинного деления длина интервала, содержащего х*, уменьшается в 2 раза. Таким образом, через тп шагов длина интервала станет равной (Ь вЂ” и) 2 ~, откуда следует оценка погрешности текущего приближения к корню. Действительно, если х,„+, — средняя точка интервала после лт шагов, то 1х,и +1 — х'! <1Ь вЂ” а ! / 2 могут быть настолько велики, чтобы привести к изменению даже знака функции.
Однако, как показывает рис. 4.5, это не так. Если же знак ~(х~) оказывается неверным, то следующий подынтервал выбирается неправильно, и оценка (4.2.5) перестает быть справедливой. Ясно, что если максимум абсолютной величины ошибки, допускаемой при вычислении 7 в произвольной точке интервала (а, Ь), равен Е, то знак 7 будет определяться верно до тех пор, пока выполняется условие !ах) (>Е. Так как вблизи корня х' значения функции 7 близки к нулю, то можем утверждать и обратное: вблизи корня существует интервал неопределенности, ' Рис. 4.6.
Интервал неопределенности Рис. 4.7 скажем (х~ — е, ха + е), в котором знак 7 может определяться неправильно (см. рис. 4.6). Когда наши приближения попадают в этот интервал, дальнейшее их продвижение к корню становится весьма проблематичным. К сожалению, установить интервал неопределенности заранее оказывается крайне сложно. Он зависит от- неизвестного значения корня х', оттого, насколько пологим является график функции в окрестности корня, и от величины погрешности, допускаемой при вычислении 7. С другой стороны, попадание в этот интервал обычно можно установить в ходе расчетов по неустойчивому поведению итераций; когда это происходит,нет никакого смысла продолжать вычисления дальше.
Тот факт, что знак функции 7 вблизи корня может определяться неверно, влияет не только на метод половинного деления, но и на другие методы, которые мы будем рассматривать. Позднее, в этом разделе, будет приведен соответствующий пример. Недостатком метода половинного деления является то, что он может быть весьма медленным. Чтобы сократить начальный интервал, скажем, в 10' раз, что соответствует точности примерно в 6 десятичных знаков, согласно оценке погрешности (4.2.5) мы должны ожидать, что потребуется и =6/1ой~о2 = 20 вычислений значений 7". Если, как в методе стрельбы, каждое вычисление 3" связано с большими затратами машинного времени, то возникает желание по возможности сократить число этих вычислений.
Метод половинного деления можно ускорить, если использовать значения функции 7 (а не только их знаки) . Простейшим способом учета этой информации является выбор в качестве следующей точки х;+, нуля линейной функции, которая интерполирует Дх) по точкам х; ~ и х;. Это показано на рис. 4.7.
Из этого рисунка, где изображена несколько благоприятная 117 ситуация, видно, что х;+1 является значительно лучшим приближением к корню, чем средняя точка интервала (х;,, х;) . Линейная интерполяционная функция имеет вид (х — х;, ) (х — х;) 1(х) = Дхг) — Дх;, ) (х;-х;,) (х;-х;,) (4.2.6) (это легко проверить непосредственно, нли можно обратиться к разде- лу 2.3) .
Корень этой функции определяется по формуле х;,г(х;) — хЯх; 1) х;+ ~ (4.2.7) Дх;) — Яхг,) Мы теперь можем поступать, как в методе половинного деления, запоминая х;,, и либо х;, либо х; 1, так чтобы значения функции в двух этих точках были разного знака. Это так называемый метод ложного положения. В противоположность этому в методе секущих мы просто последовательно проводим итерации по формуле (4.2.7), используя при этом значения двух последних приближений, независимо от того, имеют ли значения функций в этих точках разные знаки или нет.