Об алгоритмах интегрирования
Результат численного интегрирования — это не точное, а приближенное значение интеграла, определенное с погрешностью, которая зависит от встроенной константы TOL. Чем она меньше, тем с лучшей точностью будет найден интеграл, но и тем больше времени будет затрачено на расчеты. По умолчанию TOL=0.001. Для того чтобы ускорить вычисления, можно установить меньшее значение TOL. Если скорость расчетов имеет для Вас принципиальное значение, например при многократном вычислении интеграла внутри цикла, проявите осторожность, выбирая значение точности. Обязательно поэкспериментируйте на тестовом примере с характерной для Ваших расчетов подынтегральной функцией. Посмотрите, как уменьшение константы TOL сказывается на погрешности интегрирования, вычислив интеграл для разных ее значений и выбрав оптимальное, исходя из соотношения точность / скорость вычислений. Отдавайте себе отчет в том, что при вводе в редакторе Mathcad оператора численного интегрирования, Вы, фактически, создаете самую настоящую программу. Например, программой является первая строка листинга 7.1, просто большая часть ее скрыта от Вашего взора разработчиками компании MathSoft. В большинстве случаев об этом не приходится специально задумываться, можно полностью положиться на Mathcad. Но иногда может потребоваться умение управлять параметрами этой программы, как мы уже рассмотрели на примере выбора константы TOL. Кроме нее, пользователь имеет возможность выбирать сам алгоритм численного интегрирования. Для этого: · Щелкните правой кнопкой мыши в любом месте на левой части вычисляемого интеграла. · В появившемся контекстном меню выберите один из четырех численных алгоритмов (рис. 7.2).
Рис. 7.2. Выбор алгоритма численного интегрирования
Обратите внимание, что, перед тем как один из алгоритмов выбран впервые, как показано на рис. 7.2, флажок проверки в контекстном меню установлен возле пункта AutoSelect (Автоматический выбор). Это означает, что алгоритм определяется Mathcad, исходя из анализа пределов интегрирования и особенностей подынтегральной функции. Как только один из алгоритмов выбран, этот флажок сбрасывается, а избранный алгоритм отмечается точкой. Разработчиками Mathcad 11 запрограммированы четыре численных метода интегрирования: · Romberg (Ромберга) — дли большинства функций, не содержащих особенностей; · Adaptive (Адаптивный) — для функций, быстро меняющихся на интервале интегрирования; · Infinite Limit (Бесконечный предел) — для интегралов с бесконечными пределами (); · Singular Endpoint (Сингулярная граница) — для интегралов с сингулярностью на конце. Модифицированный алгоритм Ромберга для функций, не определенных на одном или обоих концах интервала интегрирования. Старайтесь все-таки оставить выбор численного метода за Mathcad, установив флажок AutoSelect (Автоматический выбор) в контекстном меню. Попробовать другой метод можно, например, чтобы сравнить результаты расчетов в специфических случаях, когда у Вас закрадываются сомнения в их правильности. Если подынтегральная функция "хорошая", т. е. не меняется на интервале интегрирования слишком быстро и не обращается на нем в бесконечность, то численное решение интеграла не принесет никаких неприятных сюрпризов. Приведем основные идеи итерационного алгоритма Ромберга, который применяется для большинства таких функций. · Сначала строится несколько интерполирующих полиномов, которые заменяют на интервале интегрирования подынтегральную функцию f(x). В качестве первой итерации полиномы вычисляются по 1,2 и 4 интервалам. Например, первый полином, построенный по 1 интервалу, — это просто прямая линия, проведенная через две граничные точки интервала интегрирования, второй — квадратичная парабола и т. д.
· Интеграл от каждого полинома с известными коэффициентами легко вычисляется аналитически. Таким образом, определяется последовательность интегралов от интерполирующих полиномов: ilf i2, i4,... Например, по правилу трапеций i1=(b-a)*((f (a)+f (b))/2 и т. д. · Из-за интерполяции по разному числу точек вычисленные интегралы ii, i2,... несколько отличаются друг от друга. Причем, чем больше точек используется для интерполяции, тем интеграл от интерполяционного полинома ближе к искомому интегралу, стремясь к нему в пределе бесконечного числа точек. Поэтому определенным образом осуществляется экстраполяция последовательности ilf i2, I4,... до нулевой ширины элементарного интервала. Результат этой экстраполяции J принимается за приближение к вычисляемому интегралу. · Осуществляется переход к новой итерации с помощью еще более частого разбиения интервала интегрирования, добавления нового члена последовательности интерполирующих полиномов и вычисления нового (N-ГО) приближения Ромберга JN. · Чем больше количество точек интерполяции, тем ближе очередное приближение Ромберга к вычисляемому интегралу и, соответственно, тем меньше оно отличается от приближения предыдущей итерации. Как только разница между двумя последними итерациями | JN-j11"11 становится меньше погрешности TOL или меньше TOL-|JN|, итерации прерываются, и JN появляется на экране в качестве результата интегрирования. Об алгоритме полиномиальной сплайн-интерполяции см.гл. 15.
Расходящихся интегралах Если интеграл расходится (равен бесконечности), то вычислительный процессор Mathcad может выдать сообщение об ошибке, выделив при этом оператор интегрирования, как обычно, красным цветом. Чаще всего ошибка будет иметь тип "Found a number with a magnitude greater than 10^307" (Найдено число, превышающее значение 10307) или "Can't converge to a solution" (Не сходится к решению), как, например, при попытке вычислить интеграл. Тем не менее, символьный процессор справляется с этим интегралом, совершенно правильно находя его бесконечное значение (листинг 7.4).
Листинг 7.4. Символьное вычисление расходящегося интеграла
Символьный процессор предоставляет замечательные возможности аналитического вычисления интегралов, в том числе зависящих от параметров и неопределенных интегралов, как показано в листингах 7.5 и 7.6.
Листинг 7.5. Символьное вычисление интеграла с переменным пределом
Листинг 7.6. Символьное вычисление неопределенного интеграла
При попытке численного решения задачи из листинга 7.4 методом, отличным от алгоритма вычисления интегралов с бесконечными пределами (Infinite Limit), будет получено неверное решение (листинг 7.7) — вместо бесконечности выдано большое, но конечное число, немного не дотягивающее до численной бесконечности, являющейся для вычислительного процессора просто большим числом. Отметим, что Mathcad в режиме автоматического выбора алгоритма (AutoSelect) предлагает именно алгоритм Infinite Limit.
Листинг 7.7. Плохо выбранный численный алгоритм неверно находит расходящийся интеграл
Кратные интегралы Для того чтобы вычислить кратный интеграл: · Введите, как обычно, оператор интегрирования. · В соответствующих местозаполнителях введите имя первой переменной интегрирования и пределы интегрирования по этой переменной. · На месте ввода подынтегральной функции введите еще один оператор интегрирования. · Точно так же введите вторую переменную, пределы интегрирования и подынтегральную функцию (если интеграл двукратный) или следующий оператор интегрирования (если более чем двукратный) и т. д., пока выражение с многократным интегралом не будет введено окончательно. Пример символьного и численного расчета двукратного интеграла в бесконечных пределах приведен в листинге 7.8. Обратите внимание, что символьный процессор "угадывает" точное значение интеграла pi а вычислительный определяет его приближенно и выдает в виде числа 3.142. Листинг 7.8. Символьное и численное вычисление кратного интеграла
Аккуратнее вводите в редакторе Mathcad кратные интегралы, если они имеют различные пределы интегрирования по разным переменным. Не перепутайте пределы, относящиеся к разным переменным. Если Вы имеете дело с такого рода задачами, обязательно разберитесь с листингом 7.9, в котором символьный процессор вычисляет двукратный интеграл. В первой строке пределы интегрирования [а, b] относятся к переменной у, а во второй строке — к переменной X.
Листинг 7.9. Символьное вычисление кратных интегралов Дифференцирование С помощью Mathcad можно вычислять производные скалярных функций любого количества аргументов, от 0-го до 5-го порядка включительно. И функции, и аргументы могут быть как действительными, так и комплексными. Невозможно дифференцирование функций только вблизи точек их сингулярности. Вычислительный процессор Mathcad обеспечивает превосходную точность численного дифференцирования. Но больше всего пользователь оценит возможности символьного процессора, который позволяет с легкостью осуществить рутинную работу вычисления производных громоздких функций, поскольку, в отличие от всех других операций, символьное дифференцирование выполняется успешно для подавляющего большинства аналитически заданных функций. В Mathcad для ускорения и повышения точности численного дифференцирования функций, заданных аналитически, автоматически задействуется символьный процессор.
Первая производная Для того чтобы продифференцировать функцию f (х) в некоторой точке: · Определите точку х, в которой будет вычислена производная, например х:=1. · Введите оператор дифференцирования нажатием кнопки Derivative (Производная) на панели Calculus (Вычисления) или введите с клавиатуры вопросительный знак <?>. · В появившихся местозаполнителях (рис. 7.3) введите функцию, зависящую от аргумента х, т. е. f(х), и имя самого аргумента х. · Введите оператор <=> численного или < -> > символьного вывода для получения ответа. Рис. 7.3. Оператор дифференцирования
Пример дифференцирования функции f(x)=cos(x)*ln(x) приведен в листинге 7.10. Листинг 7.10. Численное и символьное дифференцирование Не забывайте предварительно определять точку, в которой производится численное дифференцирование, как это сделано в первой строке листинга 7.10. Иначе будет выдано сообщение об ошибке, показанное на рис. 7.4, гласящее, что переменная или функция, входящая в выражение, ранее не определена. Между тем, символьное дифференцирование не требует обязательного явного задания точки дифференцирования В этом случае вместо значения производной (числа или числового выражения) будет выдана аналитическая зависимость (см. верхнюю часть рис. 7.4). Рис. 7.4. Ошибка в применении оператора дифференцирования
Конечно, можно, как и при использовании других операторов, предварительно определить функцию в отдельном выражении, а затем посчитать ее производную (см. листинг 7.11); или применить оператор дифференцирования для определения собственных функций пользователя (см. листинг 7.12).
Листинг 7.11. Символьное и численное дифференцирование функции пользователя
Листинг 7.12. Определение функции через оператор дифференцирования В обоих листингах первой строкой определяется функция f (x)=1/x. Во второй строке листинга 7.11 с помощью символьного процессора находится аналитическое выражение ее производной, а в оставшейся части, подобно листингу 7.10, сначала численно, а затем аналитически определяются значения этой производной в точке х=0.1. В листинге 7.12 через производную от f (х) определяется еще одна пользовательская функция д(х) и затем находится ее конкретное значение в той же точке х=0.1. Как Вы заметили, оператор дифференцирования, в основном, соответствует его общепринятому математическому обозначению. Однако в некоторых случаях при его вводе следует проявить осторожность. Рассмотрим один показательный пример, приведенный в листинге 7.13. Его первые две строки вычисляют производную sin(x) в точке х=0.5. Последняя строка демонстрирует неправильное применение оператора дифференцирования. Вместо вычисления производной sin(x) в той же точке, как этого можно было ожидать, получено нулевое значение. Это случилось потому, что аргумент функции sin(x) введен не в виде переменной х, а в виде числа. Поэтому Mathcad воспринимает последнюю строку как вычисление сначала значения синуса в точке х=0.5, а затем дифференцирование этого значения (т. е. константы) также в точке х=0.5, в соответствии с требованием первой строки листинга. Поэтому ответ, на самом деле, неудивителен — в какой точке ни дифференцируй константу, результатом будет ноль.
Листинг 7.1З. Пример правильного и неправильного применения дифференцирования
Для численного дифференцирования Mathcad применяет довольно сложный алгоритм, вычисляющий производную с колоссальной точностью до 7-8-го знака после запятой. Этот алгоритм (метод Риддера) описан во встроенной справочной системе Mathcad, доступной через меню Help (Справка). Погрешность дифференцирования не зависит от констант TOL или CTOL, в противоположность большинству остальных численных методов, а определяется непосредственно алгоритмом. Исключение составляют функции, которые дифференцируются в окрестности сингулярной точки; например для рассмотренной нами функции f (x)=1/x это будут точки вблизи х=о. При попытке найти ее производную при х=о будет выдано сообщение об одной из ошибок деления на ноль "Can't divide by zero" (Деление на ноль невозможно) или "Found a singularity while evaluating this expression. You may be dividing by zero" (Найдена сингулярность при вычислении этого выражения. Возможно, Вы делите на ноль). Если попробовать численно определить производную очень близко к нулю, например, при х=10-100, то может появиться сообщение об ошибке "Can't converge to a solution" (Невозможно найти решение). Встретившись с одной из упомянутых ошибок, присмотритесь повнимательнее к дифференцируемой функции и убедитесь, что Вы не имеете дело с точкой сингулярности.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|