Министерство образования РФ Астраханский государственный педагогический университет Ю. Ю. Тарасевич Численные методы на Mathcad’е 1 0.5 f( z ) L( z ) y 0 j 0.5 1 1 0.5 0 z,z,x 0.5 j Астрахань, 2000 1 ББК 22.19 Ю. Ю. Тарасевич Численные методы на Mathcad’е. – Астраханский гос. пед. ун-т: Астрахань, 2000. Ю. Ю. Тарасевич, 2000 2 Введение Сегодня не часто вспоминают о том, что компьютеры были созданы в первую очередь для проведения научных расчетов. До сих пор научные и инженерные расчеты остаются одной из важнейших, хотя, пожалуй, и не самой бросающейся в глаза сфер приложения компьютеров. За многие годы накоплены обширные библиотеки научных подпрограмм, в первую очередь, на языке FORTRAN, предназначенных для решения типовых задач (задачи линейной алгебры, интегрирование, решение дифференциальных уравнений и т. д.). Кроме того, имеется целый ряд различных математических пакетов, реализующих разнообразные численные методы, а так же способных производить аналитические математические преобразования. Пожалуй, наиболее известными сегодня являются следующие пакеты: Mathematica (фирма Wolfram Research), Maple (фирма Waterloo Maple Inc), Matlab (фирма The MathWorks), Mathcad (фирма MathSoft Inc). Первые два фактически являются языками для проведения символических математических преобразований. Пакета Mathematica, по-видимому, является сегодня наиболее популярным в научных кругах, особенно среди теоретиков. Пакет предоставляет широкие возможности в проведении символических (аналитических) преобразований, однако требует значительных ресурсов компьютера. Система команд пакета во многом напоминает какой-то язык программирования. Пакет Maple также весьма популярен в научных кругах. Кроме аналитических преобразований пакет в состоянии решать задачи численно. Характерной особенностью пакета является то, что он позволяет конвертировать документы в формат LaTeX – стандартный формат подавляющего большинства научных издательств мирового класса. Кроме того, ряд других программных продуктов используют интегрированный символический процессор Maple. Например, пакет подготовки научных публикаций Scientific WorkPlace (фирма TCI Software Research) позволяет обращаться к символическому процессору Maple, производить аналитические преобразования и встраивать полученные результаты в документ. Подобно упомянутым выше пакетам, пакет Matlab фактически представляет из себя своеобразный язык программирования высокого уровня, ориентированный на решение научных задач. Характерной особенностью пакета является то, что он позволяет сохранять документы в формате языка программирования С. Пакет Mathcad популярен, пожалуй, более в инженерной, чем в научной среде. Характерной особенностью пакета является использование привычных стандартных математических обозначений, то есть документ на экране выглядит точно так же обычный математический расчет. Для использования пакета не требуется изучать какую-либо систему команд, как, например, в случае пакетов Mathematica или Maple. Пакет ориентирован в первую 3 очередь на проведение численных расчетов, но имеет встроенный символический процессор Maple, что позволяет выполнять аналитические преобразования. В последних версиях предусмотрена возможность создавать связки документов Mathcad с документами Mathlab. В отличие от упомянутых выше пакетов, Mathcad является средой визуального программирования, то есть не требует знания специфического набора команд. Простота освоения пакета, дружественный интерфейс, относительная непритязательность к возможностям компьютера явились главными причинами того, что именно этот пакет был выбран для обучения студентов численным методам. В последнее время просматривается тенденция к сближению и интеграции различных пакетов. Например, последние выпуски пакетов Mathematica и Maple имеют хорошие возможности для визуального программирования; в Matlab включена библиотека аналитических преобразований Maple; Mathcad позволяет работать совместно с Matlab. В настоящем пособии мы рассмотрим на многочисленных примерах, каким образом решаются на Mathcad’e разнообразные задачи численного анализа (решение систем линейных и нелинейных уравнений, решение дифференциальных уравнений, аппроксимация функций и т. д.). Пособие не является ни учебником по численным методам, ни руководством по Mathcad’у. Предполагается, что читатель имеет представление об основных численных методах и умеет пользоваться пакетом Mathcad хотя бы на самом примитивном уровне. Численные методы обсуждаются лишь в том объеме, который необходим для понимания работы соответствующих функций Mathcadа. Необходимые ссылки как на учебники по численным методам, так и на руководства по пакету Mathcad читатель может найти в списке литературы. Отбор численных методов, включенных в пособие, с одной стороны отражает программу курса «Численные методы», а с другой стороны имеет в виду курс «Математическое моделирование и решение задач на ЭВМ», в котором многие из приведенных методов будут активно использоваться для решения задач компьютерного моделирования. Кроме того, к сожалению, существует настоящая пропасть между теми численными методами, которые описаны в общедоступных учебниках, и теми, которые применяются на практике. В замечательной, хотя и недоступной для большинства студентов книге "Numerical Recipes in C", авторы замечают: "Увы, времена меняются; <…> классические формулы почти абсолютно бесполезны. Они являются музейными экспонатами, хотя и прекрасными". В данном пособии делается попытка перебросить мостик через эту пропасть. На момент написания данного пособия последней версией Mathcadа является версия Mathcad 2000 (предыдущая версия – Mathcad 8). Поскольку данная версия еще не получила повсеместного распространения, возможности, реализованные только в этой версии, оговариваются в пособии особо. 4 Глава 1. Нахождение корней уравнений Введение Одним из наиболее распространенных методов поиска корней уравнений является метод Ньютона и его модификации. Пусть требуется решить уравнение f ( x) 0 . Будем считать, что x является решением уравнения. Разложим функцию f(x) в ряд в точке x0 близкой к точке x и ограничимся только первыми двумя членами разложения. f ( x) f ( x0 ) f ( x0 )( x x0 ) Поскольку x – корень уравнения, то f ( x) 0 . Следовательно, f ( x0 ) f ( x0 ) Таким образом, если нам известно приближенное значение корня уравнения, то полученное уравнение позволяет его уточнить. Понятно, что процесс уточнения можно повторять многократно, до тех пор, пока значение функции не будут отличаться от нуля на величину меньшую, чем заданная точность поиска. Очередное k-е приближение находится по формуле f ( xk ) xk 1 xk f ( xk ) Ограничившись в разложении только первыми двумя членами, мы фактически заменили функцию f(x) на прямую линию, касательную в точке x0, поэтому метод Ньютона еще называют методом касательных. Далеко не всегда бывает удобно находить аналитическое выражение для производной функции. Однако, в этом и нет особой необходимости: поскольку на каждом шаге мы получаем приближенное значение корня, можно для его вычисления использовать приближенное значение производной. f ( x x) f ( x) f ( x x) f ( x) f ( x) lim x 0 x x В качестве малой величины x можно взять, например, заданную точность вычислений , тогда расчетная формула примет вид f ( xk ) xk 1 xk (1.1) f ( xk ) f ( xk ) С другой стороны, для вычисления производной можно воспользоваться значениями функции, полученными на двух предыдущих шагах, f ( xk )( xk xk ) f ( xk ) xk 1 f ( xk 1 ) xk xk 1 xk (1.2) f ( xk ) f ( xk 1 ) f ( xk ) f ( xk 1 ) В таком виде метод называется методом секущих (secant method). При этом, однако, возникает проблема с вычислением первого приближения. x x0 5 Обычно полагают, что x1 x0 , то есть первый шаг вычислений проводится с использованием формулы (1.1), а все последующие – с использованием формулы (1.2). Именно эта вычислительная схема реализована в пакете Mathcad. Используя метод секущих, мы не можем гарантировать, что корень находится между двумя последними приближениями. Можно, однако, для вычисления очередного приближения использовать границы интервала, на котором функция меняет знак. Такой метод называется методом хорд (false position method). Идея метода секущих развивается в методе Мюллера. Однако в этом методе для нахождения очередного приближения используются три предыдущие точки. Иными словами, метод использует не линейную, а квадратичную интерполяцию функции. Расчетные формулы метода следующие 1: x xk 1 q k xk 1 xk 2 A qf ( xk ) q(1 q ) f ( xk 1 ) q 2 f ( xk 2 ) (1.3) B (2q 1) f ( xk ) (1 q) f ( xk 1 ) q f ( xk 2 ) 2 2 C (1 q) f ( xk ) 2C (1.4) xk 1 xk ( xk xk 1 ) 2 B B 4 AC Знак перед корнем выбирается так, чтобы абсолютное значение знаменателя было максимальным. Поскольку поиск корня заканчивается, когда выполнится условие f ( xk 1 ) , то возможно появление ложных корней. Например, для уравнения x2 0.0001 0 ложный корень x 0 появится в том случае, если точность поиска задана меньше, чем 0,0001. Увеличивая точность поиска, можно избавиться от ложных корней. Однако не для всех уравнений такой 1 0 , которое, очевидно, не подход работает. Например, для уравнения x имеет действительных корней, для любой, сколь угодно малой точности найдется значение x, удовлетворяющее критерию окончания поиска. Приведенные примеры показывают, что к результатам компьютерных вычислений всегда нужно относиться критически, анализировать их на правдоподобность. Чтобы избежать "подводных камней" при использовании любого стандартного пакета, реализующего численные методы, нужно иметь хотя бы минимальное представление о том, какой именно численный метод реализован для решения той или иной задачи. 1 Получите эти формулы самостоятельно по аналогии с методом Ньютона, оставив в разложении Тейлора первые три слагаемых. 6 В том случае, когда известен интервал, на котором расположен корень, можно воспользоваться иными методами нахождения решения уравнения. В методе Риддера (Ridder’s method) вычисляют значение функции в середине интервала x3 ( x2 x1 ) 2 . Затем ищут экспоненциальную функцию такую, что f ( x1 ) 2 f ( x3 )eQ f ( x2 )e 2Q 0. Затем применяют метод хорд, используя значения f ( x1 ), f ( x3 )eQ , f ( x2 )e 2Q . Очередное значение вычисляют по формуле sign f ( x1 ) f ( x2 ) f ( x3 ) x4 x3 ( x3 x1 ) (1.5) f ( x3 ) 2 f ( x1 ) f ( x2 ) Метод Брента (Brent method) соединяет быстроту метода Риддера и гарантированную сходимость метода деления отрезка пополам. Метод использует обратную квадратичную интерполяцию, то есть ищет x как квадратичную функцию y. На каждом шаге проверяется локализация корня. Формулы метода достаточно громоздки и мы не будем их приводить. Особые методы применяют для поиска корней полинома. В этом случае могут быть найдены все корни. После того как один из корней полинома найден, степень полинома может быть понижена, после чего поиск корня повторяется. Метод Лагерра (Laguerre’s method) основывается на следующих соотношениях для полиномов Pn ( x) ( x x1 )( x x2 ) ( x xn ) ln Pn ( x) ln x x1 ln x x2 d ln Pn ( x) dx 1 1 x x1 x x2 ln x xn P 1 n G x xn Pn 2 P P 1 1 1 n n H dx 2 ( x x1 ) 2 ( x x2 ) 2 ( x xn ) 2 Pn Pn Предполагают, что корень x1 находится на расстоянии a от текущего приближения, в то время как все другие корни находятся на расстоянии b: x x1 a; x xi b, если i 2,3, , n . Тогда d 2 ln Pn ( x) 1 n 1 G a b , 1 n 1 H a2 b2 откуда a n G (n 1)(nH G 2 ) . 7 Знак перед корнем выбирают с таким расчетом, чтобы получить наибольшее значение знаменателя. Еще один метод, который применяют для поиска корней полиномов, – метод сопровождающей матрицы (companion matrix). Можно доказать, что матрица a a a an 1 n2 1 0 a an an an n 1 0 0 0 A , 1 0 0 0 0 1 0 0 n называемая сопровождающей матрицей для полинома P( x) ai xi , имеет i 0 собственные значения равные корням полинома. Напомним, что собственными значениями матрицы называются такие числа , для которых выполняется равенство Ax x или P( x) det(A I) 0 . Существуют весьма эффективные методы поиска собственных значений, о некоторых из них мы будем говорить далее. Таким образом, задачу поиска корней полинома можно свести к задаче поиска собственных значений сопровождающей матрицы. 1.1. Функции произвольного вида Найдем нули функции cos( x) f( x) ( x 5) 2 на интервале x=[–2,7], используя Mathcad Изобразим сначала функцию на графике. x 2, 1.95.. 7 0.05 f( x ) 0 0.05 2 1 0 1 2 3 4 5 6 7 8 x На заданном интервале функция три раза обращается в ноль. Определим нули функции, используя встроенную функцию root(f(x),x). Первый 8 аргумент – функция, нуль которой необходимо найти, второй – переменная, которую необходимо варьировать. (Вообще говоря, функция f может быть функцией многих переменных и необходимо указывать, по какой именно переменной мы ищем нуль функции.) Кроме того, необходимо задать начальное приближение поиска. Точность вычислений задается встроенной переменной TOL. По умолчанию ее значение равно 0,001. Это значение можно изменить либо через меню Math/Built–In Variables или непосред9 ственно в тексте документа: TOL 10 Задаем начальное приближение: x 1 И вычисляем корень: root( f( x) , x) = 1.570796327 Если требуется найти несколько корней, как в нашей задаче, то имеет смысл определить новую функцию: r( x) root( f( x) , x) Функция r(x) возвращает значение корня ближайшее к x2, то есть начальное приближение мы задаем через аргумент функции. Задаем вектор начальных приближений x и находим соответствующие им корни X: xi Xi Xi r xi i 0.. 2 1 1 4 1.570796327 1.570796327 4.712388981 Для данного примера корни легко могут быть найдены аналитически. Они равны на заданном интервале /2/2 и Полученный численный результат с заданной точностью совпадает с точным решением. Определение новой функции целесообразно и в том случае, когда мы хотим исследовать зависимость решения от параметра. Пусть функция зависит от параметра a cos( a. x) z( a , x) root ,x 2 ( x 5) Первый аргумент функции z задает значение параметра, второй – начальное приближение. Найдем корни уравнения при значениях параметра 1 и 2. z( 1, 1) = 1.571 z( 2, 1) = 0.785 Если мы хотим получить комплексный корень, то начальное приближение следует задавать комплексным: 2 К сожалению, это не всегда так. Если начальное приближение выбрано неудачно и значение производной в этой точке близко к нулю, то, вообще говоря, найденный корень может быть не ближайшим к начальному приближению. В качестве примера решите самостоятельно задачу поиска корня уравнения sin( x) 0 , выбрав в качестве начального приближения чис- ло близкое к 2 . Чем ближе к 2 будет выбранное значение, тем более далекий от 0 корень мы будем получать. 9 z( i , i ) = 7.459 10 9 + 1.571i 1.2. Нахождение корней полиномов Для нахождения корней полиномов имеется встроенная функция polyroots(a). Аргументом функции является вектор коэффициентов полинома a0 a1 x a2 x 2 an x n , то есть для уравнения 3x2 2 x 1 0 вектор а имеет вид ai 0.333 0.471i i 0.. 2 polyroots( a ) = 0.333 + 0.471i 1 2 3 Если в полиноме отсутствуют некоторые степени, то на соответствующих местах следует писать 0. Пусть требуется найти корни полинома p ( x) x 3 2 x 2 1 1.618 ai polyroots( a ) = 1 i 0.. 3 1 0 2 1 0.618 Коэффициенты полинома могут быть и комплексными. 1.3. Нахождение корней уравнений путем символических преобразований. Во многих случаях, Mathcad позволяет найти аналитическое решение уравнения. Для этого необходимо воспользоваться пунктом Solve for Variable из пункта меню Symbolic. Для того чтобы найти решение уравнения необходимо записать выражение и выделить в нем переменную (поставить указатель курсора возле переменной). Это необходимо для того, чтобы показать, какая именно величина является переменной, а какая – фиксированным параметром. После этого выбираем из пункта меню Symbolic подпункт Solve for Variable cos( a. x) 1. решение готово ––> 2 2 a ( x 5) Обратите внимание! В данном случае был найден только один корень, хотя, очевидно, их бесконечно много. В случае полинома Mathcad, а точнее – встроенный символический 10 процессор Maple – находит все корни. 1 2 Для этого примера найдено 2 корня, хотя x 2. x 1 –> 1 i 2 они и вырождены. Пример с комплексными корнями: x 1 ––> i 1.4 Поиск корней уравнений в Mathcad 2000. Mathcad 2000 представляет ряд дополнительных возможностей для поиска корней уравнений. Функция root(f(var1, var2, ...),var1, [a, b]) имеет теперь два необязательных аргумента a и b, которые определяют границы интервала, на котором следует искать корень. На концах интервала [a,b] функция f должна менять знак (f(a)f(b)<0). Задавать начальное приближение для корня не нужно. В данном варианте функция root использует алгоритм Риддера и Брента. Продемонстрируем использование расширенного варианта поиска корней на примере функции 2 f ( x) 0.04 x sin( x) Для оценки местоположения корней построим график этой функции x 3 3 0.1 3 4 2 f ( x) 10 8 6 4 2 0 2 4 6 8 10 2 x root( f ( x) x 1 8) 0 root( f ( x) x 10 0.1) 2.818 На интервале [1,8] функция имеет два корня. Mathcad 2000 смог найти только один из них. Дополнительные возможности появились и для нахождения корней полиномов. Функция polyroots может использовать два различных алгоритма поиска корней – метод Лагерра и метод сопровождающей матрицы. Переключение методов осуществляется в контекстном меню, которое вызывается нажатием правой кнопки мыши, когда указатель установлен на имя функции. 11 Глава 2. Решение систем уравнений и неравенств. ВВЕДЕНИЕ Формально задача поиска решения системы уравнений f1 ( x1 , x2 , , xn ) 0 f 2 ( x1 , x2 , , xn ) 0 f n ( x1 , x2 , , xn ) 0 может быть записана точно так же, как и задача поиска корня одного уравнения f (x) 0 , где f ( f1 , f 2 , , f n ) и x ( x1 , x2 , , xn ) . Вблизи точки x каждая из функций f i может быть разложена в ряд Тейлора f i x j j 1 x j n f i (x x) f i (x) или в векторной форме f (x x) f (x) Jx би с элементами f Ji, j i x j , где J – матрица Яко- Ограничиваясь только первыми двумя членами разложения и полагая, что f (x x) 0 , получаем уравнение x J 1f (x) . Таким образом, мы получаем схему для уточнения решения системы уравнений, аналогичную методу Ньютона для случая одного уравнения x( k 1) x( k ) J 1f (x( k ) ) (2.1) Поскольку вычислять матрицу Якоби на каждом шаге достаточно трудоемко, то обычно ее элементы вычисляют приближенно или используют одни и те же значения на нескольких шагах. Одну из разновидностей метода Ньютона – метод Левенберга-Маркардта – использует Mathcad. 2.1. Решение систем линейных и нелинейных уравнений и неравенств. Системы линейных и нелинейных уравнений и неравенств позволяет решать на Mathcad блок given в сочетании с функцией Find. Внимание! В блоке given записывается система уравнений и/или неравенств, подлежащих решению. Система уравнений и/или неравенств должна быть записана после или 12 правее слова given. При записи уравнений вместо знака = следует набирать Ctrl+= Перед словом given необходимо указывать начальные приближения для всех переменных. Блок given не пригоден для поиска индексированных переменных. Если мы хотим найти комплексный корень, следует задавать комплексное начальное приближение. Признаком окончания системы служит функция Find, если мы хотим найти точное решение системы, либо функция Minerr, если система не может быть решена точно, и мы хотим найти наилучшее приближение, обеспечивающее минимальную погрешность. Функции Minerr и Find должны иметь столько же или меньше аргументов, сколько уравнений и неравенств содержит блок given. Если окажется, что блок содержит слишком мало уравнений или неравенств, то его можно дополнить тождествами или повторяющимися выражениями. В том случае, если решение не может быть найдено при заданном выборе начального приближения, появится сообщение в красной рамке Did not find solution – решение не найдено. Зададим начальные приближения и решим систему нелинейных уравнений. x 1 y 1 5 2 2 given x y 23 x . y 50 Find( x, y ) = 2 Если необходимо найти решение при различных начальных приближениях, имеет смысл определить новую функцию 2 2 x y 23 x . y 50 given f( x, y ) Find( x, y ) Обратите внимание! В этом случае не нужно задавать начальные приближения перед началом блока given – Find. Начальные приближения задаются в качестве аргументов функции f(x,y) 5 5 f( 1 , 1 ) = f( 1 , 1 ) = 2 2 f( i , 1 ) = 1.414i 1.414i f( i , 1) = 25 25 Подобным же образом можно решать системы, зависящие от параметра. given g( 1, 1, 1) = 2 x y 0.707 0.707 2 2 R y x g( x, y , R) g( 1 , 1 , 1 ) = Find( x, y ) 0.707 0.707 13 g( 1, 1, 2) = 1.414 g( 1 , 1 , 2 ) = 1.414 1.414 1.414 2.2. Решение систем линейных уравнений и неравенств. Совершенно аналогично решаются системы линейных уравнений. Однако в том случае, когда система линейных уравнений невырождена, то есть ее определитель отличен от нуля, более изящным (хотя и не самым эффективным с точки зрения вычислительной математики) является матричный способ решения. Решим линейную систему одним и другим методом. x 2 y 1 z 2 given 2. x 4. y 3. z 1 x 2. y 4. z 3 3. x y 5. z 2 1 Find( x, y , z) = 3.904 10 10 1 Решим ту же самую систему матричным методом. Запишем матрицу системы и вектор свободных членов. 2 4 3 1 a 1 2 4 b 3 3 1 5 2 Решим систему, умножая слева столбец свободных членов b на матрицу обратную матрице a. 1 1. x a b x= 0 1 Если Вы работаете с продвинутой версией Mathcad, то для этих же целей можно воспользоваться встроенной функцией lsolve 1 lsolve( a , b ) = 0 1 2.3. Символическое решение систем уравнений Во многих случаях решение системы уравнений может быть найдено не только численно, но и аналитически. Для этого так же используется блок given и функция Find, но вместо знака равенства после функции следует поставить знак символического преобразования –> (Ctrl+.). 14 given 2 x xy y xy 2 13 4 Find ( x y ) 3 1 1 3 Решение записано в виде матрицы. Каждый столбец соответствует паре (x,y), то есть найдены решения (1,3) и (3,1). 2.4. Нахождение экстремумов функций Для нахождения экстремумов функций многих переменных существует две альтернативные возможности. Первая заключается в использовании блока given и функции minerr . Определим функцию двух переменных 2 2 G( x, y ) 25 x y Зададимся целью найти ее экстремум в области x=[–5,5] y=[–5,5]. Оценим по графику положение экстремума. Заносим в матрицу М значения функции в узловых точках M( i , j ) G( i 5, j 5) i 0.. 10 j 0.. 10 20 10 0 10 20 0 2 4 6 8 10 10 8 6 4 2 0 M На заданном интервале функция не превосходит 25. Зададим начальные приближения для поиска экстремума x 1 y 1 Записываем блок уравнений или неравенств. Число уравнений и неравенств в блоке given – Find должно быть больше и равно числа искомых 15 величин. Если уравнений и неравенств не хватает, то можно просто продублировать одно и то же уравнение или вписать какое–либо тождество, например, 2=2 . given G( x, y ) 26 x 5 x 5 y 5 y 5 Minerr( x, y ) = 4.584 10 4.02 10 6 5 Функция Minerr ищет приближенной решение для системы уравнений и неравенств, записанных в блоке. В данном случае мы получили, что системе уравнений наилучшим образом соответствует точка [0,0]. (Поскольку по умолчанию точность вычислений составляет 0.001, мы округлили результат до 0). Из графика видно, что значение 26 больше самого большого значения функции в окрестностях точки [1,1], то есть точное решение найти нельзя и функция Minerr подбирает такое значение x, при котором функция ближе всего к значению 26. Вторая возможность – поиск нулей первой производной, то есть стандартный математический подход. Для этого можно использовать блок given – Find. Функция Find ищет точное решение системы уравнений и неравенств, записанных после слова given. d d G( x, y ) 0 G( x, y ) 0 Given dx dy Find( x, y ) = 1.059 10 7 1.059 10 7 Результаты, полученные различными методами, совпадают, врем счета мало в обоих случаях. В старших версиях Mathcad’а появилась дополнительная возможность поиска экстремумов с помощью функций Minimize и Maximize, которые могут быть использованы как сами по себе, так и совместно с блоком given. Аргументы функций: имя функции, экстремум которой ищется, и список ее аргументов. Определяем функцию двух переменных f ( x y) 25 x2 y2 и задаем начальные приближения x 1 y 1 . Задаем область поиска максимума внутри блока given Given 0 x 5 0y5 Находим максимум функции в заданной области 16 P Maximize( f x y) 0 P 0 В случае функции одной переменной задаем функцию g( x) x4 x2 и начальное приближение x 1 Находим максимум Maximize( g x) 0 Если мы хотим найти максимальное или минимальное значение функции на некотором интервале, то необходимо определить этот интервал в блоке given given 0 x 2 Maximize( g x) 2 На приведенном ниже графике видно, что первый из найденных максимумов соответствовал случаю, когда производная обращается в ноль; второй максимум лежит на границе интервала. x 2 1.9 2 2 g( x) 1 0 2 0 2 x 17 Глава 3. Аппроксимация функций Введение Аппроксимацией (приближением) функции f ( x) называется нахождение такой функции g ( x) (аппроксимирующей функции), которая была бы близка заданной. Критерии близости функций f ( x) и g ( x) могут быть различные. В том случае, когда приближение строится на дискретном наборе точек, аппроксимацию называют точечной или дискретной. В том случае, когда аппроксимация проводится на непрерывном множестве точек (отрезке), аппроксимация называется непрерывной или интегральной. Примером такой аппроксимации может служить разложение функции в ряд Тейлора, то есть замена некоторой функции степенным многочленом. Наиболее часто встречающим видом точечной аппроксимации является интерполяция (в широком смысле). Пусть задан дискретный набор точек xi (i 0,1,..., n) , называемых узлами интерполяции, причем среди этих точек нет совпадающих, а также значения функции yi в этих точках. Требуется построить функцию g ( x) , проходящую через все заданные узлы. Таким образом, критерием близости функции является g ( xi ) yi . В качестве функции g ( x) обычно выбирается полином, который называют интерполяционным полиномом. В том случае, когда полином един для всей области интерполяции, говорят, что интерполяция глобальная. В тех случаях, когда между различными узлами полиномы различны, говорят о кусочной или локальной интерполяции. Найдя интерполяционный полином, мы можем вычислить значения функции f ( x) между узлами (провести интерполяцию в узком смысле слова), а также определить значение функции f ( x) даже за пределами заданного интервала (провести экстраполяцию). Следует иметь в виду, что точность экстраполяции обычно очень невелика. 3.1. ЛОКАЛЬНАЯ ИНТЕРПОЛЯЦИЯ 3.1.1. Линейная интерполяция. Простейшим случаем локальной интерполяции является линейная ин18 терполяция, когда в качестве интерполяционной функции выбирается полином первой степени, то есть узловые точки соединяются прямой линией. Линейная интерполяция на Mathcad’е осуществляется с помощью встроенной функции linterp. Пусть требуется провести линейную интерполяцию функции sin(x) на интервале [0..6], используя пять узлов интерполяции, и вычислить значения функции в четырех точках Xk k 0 .. 3 Xk 0.5 1.111 2.333 4.574 Задаем интервал изменения x и число узловых точек x min 0 x max 6n 5 Определяем шаг изменения x: h x max x min n Вычисляем координаты узлов и значения функции в них: xi x min i. h yi sin xi i 0 .. n 1 linterp( x , y , z ) Проводим линейную интерполяцию: g( z ) Вычислим значение интерполяционной функции в заданных точках и сравним их с точными значениями g Xk sin Xk 0.388 0.479 0.863 0.896 0.69 0.723 0.892 0.99 Как видно, результаты интерполяции отличаются от точных значений функции незначительно. 3.1.2. Интерполяция сплайнами. В настоящее время среди методов локальной интерполяции наибольшее распространение получила интерполяция сплайнами (от английского слова spline – гибкая линейка). При этом строится интерполяционный полином третьей степени, проходящий через все заданные узлы и имеющий непрерывные первую и вторую производные. На каждом интервале [ xi , xi 1 ] ин19 терполирующая функция является полиномом третьей степени S ( x) Si ( x) a0(i ) a1(i ) ( x xi ) a2(i ) ( x xi ) 2 a3(i ) ( x xi )3 и удовлетворяет условиям (3.1) S ( xi ) yi . Если всего n узлов, то интервалов – n 1 . Значит, требуется определить 4(n -1) неизвестных коэффициентов полиномов. Условие (3.1) дает нам n уравнений. Условие непрерывности функции и ее первых двух производных во внутренних узлах интервала дает дополнительно 3(n 2) уравнений Si ( xi 1 ) Si 1 ( xi 1 ) Si( xi 1 ) Si1 ( xi 1 ) Si( xi 1 ) Si1 ( xi 1 ) Всего имеем 4n 6 различных уравнений. Два недостающих уравнения можно получить, задавая условия на краях интервала. В частности, можно потребовать нулевой кривизны функции на краях интервала, то есть S (a) S (b) 0 . Задавая различные условия на концах интервала, можно получить разные сплайны. Решим задачу об интерполяции синуса с помощью сплайнов. Для этого воспользуемся встроенной функцией interp(VS,x,y,z). Переменные x и y задают координаты узловых точек, z является аргументом функции, VS определяет тип граничных условий на концах интервала. Определим интерполяционные функции для трех типов кубического сплайна VSl lspline( x , y ) gl( z ) interp( VSl , x , y , z ) VSp pspline( x , y ) gp( z ) interp( VSp , x , y , z ) VSc cspline( x , y ) gc( z ) interp( VSc , x , y , z ) Вычисляем значения интерполяционных функций в заданных точках и сравниваем результаты с точными значениями Xk gl Xk gp Xk gc Xk sin Xk 0.5 0.473 0.737 0.752 0.479 1.111 0.896 0.903 0.904 0.896 2.333 0.724 0.722 0.72 0.723 4.574 0.927 0.962 1.014 0.99 Обратите внимание, что результаты интерполяции различными типами кубических сплайнов практически не отличаются во внутренних точках интервала и совпадают с точными значениями функции. Вблизи краев интервала отличие становится более заметным, а при экстраполяции за пределы заданного интервала различные типы сплайнов дают существенно раз20 ные результаты. Для большей наглядности представим результаты на графиках z 1 , 0.9 .. 6 1 0.5 0 g( z ) sin( z ) y 0.5 i 1 1.5 2 2 0 2 4 6 z,z,x i 1 0.5 0 gl( z ) sin( z ) 0.5 y i 1 1.5 2 2 0 2 4 6 z,z,x i 21 1 0 gp( z ) sin( z ) y i 1 2 2 0 2 4 6 z,z,x i 1 0 gc( z ) sin( z ) y i 1 2 2 0 2 4 6 z,z,x i Убедимся в том, что первые и вторые производные сплайна непрерывны 22 3 2 d gl( z ) dz 1 d gp( z ) dz 0 d gc( z ) dz 1 2 2 0 2 4 6 z,z,z d 2 2 gl( z ) d z2 d 2 gp( z ) 1 d z2 d 2 gc( z ) 0 d z2 1 0 2 4 6 z,z,z Но производные более высоких порядков уже не являются непрерывными. 23 3.2. ГЛОБАЛЬНАЯ ИНТЕРПОЛЯЦИЯ При глобальной интерполяции ищется единый полином для всего интервала. Если среди узлов {xi,yi} нет совпадающих, то такой полином будет единственным, и его степень не будет превышать n. Запишем систему уравнений для определения коэффициентов полинома c0 c1 x0 c2 x02 cn 1 x0n 1 y0 c0 c1 x1 c2 x12 cn 1 x1n 1 y1 c0 c1 x1 c2 xn21 cn 1 xnn11 yn 1 Определим матрицу коэффициентов системы уравнений i 0 .. n 1 j 0 .. n 1 a( j , i ) xj i Решим систему уравнений матричным методом Определим интерполяционный полином 1 a .y i c .z c L( z ) i i Представим результаты на графике 2 1 L( z ) sin( z ) y 0 i 1 2 2 0 2 4 6 z,z,x i Вычислим значения интерполяционного полинома в заданных точках и сравним их с точными значениями 24 Xk L Xk sin Xk 0.5 0.594 0.479 1.111 0.901 0.896 2.333 0.72 0.723 4.574 1.036 0.99 Коэффициенты интерполяционного полинома следующие: 0 1.134 c = 0.177 0.127 0.022 Внимание! Из-за накопления вычислительной погрешности (ошибок округления) при большом числе узлов (n>10) возможно резкое ухудшение результатов интерполяции. Кроме того, для целого ряда функций глобальная интерполяция полиномом вообще не дает удовлетворительного результата. Рассмотрим в качестве примера две таких функции. Для этих функций точность интерполяции с ростом числа узлов не увеличивается, а уменьша1 ется. Первым примером является функция f( x ) 2 1 25. x . Построим для нее интерполяционный полином на интервале [–1;1], используя 9 точек. n 9 xj 1 a( j , i ) L( z ) i j n 1 xj ci . z 0 .. n 1 j 0 .. n 1 .2 i yj f xj c 1 a .y i i Представим результаты на графике. z 1 , 0.99 .. 1 25 1 0.5 f( z ) L( z ) y 0 j 0.5 1 1 0.5 0 z,z,x 0.5 1 j Второй пример – функция g( x ) x . Найдем интерполяционный полином, используя заданные выше точки. i 1 y g x L( z ) c .z c a .y j j i i 1.5 1 g( z ) L( z ) y j 0.5 0 1 0.5 0 z,z,x j 26 0.5 1 Убедитесь самостоятельно, что при увеличении числа узлов интерполяции, результаты интерполирования вблизи концов интервала ухудшаются. 3.3. МЕТОД НАИМЕНЬШИХ КВАДРАТОВ ВВЕДЕНИЕ Наиболее распространенным методом аппроксимации экспериментальных данных является метод наименьших квадратов. Метод позволяет использовать аппроксимирующие функции произвольного вида и относится к группе глобальных методов. Простейшим вариантом метода наименьших квадратов является аппроксимация прямой линией (полиномом первой степени). Этот вариант метода наименьших квадратов носит также название линейной регрессии. Критерием близости в методе наименьших квадратов является требование минимальности суммы квадратов отклонений от аппроксимирующей функции до экспериментальных точек: n yi f ( xi ) min . 2 i 1 Таким образом, не требуется, чтобы аппроксимирующая функция проходила через все заданные точки, что особенно важно при аппроксимации данных, заведомо содержащих погрешности. Важной особенностью метода является то, что аппроксимирующая функция может быть произвольной. Ее вид определяется особенностями решаемой задачи, например, физическими соображениями, если проводится аппроксимация результатов физического эксперимента. Наиболее часто встречаются аппроксимация прямой линией (линейная регрессия), аппроксимация полиномом (полиномиальная регрессия), аппроксимация линейной комбинацией произвольных функций. Кроме того, часто бывает возможно путем замены переменных свести задачу к линейной (провести линеаризацию). Например, пусть аппроксимирующая функция ищется в виде y A exp(kx) . Прологарифмируем это выражение и введем обозначения z ln( y) , a ln( A) . Тогда в новых обозначениях задача сводится к отысканию коэффициентов линейной функции z a kx . 3.3.1. Аппроксимация линейной функцией Применим метод наименьших квадратов для аппроксимации экспериментальных данных. Читаем данные из файлов datax и datay x READPRN( datax ) y READPRN( datay ) 27 При использовании MathCAD 2000 имя файла следует заключать в кавычки и записывать его по правилам MS DOS, например, READPRN("c:\mylib\datax.prn"). Определяем количество прочитанных данных (число экспериментальных точек). n last( x ) i 0 .. n Используем встроенные функции slope и intercept для определения коэффициентов линейной регрессии (аппроксимация данных прямой линией). Функция slope определяет угловой коэффициент прямой, а функция intercept – точку пересечения графика с вертикальной осью. A intercept ( x , y ) B slope( x , y ) Определяем аппроксимирующую функцию: f1( z ) A B. z Коэффициенты линейной регрессии – B = 1.81 A 3.539 Mathcad 2000 предлагает для этих же целей использовать функцию line 3.539 1.81 line( x y ) Вычислим стандартное отклонение. 1 S1 (n . f1 x i 2) yi 2 S1 = 2.093 i z 0 , 0.1 .. 10 f1( z ) y i z,x i 28 3.3.2. Аппроксимация полиномами Теперь попытаемся подобрать полиномы второй и третьей степени, в качестве аппроксимирующей функции. Для этих целей служат встроенные функции regress и уже знакомая нам функция interp. (Очевидно, что если в качестве аппроксимирующей функции брать полином степени на единицу меньше числа точек, то задача сведется к задаче глобальной интерполяции и полученный полином будет точно проходить через все заданные узлы.) Вводим степени полиномов: k2 2 k3 3 Функция regress является вспомогательной, она подготавливает данные, необходимые для работы функции interp. Вектор vs содержит, в том числе, и коэффициенты полинома vs2 regress( x , y , k2 ) vs3 regress( x , y , k3 ) Функция interp возвращает значение полинома в точке z. Определив новые функции f2, f3, мы получили возможность находить значение полинома в любой заданной точке. f2( z ) interp( vs2 , x , y , z ) f3( z ) interp( vs3 , x , y , z ) coeffs2 submatrix( vs2 , 3 , length( vs2 ) 1 , 0 , 0 ) coeffs3 submatrix( vs3 , 3 , length( vs3 ) 1 , 0 , 0 ) Коэффициенты: ( coeffs2 ) ( coeffs3 ) S2 T T = ( 0.701 0.76 0.257 ) = ( 0.122 0.253 2.377 10 1 (n . 2) f2 x i yi f3 x i yi 2 3 0.017 ) S2 = 0.671 i S3 1 (n . 2) 2 S3 = 0.581 i Стандартные отклонения почти не отличают друг от друга, коэффициент при четвертой степени z невелик, поэтому дальнейшее увеличение степени полинома нецелесообразно и достаточно ограничиться только второй степенью. К сожалению, функция regress имеется далеко не во всех версиях Matcad'а. Однако, провести полиномиальную регрессию можно и без использования этой функции. Для этого нужно определить коэффициенты нормальной системы и решить полученную систему уравнений, например, матричным методом. Теперь попытаемся аппроксимировать экспериментальные данные полиномами степени m и m1, не прибегая к помощи встроенной функции 29 regress . m 2 t 0 .. m j 0 .. m m1 3 t1 0 .. m1 j1 0 .. m1 Вычисляем элементы матрицы коэффициентов нормальной системы pt , j xi t j p1t1 , j1 i и столбец свободных членов j bj yi . xi b1j1 xi t1 j1 i j1 yi . xi i i Находим коэффициенты полинома, решая систему матричным методом, 1 1 a p .b a1 p1 . b1 Определяем аппроксимирующие функции t t1 f2( z ) at. z f3( z ) a1t1. z t t1 Коэффициенты полиномов следующие: 0.122 0.701 0.253 a = 0.76 a1 = 2.377 10 0.257 0.017 Вычислим стандартное отклонение S2 1 (n . 2) f2 x i yi f3 x i yi 2 3 S2 = 0.671 i S3 1 (n . 2) i 30 2 S3 = 0.581 f2( z ) y i z,x i f3( z ) y i z,x i 3.3.3. Аппроксимация линейной комбинацией функций Mathcad предоставляет пользователям встроенную функцию linfit для аппроксимации данных по методу наименьших квадратов линейной комбинацией произвольных функций. 31 a Функция linfit имеет три аргумента: вектор x – x–координаты заданных точек, вектор y – y–координаты заданных точек, функция F – содержит набор функций, который будет использоваться для построения линейной комбинации. Задаем функцию F (аппроксимирующая функция ищется в виде 1 1 b·x 2 : F( x ) x 1 S S= x 1 x 2 linfit ( x , y , F ) 0.802 0.176 Определяем аппроксимирующую функцию: f4( x ) Вычисляем дисперсию: 1 S4 (n . f4 x i 2) yi 2 S4 i f4( z ) y i z,x i 32 F( x ) . S = 0.975 3.3.4. Аппроксимация функцией произвольного вида Теперь построим аппроксимирующую функцию дробно–рационального ax 2 типа f( x) . Для этого воспользуемся функцией genfit. Функция b x имеет следующие параметры: x, y – векторы, содержащие координаты заданных точек, F – функция, задающая искомую функциональную n–параметрическую зависимость и частные производные этой зависимости по параметрам. v – вектор, задающий начальные приближения для поиска параметров. 2 u .z 0 u1 z z F( z , u ) 2 u1 z u0 . z u1 v S 2 z 2 1 15 genfit( x , y , v, F ) S = 2.146 20.85 Поскольку нулевой элемент функции F содержит искомую функцию, F( z , S ) 0 определяем функцию следующим образом: f5( z ) Вычисляем среднее квадратичное отклонение S5 1 (n . f5 x i 2) yi 2 S5 = 0.581 i 33 f5( z ) y i z,x i Функция genfit имеется не во всех реализациях Mathcad'а. Возможно, однако, решить задачу, проведя линеаризацию. Заданная функциональная зависимость может быть линеаризована введением переменных z 1 t 1 1 и t . Тогда z b . a a x y Определим матрицы коэффициентов нормальной системы (см. книгу [8] из списка литературы) 3 4 2 xi . yi xi xi . yi e i xi . yi 2 o i i xi 2. yi yi 2 i i i Находим коэффициенты функции, решая систему матричным методом, 1.218 1 d= d o .e 15.517 2 z . d0 Определяем функцию: f5( z ) d1 z Вычислим стандартное отклонение 34 1 S5 (n . 2) f5 x i yi 2 S5 = 0.827 i Обратите внимание! Мы получили другие коэффициенты! Вспомните, задача на нахождение минимума нелинейной функции, особенно нескольких переменных, может иметь несколько решений. Стандартное отклонение больше, чем в случае аппроксимации полиномами, поэтому следует остановить свой выбор на аппроксимации полиномом. Представим результаты аппроксимации на графиках f5( z ) y i z,x i В тех случаях, когда функциональная зависимость оказывается достаточно сложной, может оказаться, что самый простой способ нахождения коэффициентов – минимизация функционала Ф "в лоб". 35 Глава 4. Вычисление определенных интегралов 4.1. Метод Ромберга Пусть требуется вычислить определенный интеграл на интервале [a;b]. b f ( x)dx a Далеко не всегда задача может быть решена аналитически. В частности, численное решение требуется в том случае, когда подынтегральная функция задана таблично. Для численного интегрирования подынтегральную функцию аппроксимируют какой-либо более простой функцией, интеграл от которой может быть вычислен. Обычно в качестве аппроксимирующей функции используют полином. В случае полинома нулевой степени метод численного интегрирования называют методом прямоугольников, в случае полинома первой степени – методом трапеций, в случае полинома второй степени – методом Симпсона. Все эти методы являются частными случаями квадратурных формул Ньютона-Котеса. Итак, в методе трапеций подынтегральную функцию аппроксимируют полиномом первой степени, то есть прямой линией. Это значит, что вместо площади криволинейной трапеции мы будем искать площадь прямоугольной трапеции. Приближенное значение интеграла равно b f (b) f (a ) (b a ) a f ( x)dx 2 Погрешность этой формулы равна O(h3 f ) . h f (a) f (b) , где h b a . Смысл введенного 2 обозначения станет ясен несколько позже. Оценку значения интеграла можно сделать более точной, если разбить интервал на n частей и применить формулу трапеций для каждого такого интервала 1 h ( f (a) f (b)) f (a h) f (a 2h) f (a (n 1)h)) . 2 Если разбить интервал на две части, то есть уменьшит шаг в два раза h (b a) 2 , то оценка для величины интеграла будет иметь вид Обозначим R(1;1) 2 1 h 1 R(2;1) f (a) f (b) hf (a h) R(1;1) h f (a ih) 2 2 i 1 n 36 В данном случае суммирование включает только один элемент. Обратите внимание, в новую оценку вошла старая оценка. Нам потребовалось определять значение функции только в новых узлах. Если имеется 2n подынтервалов, то 2n 1 h R(n 1;1) f (a) f (b) h f (a ih) 2 i 1 ba h n 2 Если n=0, то h R(1;1) f (a ) f (b) 2 Если n=1, то h 1 R(2;1) f (a) f (b) hf (a h) R(1;1) hf (a h) 2 2 Если n=2, то h R(3;1) f (a) f (b) hf (a h) hf ( a 2h) hf ( a 3h) 2 1 R(2;1) hf (a h) hf (a 3h) 2 Вообще, справедливо рекуррентное соотношение 2n 1 1 R(n 1;1) R(n;1) h f (a (2i 1)h) 2 i 1 Полученное соотношение называют рекурсивной формулой трапеций и часто применяют для вычисления определенных интегралов. Преимущество этой формулы состоит в том, что при увеличении числа подынтервалов функцию нужно вычислять только во вновь добавленных точках. К сожалению, с помощью этой формулы нельзя получить сколь угодно точное значение интеграла. Во-первых, при увеличении числа разбиений объем вычислений стремительно возрастает; во-вторых, на каждом шаге накапливается ошибка округлений. Для дальнейшего уточнения значения интеграла можно сделать следующий шаг – экстраполировать полученную последовательность значений на случай бесконечного числа точек или что то же самое, на случай нулевого шага. Такой подход называется методом Ромберга. Метод Ромберга заключается в том, что полученные оценки значения интеграла экстраполируют на случай бесконечного числа разбиений (величины шага равной нулю) по рекуррентной формуле R(n 1, m) R(n, m) R(n 1, m 1) R(n 1, m) (4.1) 4m 1 То есть строится следующий треугольник R(1,1) 37 R(2,1) R(2,2) R(3,1) R(3,2) R(3,3) R(4,1) R(4,2) R(4,3) R(4,4) R(5,1) R(5,2) R(5,3) R(5,4) R(5,5) , в котором первый столбец состоит из значений интеграла, полученных при последовательном удвоении числа интервалов. Второй столбец – результат уточнения значений первого столбца по рекуррентной формуле (4.1). Третий столбец – уточненные значения интеграла на основе второго столбца и т.д. Формула (4.1) может быть получена различными способами. Можно, например, воспользоваться методом Невиля. Пусть имеется набор точек ( xi , yi ) . Обозначим Pi полином нулевой степени, проходящий через i-ю точку. Обозначим Pi ( i 1) полином первой степени, проходящий через точки i и i+1. Совершенно аналогично будет означать P12 ( n 1) n ни, проходящий через все n точек. Легко убедиться, что ( x xi m ) Pi (i 1) (i m 1) ( xi x) P(i 1)(i 2) Pi ( i 1) ( i m ) xi xi m полином n–1 степе(i m ) ba . В качестве yi выступают R(i; m) . Мы хотим 2i 1 получить значение интеграла в пределе h 0 , поэтому x 0 . В нашем случае xi 4.2 Вычисление определенных интегралов Для вычисления определенного интеграла необходимо выбрать знак интеграла из палитры или набрать его нажатием клавиши &. После этого следует вписать пределы интегрирования, подынтегральную функцию и переменную интегрирования. Mathcad успешно справляется с большинством интегралов, в том числе, с несобственными. Точность вычислений регулируется встроенной переменной TOL. По умолчанию ее значение 3 установлено TOL 10 . Ниже приводится несколько примеров успешного вычисления несобственных интегралов, интеграла от быстро осциллирующей функции и интеграла от ступенчатой функции. 1 1 2 2 x e x d x 0.5 0 ( x) d x 1 1 x 20 3 3 sin x d x 1.822 10 10 38 dx 1 1 0, если x<0 ( x) 1, если x 0 Зависимость результата от заданной точности вычислений представлена ниже Здесь 1 2 d x 3.14159265369356 1 x 6 TOL 10 1 2 d x 3.14159265358979 1 x Для этого примера результат может быть получен также в символьном виде. Для этого вместо знака равенства необходимо нажать знак символического равенства Ctrl+. 1 2 dx 1 x В то же время в некоторых случаях несобственные интегралы вычисляются неправильно. 1 1 3 d x 1.376 10 x2 1 Хотя очевидно, что 1 1 dx x2 1 39 Глава 5. Решение дифференциальных уравнений 5.1. Обыкновенные дифференциальные уравнения Введение Пусть необходимо найти решение уравнения (5.1) y f ( x, y) с начальным условием y ( x0 ) y0 . Такая задача называется задачей Коши. Разложим искомую функцию y( x) в ряд вблизи точки x0 и ограничимся первыми двумя членами разложения y( x) y( x0 ) y ( x)( x x0 ) . Учтя уравнение (5.1) и обозначив получаем x x0 h , y( x) y( x0 ) f ( x0 , y0 )x. Эту формулу можно применять многократно, находя значения функции во все новых и новых точках. (5.2) yi 1 yi f ( xi , yi )h Такой метод решения обыкновенных дифференциальных уравнений называется методом Эйлера. Геометрически метод Эйлера означает, что на каждом шаге мы аппроксимируем решение (интегральную кривую) отрезком касательной, проведенной к графику решения в начале интервала. Точность метода невелика и имеет порядок h. Говорят, что метод Эйлера – метод первого порядка, то есть его точность растет линейно с уменьшением шага h. Существуют различные модификации метода Эйлера, позволяющие увеличить его точность. Все они основаны на том, что производную, вычисленную в начале интервала, заменяют на среднее значение производной на данном интервале. Среднее значение производной можно получить (конечно же только приближенно) различными способами. Можно, например, оценить значение производной в середине интервала [ xi , xi 1 ] и использовать его для аппроксимации решения на всем интервале h x 1 xi i 2 2 y i 1 2 yi h f ( xi , yi ) 2 yi 1 yi hf ( x i 1 2 ,y i 1 2 ) Можно также оценить среднее значение производной на интервале yi 1 yi hf ( xi , yi ) 40 f ( xi , yi ) f ( xi 1 , yi 1 ) 2 Такие модификации метода Эйлера имеет уже точность второго порядка. Оценку значения производной можно улучшить, увеличивая число вспомогательных шагов. На практике наиболее распространенным методом решения обыкновенных дифференциальных уравнений является метод Рунге-Кутты четвертого порядка. Для оценки значения производной в этом методе используется четыре вспомогательных шага. Формулы метода Рунге-Кутты следующие k1i hf ( xi , yi ) yi 1 yi h ki h k2i hf ( xi , yi 1 ) 2 2 i k h k3i hf ( xi , yi 2 ) 2 2 k4i hf ( xi h, yi k3i ) 1 i (k1 2k2i 2k3i k4i ) 2 yi 1 yi yi Перечисленные методы можно применять и для решения систем дифференциальных уравнений. Поскольку многие дифференциальные уравнения высших порядков могут быть сведены заменой переменных к системе дифференциальных уравнений первого порядка, рассмотренные методы могут быть использованы и для решения дифференциальных уравнений порядка выше первого. Еще один тип задач, часто встречающихся на практике, – краевые задачи. Пусть имеется дифференциальное уравнение второго порядка y f ( x, y, y) . Решение уравнения требуется найти на интервале [0,1] , причем известно, что y (0) y0 , y(1) y1. Понятно, что произвольный инyi xa может быть сведен к единичноba му. Для решения краевой задачи обычно применяют метод стрельб. Пусть y(0) k , где k – некоторый параметр. Для некоторого пробного значения k может быть решена задача Коши, например, методом Рунге-Кутты. Полученное решение будет зависеть от значения параметра y y( x; k ) . Мы хотим найти такое значение параметра, чтобы выполнялось условие y (1; k ) y1 . Фактически мы свели исходную задачу к задаче решения трансцендентного уравнения с таблично заданной функцией. Если найдены такие значения параметра k1 и k2, что y(1; k1 ) y1 и y(1; k1 ) y1 , то дальней- тервал [a, b] заменой переменных t 41 шее уточнение значения параметра можно проводить методом деления отрезка пополам. 5.1.1. Метод Эйлера для дифференциальных уравнений первого порядка Решим задачу Коши для дифференциального уравнения первого порядка y f ( x, y) методом Эйлера. Пусть правая часть уравнения равна f( x, y ) x. y Зададим границы изменения x: x min 0 x max 1 Зададим число точек и величину шага: n 10 h x max x min n Зададим начальные условия: y 0 1 x0 x min Вычислим x и y по формулам Эйлера j 1.. n xj x min j. h .h y y f x ,y j j 1 j 1 j 1 Представим результат графически и сравним его с аналитическим ре2 шением y1( x) z exp x 2 0, 0.1.. 1 k 0.. n 2 1 y1(z) y k 1.5 1 0 0.5 1 z,x k Точное решение Метод Эйлера Точное аналитическое решение и решение, полученное численно, отличаются в точке x=1 на y1( 1) yn = 0.102 То есть относительная ошибка составляет y1( 1 ) y1( 1 ) 42 yn = 6.163 % 5.1.2. Решение систем дифференциальных уравнений. Для решения дифференциальных уравнений Mathcad имеет ряд встроенных функций, в частности, функцию rkfixed, реализующую метод Рунге– Кутты четвертого порядка с фиксированным шагом. Фактически эта функция предназначена для решения систем дифференциальных уравнений первого порядка. y1 f1 ( x, y1 , y2 , , yn ) y2 f 2 ( x, y1 , y2 , , yn ) ............................. yn f n ( x, y1 , y2 , , yn ) Функция rkfixed(y, x1, x2, npoints, D) возвращает матрицу. Первый столбец этой матрицы содержит точки, в которых получено решение, а остальные столбцы – решения и его первые n 1 производные. Аргументы функции: y – вектор начальных значений (n элементов). x1 и x2 – границы интервала, на котором ищется решение дифференциального уравнения. npoints – число точек внутри интервала (x1,x2), в которых ищется решение. Функция rkfixed возвращает матрицу, состоящую из 1+npoints строк. D – вектор, состоящий из n элементов, который содержит первые производные искомой функции. В качестве примера рассмотрим решение системы Вольтерры–Лотки. Эта система описывает динамику численности хищников и жертв на замкнутом ареале и является одной из базовых моделей экологии. dN1 N1 1 2 N 2 dt dN 2 N 2 2 1 N1 dt Для решения систем дифференциальных уравнений используются функция rkfixed. Внимание! В этом примере установлено значение ORIGIN=1, то есть нумерация элементов массива начинается с 1, а не с 0, как это принято в Mathcad'е по умолчанию. Пусть в начальный момент времени число хищников N1 5 и число жертв N 2 10 43 5 Задаем вектор начальных значений N 0.1 параметры системы 10 0.03 0.3 0.04 интервал времени и количество точек, в которых будет вычислено решение t max 200 npoints 400 и вектор правых частей системы. (Поскольку исходная система не зависит явно от времени t, функция D так же не зависит от времени явно хотя и содержит его в числе своих аргументов.) N1. 1 2. N2 D( t , N ) N2. 2 1. N1 Решаем систему с помощью встроенной функции Z rkfixed N, 0, t max, npoints , D k 1.. npoints Представим на графике результаты расчета – зависимость численности популяций от времени 40 Z k, 2 20 Z k, 3 0 0 50 100 Z ,Z k, 1 k, 1 и зависимость числа жертв от числа хищников 15 10 Z k, 3 5 0 0 10 20 Z k, 2 44 30 150 200 <i > Можно использовать обозначения Z k или Zk , i – это одно и то же. Поскольку дифференциальное уравнение порядка выше первого может быть преобразовано к системе дифференциальных уравнений первого порядка, функция rkfixed может быть использована и для решения дифференциальных уравнений 5.1.3. Решение дифференциальных уравнений методом Рунге–Кутты Решим еще раз задачу Коши для дифференциального уравнения первого порядка y xy методом Рунге–Кутты. Зададим границы изменения x: x min 0 x max 1 Зададим число точек внутри интервала n Зададим начальные условия y 0 1 10 Обратите внимание на обозначения! Поскольку мы решаем только одно дифференциальное уравнение первого порядка, а не систему дифференциальных уравнений, матрица y содержит только один элемент, однако запись y=1 была бы неправильной. Необходимо явно указывать на то, что величина y – матрица, то есть писать индекс. Определим теперь матрицу производных. Эта матрица тоже состоит только из одного элемента. Этот элемент с точностью до обозначений совпадает с правой частью исходного дифференциального уравнения: D( x, y ) y0. x Решаем дифференциальное уравнение Z rkfixed y , x min , x max, n , D 2 k 0.. n y1( x) exp x z 0, 0.1.. 1 2 1.5 Z k, 1 y1( z ) 1 0 0.2 0.4 0.6 0.8 1 Z ,z k, 0 45 Точное аналитическое решение и решение, полученное численно отли<1 > 7 Z = 2.636 10 чаются в точке x 1 на y1( 1) n Относительная ошибка составляет y1( 1 ) <1 > Z n = 1.599 10 5 % y1( 1 ) 5.1.4. Решение дифференциальных уравнений второго порядка В качестве примера решим задачу о гармоническом осцилляторе, для которого известно аналитическое решение, и легко может быть оценена точность вычислений. Дифференциальное уравнение второго порядка y 2 y 2 y 0 преобразуем к системе из двух дифференциальных уравнений первого порядка y x x 2 x 2 y Пусть декремент затухания Пусть циклическая частота Зададим начальные условия y 0.0 1 0 1 y0 соответствует начальной координате, а y1 – начальной скорости. Зададим теперь матрицу D. С учетом того, что искомая величина соответствует нулевому элементу массива y, ее первая производная – первому, а вторая – второму, имеем y1 D( t , y ) 2 2. . y 1 . y0 Z rkfixed( y , 0, 5. , 100, D) Представим результаты расчета на графике и сравним их с аналитическим решением f( x) y1. exp( . x) . cos( . x) k 0.. 100 46 x 0, 0.1.. 5. 1 Z k, 2 0 f( x ) 1 0 5 10 15 Z ,x k, 0 Для контроля точности вычислений нарисуем фазовую траекторию (зависимость смещения от скорости). Для гармонического осциллятора фазовая траектория должна иметь вид эллипса. 1 Z k, 2 0 1 1 0 1 Z k, 1 Примечание: Mathcad имеет еще две функции для решения задачи Коши. Это функции Rkadapt и Bulstoer. Эти функции имеют те же самые аргументы и возвращают решения в такой же форме, что и функция rkfixed. Первая из этих функций использует метод Рунге–Кутты с переменным шагом, что позволяет повысить точность вычислений и сократить их объем, если искомое решение имеет области, где ее значения меняются быстро, и области плавного изменения. Функция Rkadapt будет варьировать величину шага в зависимости от скорости изменения решения. Функция Bulstoer реализует иной численный метод – метод Булирша– Штёра. Ее следует применять, если известно, что решение является гладкой функцией. 5.1.5. Решение краевой задачи. Пусть требуется найти решение дифференциального y 2 y 02 y 0 при условиях y (0) 1 и y(5 ) 0 . уравнения 47 0.1 0 1 Для решения краевой задачи имеется встроенная функция sbval, реализующая метод стрельб и позволяющая свести краевую задачу к задаче Коши. Функция sbval имеет следующие параметры: v– вектор, содержащий начальные приближения для недостающих начальных условий, xmin, xmax – границы интервала, на котором ищется решение, При значениях параметров D(x,y) – вектор–функция, содержащий правые части системы дифференциальных уравнений первого порядка, эквивалентной исходному уравнению, размер вектора n совпадает со степенью старшей производной дифференциального уравнения load(xmin,v) – вектор–функция, элементы которой соответствуют n значениям функций на левой границе интервала. Часть этих значений известна, а для части заданы начальные приближения в векторе v. Их уточненные значения будут найдены в процессе вычисления score(xmax,y) – вектор–функция, имеющая то же число элементов, что и v. Каждое значение является разностью между начальными значениями в конечной точке интервала и соответствующей оценки для решения. Этот вектор показывает, на сколько близко найденное решение к истинному. Наша задача сводится к системе двух дифференциальных уравнений первого порядка: y z z 2 z 02 y Поэтому функция D имеет вид Задаем граничные условия: x min y1 D( t , y ) 0 2. . y 1 x max 2 0 . y0 5. Задача Коши для дифференциального уравнения второго порядка содержит два начальных условия. Нам известно только одно. Начальное приближение для недостающего значения задаем в векторе v, который в нашем случае состоит только из одного элемента. Несмотря на это, индекс о должен быть обязательно указан, чтобы подчеркнуть векторный характер этой v0 0.1 величины: На левой границе интервала нам известно значение y y(0) 1) и за- дано начальное приближение для y y 0 . Это значение записано в v0 . Задаем вектор-функцию load. Ее нулевой элемент – начальное значение для y0 , первый – для y1 . 48 1 load x min , v v0 score x max, y y0 0 S sbval v , x min , x max, D, load , score S = 12.511 Теперь, когда нам стало известно недостающее начальное условие в задаче Коши, можно воспользоваться, например, функцией rkfixed 1 n 500 i 0.. n y S0 Z rkfixed y , x min , x max, 500, D 10 Z i,1 0 10 0 5 10 15 Z i,0 5.1.6. Решение обыкновенных дифференциальных уравнений в Mathcad 2000 Mathcad 2000 предлагает новый способ для решения обыкновенных дифференциальных уравнений, разрешенных относительно старшей производной. Для этих целей служит уже известный нам блок given совместно с функцией odesolve. Дифференциальное уравнение совместно с начальными или граничными условиями записывается в блоке given. Производные можно обозначать как штрихами (Ctrl+F7), так и с помощью знака производной d . Пример использования функции для решения задачи Коши приведен dx ниже. 0.1 Given x''( t) 2 x'( t) x( t) x( 0) 0 x'( 0) 1 0 49 x odesolve t 5 0.1 t 0 0.1 5 1 0 x( t) 1 0 5 10 15 20 t Обратите внимание! У искомой функции явно указан аргумент, знак производной стоит перед скобкой. Функция odesolve имеет три аргумента. Первый аргумент – независимая переменная, вторая – граница интервала, на котором ищется решение, последний аргумент – шаг, с которым ищется решение. Последний аргумент может быть опущен. Следующий пример демонстрирует решение краевой задачи. Использован другой способ записи производных, используется odesolve функция с двумя аргументами. Given d2 2 x( t) 2 dt x( 0) d x( t) x( t) dt 0 1 x 5 0.1 x odesolve t 5 t 0 0.1 5 20 x( t) 0 20 0 5 10 t 50 15 20 5.2. Решение уравнений в частных производных. Введение Одним из методов решения дифференциальных уравнений в частных производных является метод сеток. Идея метода заключается в следующем. Для простоты, ограничимся случаем только функции двух переменных, и будем полагать, что решение уравнения ищется на квадратной области единичного размера. Разобьем область сеткой. Шаг сетки по оси x и по оси y, вообще говоря, может быть разный. По определению частная производная равна u ( x, y ) u ( x x, y ) u ( x) u ( x x, y ) u ( x) lim x 0 x x x Если рассматривать функцию только в узлах сетки, то частную производную можно записать в форме u( x, y) ui 1, j ui , j x h где узел (i, j ) соответствует точке ( x, y) . Полученное выражение называется правой конечной разностью. Название связано с тем, что для вычисления производной в точке используются значение функции в этой точке и точке, лежащей правее. Очевидно, что сходное выражение можно было бы получить, используя точку, лежащую слева. u ( x, y) ui , j ui 1, j x h Такое выражение называется левой конечной разностью. Можно получить центральную конечную разность, найдя среднее этих выражений. Теперь получим выражения для вторых производных. 2u( x, y) ui 1, j 2ui , j ui 1, j x 2 h2 В данном случае для нахождения производной мы использовали симметричные точки. Однако, очевидно, можно было бы использовать точки с несимметричным расположением. 5.2.1. Уравнения гиперболического типа В качестве примера рассмотрим решение волнового уравнения (уравнения гиперболического типа). 2U 1 2U x2 v2 t 2 Уравнение будем решать методом сеток. Запишем уравнение в конечных разностях 51 ui 1, j 2ui , j ui 1, j 1 ui , j 1 2ui , j ui , j h v2 2 Полученное уравнение позволяет выразить значение функции u в момент времени j 1 через значения функции в предыдущие моменты времени. 2 ui , j 1 v 2 (ui 1, j 2ui , j ui 1, j ) 2ui , j ui , j 1 h Такая разностная схема называется явной, так как искомая величина получается в явном виде. Она устойчива, если h v . Зададим начальные условия: смещение струны U в начальный и последующий моменты времени описывается синусоидальной функцией. n 20 j 0.. n i 0.. 100 i Ui , 1 Ui , 0 Ui , 0 sin . 50 (Совпадение смещений при j=0 и j=1 соответствует нулевой начальной скорости.) Зададим граничные условия: на концах струны смещение равно 0 в любой момент времени U0 , j 0 U100 , j 0 2 Будем полагать коэффициент a 1 k 0.02 i 1.. 99 j 1.. n 1 l 0.. 100 Записываем уравнение в конечных разностях, разрешенное относительно U i , j 1 Ui , j 1 2 a . k. Ui 1, j 2. Ui , j Ui 2. Ui , j 1, j Представляем результат на графике U l,0 U l , 10 U l , 15 U l , 20 l 52 Ui , j 1 5.2.2. Уравнения параболического типа. Еще один пример использования конечных разностей – уравнение диффузии. u 2u D 2 t x Это уравнение параболического типа. Явная разностная схема для этого уравнения имеет вид ui , j 1 D 2 (ui 1, j 2ui , j ui 1, j ) ui , j (5.3) h h2 Эта разностная схема устойчива, если . Для краткости в даль2D нейшем мы будем обозначать весь множитель, стоящий перед скобкой, как . Задаем коэффициент .15 и диапазон изменения пространственной и временной координат: t 0.. 29 x 1.. 49 Задаем начальные и граничные условия f0 , x 0 f0 , 0 0 f0 , 50 0 f0 , 25 1 Уравнение в конечных разностях имеет вид ft 1 , x ft , x . ft , x 1 2. ft , x ft , x 1 Представляем результаты на графике. (Для большей наглядности изображена только центральная часть) x 15.. 35 1 f 0, x f 4, x f 9, x 0.5 f 19 , x f 29 , x 0 15 20 25 30 35 x 53 Основное достоинство явных методов – их простота – зачастую сводится на нет достаточно жесткими ограничениями на величину шага. Явные схемы обычно устойчивы при столь малых шагах по времени, что они становятся непригодными для практических расчетов. Этого существенного недостатка позволяют избежать неявные схемы. Свое название они получили потому, что значения искомой функции на очередном временном шаге не могут быть явно выражены через значения функции на предыдущем шаге. Рассмотрим применение неявной схемы на примере уравнения теплопроводности u 2u (5.4) c 2 t x Запишем неявную разностную схему для этого уравнения ui , j 1 ui , j c (5.5) 2 ui 1, j 1 2ui , j 1 ui 1, j 1 h Здесь первый индекс соответствует пространственной, а второй – временной координате. В отличие от явной схемы, для вычисления в правой части уравнения используются значения функции на том же самом временc ном шаге. Вводя обозначение 2 , уравнение (5.5) можно переписать в h виде (1 2 )ui , j 1 (ui 1, j 1 ui 1, j 1 ) ui , j (5.6) или в матричной форме 1 2 u1, j 1 u1, j u 1 2 2, j 1 u2, j (5.7) 1 2 un 1, j 1 un 1, j 1 2 un, j 1 un, j где u(0, t ) , u(t ,1) . Задаем количество узлов сетки (в данном случае оно одинаково для обеих переменных) n 30 i 0 n j 0 n k 0 n 1 m 1 n 1 Задаем значения параметров 0 1 5 и начальное распределение температуры в области i i ui 0 sin n n Формируем матрицы уравнения (5.7) u0 j u n j 54 Ai i 1 2 i 0 A m m1 0 Находим решение системы A m1 m i 0 0 1 u j1 A u j u 5.2.3. Решение уравнений Лапласа и Пуассона. Для решения уравнений Пуассона 2u 2u F ( x, y ) и Лапласа (частx 2 y 2 ный случай, когда F ( x, y) 0 ) – уравнений эллиптического типа – предназначена функция relax(a, b, c, d, e, f, u, rjac), реализующая метод релаксации. Фактически, эту функцию можно использовать для решения эллиптического уравнения общего вида 2u 2u 2u u u A 2 B C a b cu F x, y , 2 2 x y x y x y D AC B 2 0, которое может быть сведено к уравнению в конечных разностях ai , j ui 1, j bi , j ui 1, j ci , j ui , j 1 di , j ui , j 1 ei , j ui , j f i , j В частности, для уравнения ai , j bi , j ci , j di , j 1, ei , j 4 . Пуассона коэффициенты Идея метода релаксации заключается в следующем. Если нет источников (уравнение Лапласа), то значение функции в данном узле на текущем шаге k 1 определяется как среднее значение функции в ближайших узлах на предыдущем шаге k 1 uik, j 1 (uik1, j uik1, j uik, j 1 uik, j 1 ) (5.8) 4 55 При наличии источников разностная схема имеет вид 2 1 h uik, j 1 (uik1, j uik1, j uik, j 1 uik, j 1 ) fi , j (5.9) 4 4 Метод релаксации сходится достаточно медленно, так как фактически он использует разностную схему (5.3) с максимально возможным для двуh2 мерного случая шагом . 4 В методе релаксации необходимо задать начальное приближение, то есть значения функции во всех узлах области, а так же граничные условия. Функция relax возвращает квадратную матрицу, в которой: 1) расположение элемента в матрице соответствует его положению внутри квадратной области, 2) это значение приближает решение в этой точке. Эта функция использует метод релаксации для приближения к решению. Вы должны использовать функцию relax, если Вы знаете значения искомой функции u(x, y) на всех четырех сторонах квадратной области. Аргументы: a, b, c, d, e – квадратные матрицы одного и того же размера, содержащие коэффициенты дифференциального уравнения. f – квадратная матрица, содержащая значения правой части уравнения в каждой точке внутри квадрата u – квадратная матрица, содержащая граничные значения функции на краях области, а также начальное приближение решения во внутренних точках области. rjac – Параметр, управляющий сходимостью процесса релаксации. Он может быть в диапазоне от 0 до 1, но оптимальное значение зависит от деталей задачи. 4 n 2 i 0.. n j 0.. n Задаем правую часть уравнения Пуассона – два точечных источника Mi , j 0 M6 , 8 10 M10 , 8 10 Задаем значения параметров функции relax ai , j 1 b a c a d a f M e 4. a Задаем граничные условия и начальное приближение – нули во всех внутренних точках области j ui , j 0 ui , n 1 ui , 0 1 u 0 , j 1 2. n j u n , j 1 2. n Находим решение Z relax( a , b , c , d , e , f , u , 0.95) и представляем его графически в виде поверхности и линий уровней. 56 Z 1 0.5 0.5 0 1 0 0 0.5 0.5 1 0 1 1.5 1.5 0.5 2 4.5 1 1.5 0.5 2.5 3 2 1 1 1.5 0.5 0 0.5 0.5 0.5 1 1 0.5 0 0.5 1 Z Если граничные условия равны нулю на всех четырех сторонах квадрата, можно использовать функцию multigrid. Z multigrid( M , 3) Алгоритм метода достаточно громоздкий, поэтому рассматривать его мы не будем. 57 Глава 6. Статистические расчеты на Mathcad 6.1. Генерация чисел, распределенных равномерно. Mathcad дает возможность обрабатывать статистическую информацию. Создадим с помощью датчика случайных чисел rnd последовательность, подчиняющуюся равномерному распределению. xi rnd( 10 ) i 0 .. n n 999 Представим последовательность чисел графически 10 x i 5 0 0 500 1000 i Вычислим среднее значение Xmean стандартное отклонение Xst mean( x ) Xmean = 4.966 , stdev( x ) Xst = 2.885 , и дисперсию var( x ) = 8.323 Проверим, насколько хорошо подчиняются наши числа закону равномерного распределения, построив гистограмму. Определим интервалы для группировки данных: Nmax 5 k 0 .. Nmax. И подсчитаем, сколько раз попадают числа из нашей последовательности в каждый из интервалов intervalk 0 2 4 6 8 10 i 58 0 .. Nmax 1 f hist( interval , x ) fi 208 194 193 211 194 Числа fi показывают, сколько раз числа из массива x попадают в каждый из определенных нами интервалов 0–2, 2–4, 4–6, 6–8, 8–10 Внимание! В массиве f элементов на 1 меньше, чем в массиве interval. Определим границы для построения гистограммы. Fmax max( f ) 1 IntMax max( interval ) IntMin min( interval ) 1 f i 0 5 interval 10 i Внимание! При построении гистограммы следует использовать трассировку типа bar, при этом столбцы центрируются относительно начала интервала. Для центрирования столбцов относительно середины интервала используйте трассировку step. Повторим построение гистограммы, используя большее число интервалов. Nmax 10 k 0 .. Nmax interval k i 0 .. Nmax 1 k f hist( interval , x ) Fmax IntMax max( interval ) max( f ) 1 IntMin min( interval ) 1 59 f i interval i fi 100 108 98 96 96 97 111 100 108 86 Числа fi показывают, сколько раз числа из массива x попадают в каждый из определенных нами интервалов 0–1, 1–2, 2–3, 3–4, 4–5, 5–6, 6–7, 7– 8, 8–9, 9–10 6.2. Генерация случайных чисел, распределенных по нормальному закону. Для преобразования равномерно распределенных случайных чисел в числа, распределенные по нормальному закону, воспользуемся преобразованием: N 999 M 10 S 10 i 0 .. N x1i M S. ( ( ln( rnd( 1 ) ) ) . 2 ) . sin( 2. . rnd( 1 ) ) Представим числа на графике Nmax ceil( max( x1 ) ) Nmin Nall Nmax Nmin 60 floor( min( x1 ) ) x1 i i Вычислим среднее значение M1: M1 mean( x1 ) M1 = 9.995 И стандартное отклонение S1: S1 stdev( x1 ) S1 = 9.625 Определим функцию g(x) – функцию плотности нормального распределения с математическим ожиданием M1 и стандартным отклонением S1 exp g( x ) ( M1 x) 2 2 2. S1 S1. ( 2. ) x IntMin .. IntMax Построим гистограмму, разбив весь интервал на подынтервалы шириной 5 единиц. Nall ceil Step 5 jmax Step j 0 .. jmax s 0 .. jmax 1 interval1j Nmin j. Step f hist( interval1 , x1 ) Fmax IntMin ( max( f ) 1 ) min( interval1 ) IntMax max( interval1 ) 1 x IntMin .. IntMax 61 f s 20 10 0 10 20 interval1 30 40 s Сравним предельное распределение g(x) с реальным распределением. Для этого вновь воспользуемся функцией hist Nall Step 2 jmax j 0 .. jmax ceil Step interval2j Nmin j. Step f hist( interval2 , x1 ) Подсчитаем плотность вероятности f1: f Fmax ( max( f ) f1 ( N. Step ) 1) IntMax max( interval2 ) IntMin min( interval2 ) s 0 .. jmax 1 x IntMin .. IntMax Представим результаты графически: 1 0.04 f1 s g( x ) 0.02 0 20 10 0 10 interval2 , x s 62 20 30 Определим вероятность W того, что некоторое число попадет в интервал [1,3], воспользовавшись функцией cnorm. ( x M) Cnorm( x , S , M ) cnorm S W Cnorm( 3 , S1 , M1 ) Cnorm( 1 , S1 , M1 ) W = 0.059 И сравним полученный результат с результатом, который дает функция hist f15 W1 W1 = 0.075 ( N) 6.3. Вычисление коэффициента корреляции. Занесем в массив x оценки по высшей математике в сессию в некоторой студенческой группе, а в массив y – оценки по физике. Определим, существует ли какая–либо связь между успеваемостью по физике и высшей математике. i 0 .. 11 zi yi 4 4 3 3 4 4 3 3 4 4 3 3 3 3 4 3 3 4 5 5 3 3 3 3 Вычислим средние оценки и стандартное отклонение Zmean mean( z ) Zmean = 3.5 Ymean mean( y ) Ymean = 3.5 Yst stdev( y ) Yst = 0.645 Для вычисления коэффициента корреляции имеется встроенная функция corr 63 PhysMathCorr corr( y , z ) PhysMathCorr = 0.8 Близкий к 1 коэффициент корреляции свидетельствует о высокой зависимости между успеваемостью по этим предметам. 6.4. Применение метода Монте-Карло для вычисления кратных интегралов Хотя Mathcad позволяет вычислять кратные интегралы непосредственно, однако в большинстве случаев при кратности интегралов 3 и более применение метода Монте-Карло предпочтительнее. Дело в том, при одинаковой точности метод Монте-Карло дает существенный выигрыш во времени (в десятки и сотни раз), особенно при большой кратности интегралов. Идея метода состоит в том, что интеграл заменяется величиной Fср.·V, где V – объем области интегрирования, Fср. –среднее значение подынтегральной функции, вычисленное по нескольким случайно выбранным точкам. Определим подынтегральную функцию. 2 2 2 f( x , y , z ) 125 x y z И вычислим интеграл обычным способом (обратите внимание на время счета!) 1 1 1 f( x , y , z ) dz dy dx = 124 0 0 0 А теперь вычислит тот же интеграл методом Монте-Карло N 3000 i 0 .. N 1 xi rnd( 1 ) yi rnd( 1 ) zi rnd( 1 ) vi f xi , yi , zi mean( v) = 123.982 Поскольку в нашем случае объем области интегрирования равен 1, полученное среднее значение совпадает со значением интеграла. При относительной погрешности в 0.001% время вычисления интеграла по методу Монте-Карло существенно меньше. Интеграл можно вычислить и другим способом. Заключим область интегрирования внутрь прямоугольной области, "набросаем" внутрь полученной области N случайных точек. Тогда интеграл найдем из соотношения n I V ,где N – общее число точек, n – число точек, лежащих внутри обN ласти интегрирования, V – объем области, включающей область интегрирования. Максимальное значение подынтегральной функции в области интегрирования не превосходит 125, следовательно, мы может заключить всю область интегрирования внутрь четырехмерного цилиндроида высотой 125 и объемом V=125. Сгенерируем N четверок случайных чисел и подсчитаем, 64 сколько из них лежит под поверхностью f(x,y,z). ti rnd( 125 ) S if ti < f x i , y i , z i , 1 , 0 i I S 125. N I = 124.125 65 Глава 7. Анализ и синтез сигналов с помощью преобразования Фурье. Определим функцию, задающую так называемый пилообразный сигнал f( x ) x floor( x ) и изобразим ее на графике x 0 , 0.01 .. 2 1 f( x ) 0.5 0 0 0.5 1 1.5 2 x Заполним массив s: i 0 .. 127 si f i 64 g fft( s ) Проводим прямое преобразование Фурье: Внимание! В том случае, когда в массиве s содержится 2 m элементов, причем все числа действительные, следует использовать функцию fft. Во всех остальных случаях – функцию cfft. Массив g содержит комплексные коэффициенты дискретного преобразования Фурье. Размер массива f – 1 2m -1 Для анализа вклада отдельных гармоник в исходный сигнал изобразим на графике модули и аргументы гармоник if gj 0 , arg gj , 0 j 0 .. 64 aj 5 5 g a j j 0 0 0 50 j 5 0 50 j Проводим обратное преобразование Фурье, исключив гармоники с малым вкладом. Будем учитывать только гармоники с амплитудой не менее 0.3. Для отсечения слагаемых с малым вкладом воспользуемся функцией единичного скачка – функцией Хевисайда Ф. 66 gj . Gj 0.3 gj Для обратного преобразования Фурье используется функция ifft, если прямое преобразование осуществлялось с помощью fft, и cifft, если прямое преобразование осуществлялось с помощью cfft. h ifft( G ) 1.5 1 h i 0.5 0 0.5 0 50 100 i Повторим преобразование Фурье, учтя слагаемые с амплитудой до 0.1. Gj gj . gj 0.1 h ifft( G ) 1 s i 0.5 0 0 20 40 60 80 100 120 i Учет дополнительных гармоник существенно улучшил результат синтеза сигналов. 67 Литература 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. MATHCAD 6.0 PLUS/ Финансовые, инженерные и научные расчеты в среде Windows 95./ Пер. с англ. – М.: Информационно-издательский дом "Филинъ", 1996. – 712 с. Плис А.И., Сливина Н.А. Mathcad: математический практикум. – М.: Финансы и Статистика. – 1999. Очков В.Ф. Mathcad 8 Pro для студентов и инженеров. – М.: КомпьютерПресс, 1999. Очков В.Ф.. MathCad 7 Pro для студентов и инженеров. – М.: КомпьютерПресс, 1998. – 384 с. Дьяконов В.П. Справочник по MathCAD PLUS 6.0 PRO. – М.: CK Пресс, 1997. – 336 с. Дьяконов В.П. Справочник по MathCAD PLUS 7.0 PRO. – М.: CK Пресс, 1998. – 352 c. Дьяконов В. П., Абраменкова И. В. MathCAD 7 в математике, в физике и в Internet. – М.: Нолидж.- 1998. – 352 с. Шелест А. Е. Микрокалькуляторы в физике. – М.: Наука. Гл. ред. физ.мат. лит., 1988. – 272 с. Шикин Е.В., Плис А.И. Кривые и поверхности на экране компьютера. Руководство по сплайнам для пользователей. – М.: ДИАЛОГ–МИФИ, 1996. – 240 с. Тейлор Дж. Введение в теорию ошибок. Пер. с англ. – М.: Мир, 1985. – 272 с., ил. Ортега Дж., Пул У. Введение в численные методы решения дифференциальных уравнений/ Пер. с англ.; Под ред. А. А. Абрамова. – М.: Наука. Гл. физ.-мат. лит., 1986. – 288 с. Заварыкин В. М., Житомирский В. Г., Лапчик М. П. Численные методы: Учеб. пособие для студентов физ.-мат. спец. пед. ин-тов. – М.; Просвещение, 1990. – 176 с. Демидович Б. П., Марон И. А. Основы вычислительной математики. – М.: Наука. Гл. ред. физ.-мат. лит., 1966. Демидович Б. П., Марон И. А., Шувалова Э. З. Численные методы анализа. – М.: Наука. Физматгиз, 1962. 68 Содержание Введение .............................................................................................................. 3 Глава 1. Нахождение корней уравнений .......................................................... 5 ВВЕДЕНИЕ ......................................................................................................... 5 1.1. ФУНКЦИИ ПРОИЗВОЛЬНОГО ВИДА ............................................................. 8 1.2. НАХОЖДЕНИЕ КОРНЕЙ ПОЛИНОМОВ ....................................................... 10 1.3. НАХОЖДЕНИЕ КОРНЕЙ УРАВНЕНИЙ ПУТЕМ СИМВОЛИЧЕСКИХ ПРЕОБРАЗОВАНИЙ. .......................................................................................... 10 1.4 ПОИСК КОРНЕЙ УРАВНЕНИЙ В MATHCAD 2000. ....................................... 11 Глава 2. Решение систем уравнений и неравенств. ........................................ 12 ВВЕДЕНИЕ.................................................................................................... 12 2.1. РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ И НЕЛИНЕЙНЫХ УРАВНЕНИЙ И НЕРАВЕНСТВ. ................................................................................................... 12 2.2. РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ И НЕРАВЕНСТВ. ................... 14 2.3. СИМВОЛИЧЕСКОЕ РЕШЕНИЕ СИСТЕМ УРАВНЕНИЙ .................................. 14 2.4. НАХОЖДЕНИЕ ЭКСТРЕМУМОВ ФУНКЦИЙ ................................................. 15 Глава 3. Аппроксимация функций ................................................................... 18 ВВЕДЕНИЕ ....................................................................................................... 18 3.1. ЛОКАЛЬНАЯ ИНТЕРПОЛЯЦИЯ ........................................................ 18 3.1.1. Линейная интерполяция.................................................................. 18 3.1.2. Интерполяция сплайнами. .............................................................. 19 3.2. ГЛОБАЛЬНАЯ ИНТЕРПОЛЯЦИЯ ...................................................... 24 3.3. МЕТОД НАИМЕНЬШИХ КВАДРАТОВ ............................................. 27 ВВЕДЕНИЕ ................................................................................................ 27 3.3.1. Аппроксимация линейной функцией ............................................... 27 3.3.2. Аппроксимация полиномами ........................................................... 29 3.3.3. Аппроксимация линейной комбинацией функций .......................... 31 3.3.4. Аппроксимация функцией произвольного вида ............................. 33 Глава 4. Вычисление определенных интегралов ............................................ 36 4.1. МЕТОД РОМБЕРГА .................................................................................... 36 4.2 ВЫЧИСЛЕНИЕ ОПРЕДЕЛЕННЫХ ИНТЕГРАЛОВ ............................................ 38 Глава 5. Решение дифференциальных уравнений .......................................... 40 5.1. ОБЫКНОВЕННЫЕ ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ .............................. 40 Введение ..................................................................................................... 40 5.1.1. Метод Эйлера для дифференциальных уравнений первого порядка ....................................................................................................... 42 5.1.2. Решение систем дифференциальных уравнений. ......................... 43 5.1.3. Решение дифференциальных уравнений методом Рунге–Кутты ..................................................................................................................... 45 5.1.4. Решение дифференциальных уравнений второго порядка .......... 46 5.1.5. Решение краевой задачи. ................................................................ 47 5.1.6. Решение обыкновенных дифференциальных уравнений в Mathcad 2000............................................................................................................. 49 69 5.2. РЕШЕНИЕ УРАВНЕНИЙ В ЧАСТНЫХ ПРОИЗВОДНЫХ. ................................ 51 Введение ..................................................................................................... 51 5.2.1. Уравнения гиперболического типа ................................................ 51 5.2.2. Уравнения параболического типа. ................................................ 53 5.2.3. Решение уравнений Лапласа и Пуассона....................................... 55 Глава 6. Статистические расчеты на Mathcad ................................................ 58 6.1. ГЕНЕРАЦИЯ ЧИСЕЛ, РАСПРЕДЕЛЕННЫХ РАВНОМЕРНО............................. 58 6.2. ГЕНЕРАЦИЯ СЛУЧАЙНЫХ ЧИСЕЛ, РАСПРЕДЕЛЕННЫХ ПО НОРМАЛЬНОМУ ЗАКОНУ. ........................................................................................................... 60 6.3. ВЫЧИСЛЕНИЕ КОЭФФИЦИЕНТА КОРРЕЛЯЦИИ. ......................................... 63 6.4. ПРИМЕНЕНИЕ МЕТОДА МОНТЕ-КАРЛО ДЛЯ ВЫЧИСЛЕНИЯ КРАТНЫХ ИНТЕГРАЛОВ.................................................................................................... 64 Глава 7. Анализ и синтез сигналов с помощью преобразования Фурье. ..... 66 Литература ......................................................................................................... 68 70