Главная > Методы обработки сигналов > Численные методы
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

Заключение

Мы закончили обсуждение традиционных вопросов теории численных методов. При этом мы, возможно слишком часто, обращали внимание на «подводные камни», встречающиеся при применении того или иного численного метода. У читателя могло возникнуть превратное впечатление, что применение численных методов для решения реальных задач настолько сложная и безнадежная задача, что от него следует отказаться. Чтобы исправить такое впечатление, посмотрим на этот же вопрос с оптимистических позиций.

Существует большое число задач, где есть хорошо отработанные численные методы и созданные на их основе стандартные программы решения задач.

Стандартные программы решения многих типов прикладных задач входят в математическое обеспечение, поставляемое вместе с ЭВМ.

Если вам впервые встретилась единичная задача, то, как правило, целесообразнее воспользоваться стандартной программой или самому составить программу, основанную на простейшем методе решения. При решении единичных задач, требующих умеренного объема вычислений, часто идут на более чем -кратное увеличение объема вычислений по сравнению с наиболее эффективными методами, лишь бы побыстрее получить результат, воспользовавшись при этом стандартной программой или алгоритмами, для реализации которых можно быстро составить и отладить программу.

На практике регулярно встречаются задачи минимизации функций большого числа переменных, в которых применение стандартных программ не приводит к положительному результату. Тем не менее, опыт авторов показывает, что при решении новой задачи надо все равно начинать с попытки использовать стандартную программу. Если, например, в 30% случаев применение стандартных программ оказывается эффективным, то их применение заведомо можно считать оправданным даже в том случае, когда использование стандартной программы не приводит к положительному результату; при обращении к стандартной программе будет составлено большое число блоков окончательной программы и зачастую будет накоплена полезная информация о свойствах минимизируемой функции.

Среди «пионеров» использования вычислительной техники встречается убеждение, что чужими стандартными программами пользоваться нельзя и программу всегда следует писать самому, заново.

Такое суждение было оправдано на первоначальном этапе использования ЭВМ, когда теория численных методов была развита недостаточно и созданные на ее основе алгоритмы часто были ненадежными. При современном уровне теории численных методов и жестких требованиях к тестированию программ с такой точкой зрения согласиться нельзя.

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

Таким образом, на первоначальном этапе исследования задачи обычно мы имеем дело с простейшей моделью простейшими методами решения, часто основанными на использовании стандартных программ. Если же мы начинаем исследование задачи с изучения сложных моделей, то скорее всего мы поступаем в чем-то неправильно. Целесообразнее переходить к рассмотрению более сложных задач и применению более сложных методов, имея за плечами опыт использования ЭВМ при решении простейших задач простейшими методами, поскольку при такой последовательности действий использование более сложных численных методов уже не будет казаться чрезмерно трудной проблемой.

Рассмотрение самими математиками постановки прикладной задачи с ее истоков, с простейших моделей, еще важно и в связи со следующим обстоятельством. Часто, стремясь «приспособить» задачу для численного решения, специалист, не знакомый с численными методами и возможностями ЭВМ, исходит лишь из сложности внешнего вида математической постановки. В результате этого иногда

а) происходит замена исходной задачи задачей, не имеющей к ней отношения,

б) задача, передающаяся численному решению при возможностях современных ЭВМ, становится задачей, не поддающейся такому решению.

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

Во всех случаях целесообразно составлять программу поблочно. Дело в том, что при решении сколько-нибудь сложных задач мы заранее часто не можем сказать, будет ли выбранный нами метод решения подходящим для решения этой задачи.

Например, при решении краевой задачи для дифференциальных уравнений у нас может быть неуверенность в разумности выбора разностной схемы во внутренних точках или вблизи границы. Вычисления во внутренних точках и вблизи границы ведутся по различным формулам и поэтому лучше, чтобы они были выделены в отдельные блоки с тем, чтобы можно было производить независимую отладку методов. Также важно предусмотрен, возможность быстрого и удобного изменения параметров задачи, например шага сетки при решении дифференциальных уравнений или числа узлов квадратуры. Отладка программы и апробация метода решения задачи при малом числе узлов проходят быстрее и позволяют лучше использовать возможности ЭВМ. Например, при малом числе узлов можно быстро проверить сходимость итерационного процесса.

Иногда профессиональные программисты рекомендуют проводить отладку программы при помощи тестов. Берется минимально допустимое число узлов, при котором включаются в работу все блоки программы (и все циклы). При таком числе узлов задача решается без помощи написанной программы, а затем результаты расчета сравниваются с результатами расчета с помощью ЭВМ. Для типичных конечно-разностных методов решения дифференциальных уравнений минимальное число узлов по каждой оси, при котором включаются в работу все блоки и циклы, находится в пределах от 2 до 5.

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

Специалисты, имеющие большой опыт работы с ЭВМ, предпочитают отлаживать программу крупными модулями, сочетая отладку программы с проверкой качества метода (отладкой метода). Для этого стараются строить программы решения так, чтобы при определенных значениях параметров она превращалась в программу решения задачи с известным решением.

Например, уравнения движения снежной лавины при определенных значениях параметров превращаются в уравнения мелкой воды, для которых в случае кусочно-постоянных начальных данных известно точное решение (так называемое решение задачи о распаде разрыва). Сравнивая решение, полученное в результате расчетов, с точным решением, можно судить о правильности программы и качестве метода.

Построение решения задачи о распаде разрыва само по себе требует относительно большой вспомогательной работы. Вместо непосредственного построения такого решения для заданной системы часто поступают следующим образом.

Вместо конкретных значений коэффициентов системы ставятся произвольные параметры, производится одновременная подборка этих параметров и системы функций, которая может быть решением задачи о распаде разрыва.

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

Проиллюстрируем способы построения задач с известным частным решением на примере дифференциальных уравнений. Пусть решается краевая задача

в квадрате на границе квадрата Г ставится краевое условие

Возьмем некоторую функцию и вычислим функции

Краевая задача

будет задачей с известным точным решением .

Часто желательно иметь в распоряжении сеточную задачу с известным точным решением. Если, например, по простейшим явным формулам решается задача Коши, то такое решение легко вычислить непосредственно.

В случае краевых задач или при решении задачи Коши по неявным формулам часто целесообразно поступить как и выше. Строим сеточную задачу (с небольшим числом узлов), берем некоторую сеточную функцию и вычисляем

Сеточной задачей с известным точным решением является задача

Иногда возникает необходимость иметь в распоряжении сеточную задачу с большим числом узлов и с точным решением. В этом случае может оказаться целесообразным поручить ЭВМ вычисление . Часто такую задачу получают, взяв в качестве множество значений в узлах сетки некоторого многочлена невысокой (обычно ) степени. Степень многочлена выбирается из условия, чтобы погрешность аппроксимации дифференциальной задачи сеточной равнялась нулю.

Еще раз выделим основную идею описанного выше приема построения тестов. Вместо непосредственного построения теста для исходной задачи (построение решения по заданной правой части) строится тест для обратной задачи (по заданному решению строится правая часть) и он оказывается тестом для прямой задачи с той же структурой, но с другими числовыми данными.

Применение этого приема обычно существенно сокращает затраты на построение теста.

<< Предыдущий параграф Следующий параграф >>
Оглавление