МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное бюджетное образовательное учреждение высшего образования «УЛЬЯНОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» П. А. Вельмисов, С. В. Киреев ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ В MATHCAD Учебное пособие Ульяновск УлГТУ 2016 УДК 004.42 : 517.9 (075) ББК 32.973.26 – 018.2 я7 В 28 Рецензенты: кафедра прикладной математики УлГУ (зав. кафедрой д-р физ.-мат. наук, профессор А. А. Бутов); д-р физ.-мат. наук, профессор кафедры информационной безопасности и теории управления УлГУ В. Л. Леонтьев. Утверждено редакционно-издательским советом университета в качестве учебного пособия. Вельмисов, Петр Александрович В 28 Дифференциальные уравнения в Mathcad : учебное пособие / П. А. Вельмисов, С. В. Киреев. – Ульяновск : УлГТУ, 2016. – 109 с. ISBN 978-5-9795-1578-6 В учебном пособии представлены сведения о решении обыкновенных дифференциальных уравнений в среде Mathcad. Применение Mathcad рассмотрено на примерах дифференциальных уравнений, возникающих при математическом моделировании различных систем и процессов в прикладных задачах. Пособие предназначено для бакалавров и магистров всех специальностей, изучающих дифференциальные уравнения. Может быть использовано также при организации научной работы студентов и аспирантов. Работа выполнена на кафедре «Высшая математика» УлГТУ. Печатается в авторской редакции. УДК 004.42 : 517.9 (075) ББК 32.973.26 – 018.2 я7 ISBN 978-5-9795-1578-6 © Вельмисов П. А., Киреев С. В., 2016 © Оформление. УлГТУ, 2016 Введение В данном учебном пособии рассматривается решение обыкновенных дифференциальных уравнений в системе Mathcad. Применение Mathcad интерпретируется на примерах дифференциальных уравнений, возникающих при математическом моделировании различных систем и процессов в прикладных задачах. Решение дифференциальных уравнений требует знания многих тем из курса математики, а именно знания производной, определенного и неопределенного интеграла, знания основ матричного исчисления, а также умения решать алгебраические, тригонометрические, показательные и другие уравнения и строить графики функций. Настоящее учебное пособие предназначено для бакалавров и специалистов всех направлений и специальностей, изучающих раздел «Обыкновенные дифференциальные уравнения». Оно направлено, в частности, на выработку у студентов навыков решения типовых задач с применением информационных компьютерных технологий. Учебное пособие состоит из введения, четырех разделов, заключения и библиографического списка. В первом разделе рассматриваются динамические системы, в частности дифференциальные уравнения N-го порядка и системы N дифференциальных уравнений. Представлены сведения о жестких системах ОДУ и о новых возможностях Mathcad 14. Во втором разделе рассматривается решение краевых задач средствами Mathcad, в том числе двухточечных краевых задач, краевых задач с условием во внутренней точке, а также задач на собственные значения для ОДУ. Представлена также информация о разностных схемах для ОДУ и жестких краевых задачах. В третьем разделе приводятся примеры построения аналитических решений дифференциальных уравнений в Mathcad. Рассматриваются «метод интегрирования» (по терминологии из [3]) для уравнений с разделяющимися переменными, задача Коши, однородные дифференциальные уравнения первого порядка, линейные дифференциальные уравнения с постоянными коэффициентами. В четвертом разделе приводятся аналитические решения некоторых классов дифференциальных уравнений в Mathcad. Представлены примеры решения в Mathcad дифференциальных уравнений из сборника заданий по высшей математике Кузнецова Л.А. [1]: дифференциальные уравнения с разделяющимися переменными, однородные дифференциальные уравнения первого порядка и сводящиеся к однородным, линейные дифференциальные уравнения первого порядка, уравнения Бернулли, линейные дифференциальные уравнения с постоянными коэффициентами. Учебное пособие подготовлено в рамках государственного задания №2014/232 Минобрнауки РФ и при поддержке грантов РФФИ №15-01-08599, №15-41-02455р_поволжье_а. 3 1. Обыкновенные дифференциальные уравнения: динамические системы В этой главе рассматриваются численные методы решений задач с начальными условиями (называемых задачами Коши) для обыкновенных дифференциальных уравнений (далее используется сокращение ОДУ). Такие задачи требуют нахождения функции (или нескольких функций) одной переменной, если, во-первых, определено дифференциальное уравнение (или система уравнений), содержащее производную функции, и, во-вторых, необходимое количество дополнительных условий, задающих значение функции (функций) в некоторой начальной точке. 1.1. О постановке задач Решение задач Коши для ОДУ – давно и детально разработанная технология. С «хорошими» ОДУ вообще никаких вычислительных проблем обычно не возникает (чаще всего они решаются при помощи алгоритма Рунге-Кутты), а для ОДУ особого типа, называемых жесткими, необходимо применять специальные методы. Все эти возможности заложены в Mathcad, причем пользователю позволено выбирать конкретный алгоритм решения ОДУ. 1.1.1. Задачи Коши для ОДУ Дифференциальные уравнения – это уравнения, в которых неизвестными являются не переменные, а функции одной или нескольких переменных. Эти уравнения (или системы) включают соотношения между искомыми функциями и их производными. Если в уравнения входят производные только по одной переменной, то они называются обыкновенными дифференциальными уравнениями. В противном случае говорят об уравнениях в частных производных. Решить (иногда говорят «проинтегрировать») дифференциальное уравнение – значит, определить неизвестную функцию на определенном интервале изменения ее аргументов. ОДУ с неизвестной функцией y(t), в которое входят производные этой функции вплоть до y (N) (t), называется ОДУ N-го порядка. В частности, уравнение первого порядка может по определению содержать помимо самой искомой функции y(t) только ее первую производную y(t), второго порядка – y(t) и y(t), и т. д. Во многих практических случаях дифференциальное уравнение первого порядка можно записать в стандартной форме (форме Коши): y(t) f(y(t),t) . Листинг 1.1 демонстрирует решение простого ОДУ второго порядка, описывающего модель затухающего гармонического осциллятора. Само уравнение приведено во второй строке листинга, после 4 задания параметров модели, а вычисленный результат, т. е. искомая функция y(t), показан на рис. 1.1 Модель гармонического осциллятора описывает, в частности, колебания маятника: y(t) описывает изменения угла его отклонения от вертикали, y(t) – угловую скорость маятника, y(t) – ускорение, а начальные условия, соответственно, начальное отклонение маятника y(0) 1.0 и начальную скорость y(0) 0. Важно отметить, что модель является линейной, т. е. неизвестная функция (и ее производные) входят в уравнение линейно. Листинг 1.1. Решение задачи Коши для ОДУ второго порядка (модель затухающего гармонического осциллятора) : 0.5 : 0.2 Given d2 d 2 y ( t ) y( t ) y ( t ) 0 dt dt y(0) 0 y(0) 1.0 y : Odesolve( t ,10) 2 В последних версиях Mathcad имеется возможность выбрать численный алгоритм, применяемый функцией Odesolve для решения ОДУ. Для этого следует щелкнуть на имени функции Odesolve правой кнопкой мыши. Как показывает листинг 1.1, помимо самого уравнения потребовалось определить два начальных условия (третья и четвертая строки листинга) – начальные значения y(t) и y(t) при t 0 . Вообще говоря, ОДУ (или система ОДУ) имеет единственное решение, если помимо уравнения определенным образом заданы начальные или граничные условия. В соответствующих курсах высшей математики доказываются теоремы о существовании и единственности решения в зависимости от тех или иных условий. 2 Рис. 1.1. Решение уравнения ω y βy y 0 (продолжение листинга 1.1) 5 Имеются два типа задач, которые возможно решать с помощью Mathcad: задачи Коши – для которых определены начальные условия на искомые функции, т. е. заданы значения этих функций в начальной точке интервала интегрирования уравнения (именно им и посвящена данная глава); краевые задачи – для которых заданы определенные соотношения сразу на обеих границах интервала. Сказанное относится как к отдельным дифференциальным уравнениям, так и к системам ОДУ. Важно подчеркнуть, что Mathcad умеет решать только такие системы дифференциальных уравнений, которые могут быть представлены в стандартной форме (форме Коши). Для неизвестных функций y 0 (t) , y1 (t) , … , y N -1 (t) система ОДУ должна быть записана в форме: y0 (t) f 0 (y 0 (t), y1 (t),, y N 1 (t), t); y1 (t) f1 (y 0 (t), y1 (t),, y N 1 (t), t); (1.1) yN-1 (t) f N-1 (y 0 (t), y1 (t),, y N 1 (t), t); что эквивалентно следующему векторному представлению: (1.2) Y (t) F(Y(t), t). Здесь Y и Y – соответствующие неизвестные векторные функции переменной t размера N 1, а F – векторная функция того же размера и количества переменных (N 1) ( N компонент вектора и, возможно, t ). Именно векторное представление (1.2) используется для ввода системы ОДУ в среде Mathcad. Для того чтобы определить задачу Коши для системы из N ОДУ первого порядка, следует определить еще ровно N начальных условий, задающих значение каждой из функций y i (t 0 ) в начальной точке интегрирования системы t 0 . В векторной форме они могут быть записаны в виде: Y(t 0 ) B, (1.3) где B – вектор начальных условий размера N 1 , составленный из y i (t 0 ) . Обратите внимание на необходимость векторной записи, как самого уравнения, так и начального условия. В случае одного ОДУ первого порядка соответствующие векторы имеют только один элемент, а в случае системы N 1 уравнений – N . Стандартные процедуры Mathcad применимы для систем ОДУ первого порядка, записанных в форме (1.2) – (1.3). Тем не менее, если в систему входят и уравнения высших порядков, то ее можно свести к системе большего числа уравнений первого порядка. Рассмотрим в качестве примера уравнение второго порядка модели осциллятора ω 2 y βy y 0 , решенное в листинге 1.1. Если ввести обозначение y 0 (t) y(t) , y1 (t) y(t) , то уравнение сведется к эквивалентной системе: 6 y0 (t) y1 (t), 2 ω y1 βy1 y 0 0, форма которой соответствует представлению (1.2), и уравнение может быть решено средствами Mathcad, предназначенными для систем ОДУ. Именно эта система решена ниже в листинге 1.3. Отметим, что на рис. 1.1 показаны как зависимость y(t), так и y1 (t) y(t) . 1.1.2. Фазовый портрет динамической системы Модели, основанные на задачах Коши для ОДУ, часто называют динамическими системами, подчеркивая, что, как правило, они содержат производные по времени t и описывают динамику некоторых параметров. Проблемы, связанные с динамическими системами, на самом деле весьма разнообразны и зачастую не сводятся к простому интегрированию ОДУ. Некоторые из них мы обозначим в данном разделе, отметив, что для изучения динамических систем центральным моментом является анализ фазовых портретов, т. е. решений, получающихся при выборе всевозможных начальных условий. Решение ОДУ часто удобнее изображать не в виде графика y 0 (t), y1 (t), ... , как на рис. 1.1, а в фазовом пространстве, по каждой из осей которого откладываются значения каждой из найденных функций. При таком построении графика аргумент t будет присутствовать на нем лишь параметрически. В рассматриваемом случае двух ОДУ фазовое пространство является координатной плоскостью, а решение представляет собой кривую, или, по-другому, траекторию, выходящую из точки, координаты которой соответствуют начальным условиям (рис. 1.2). В общем случае, если система состоит из N ОДУ, то фазовое пространство является N-мерным. При N 3 наглядность теряется, и для визуализации фазового пространства приходится строить его различные проекции или прибегать к другим специальным приемам (например, отображению Пуанкаре). Как правило, решение задач Коши для ОДУ и их систем – задача, хорошо разработанная и с вычислительной точки зрения довольно простая. На практике чаще встречаются другие, более сложные задачи, в частности, исследование поведения динамической системы в зависимости от начальных условий. При этом в большинстве случаев бывает необходимым изучить только асимптотическое решение ОДУ, т. е. y(t ), называемое аттрактором. Очень наглядным образом можно визуализировать такую информацию на фазовой плоскости, во многом благодаря тому, что существует всего несколько типов аттракторов, и для них можно построить четкую классификацию. С одной стороны, каждое решение будет выходить из точки, координаты которой соответствуют начальным условиям, но, оказывается, для большинства ОДУ целые семейства траекторий будут заканчиваться в одних и тех же аттракторах (стационарных точках или 7 предельных циклах). Множество решений, построенное для всевозможных начальных условий, образует фазовый портрет динамической системы. С вычислительной точки зрения задача исследования фазового портрета часто сводится к обычному сканированию семейств решений ОДУ при разных начальных условиях. Рис. 1.2. Решение уравнения ω 2 y βy y 0 на фазовой плоскости (продолжение листинга 1.1) Примечание Для рассматриваемого примера модели гармонического осциллятора имеется единственная стационарная точка (аттрактор), на которую «накручивается» решение, из каких бы начальных условий оно ни выходило. В теории динамических систем аттрактор такого типа называется фокусом. Дальнейшее усложнение задач анализа фазовых портретов связано с их зависимостью от параметров, входящих в систему ОДУ. В частности, при плавном изменении параметра модели может меняться расположение аттракторов на фазовой плоскости, а также могут возникать новые аттракторы и прекращать свое существование старые. В первом случае, при отсутствии особенностей, будет происходить простое перемещение аттракторов по фазовой плоскости (без изменения их типов и количества), а во втором – фазовый портрет динамической системы будет коренным образом перестраиваться. Критическое сочетание параметров, при которых фазовый портрет системы качественно меняется, называется в теории динамических систем точкой бифуркации. Поясним понятие бифуркации на примере той же модели осциллятора, которая зависит от двух параметров (ω и β). При β 0 существует единственная стационарная точка типа фокуса (см. рис. 1.2), которая в точке бифуркации β 0 вырождается в аттрактор типа центр, характеризующийся тем, что решения ОДУ представляют собой циклы, совершаемые вокруг этой точки с амплитудой, которая существенно зависит от начальных условий (рис. 1.3). Для надежного исследования фазового портрета практически 8 всегда необходимо решить систему ОДУ большое количество раз с самыми разными начальными условиями (и, возможно, с разным набором параметров модели), чтобы посмотреть, к каким аттракторам сходятся различные траектории. Рис. 1.3. Решение уравнения ω y y 0 для различных начальных условий (коллаж графиков) 2 Резюмируя содержание вводного раздела главы, перечислим еще раз типичные постановки задач, характерные для динамических систем: решение задачи Коши для ОДУ; исследование фазового портрета (поиск аттракторов); отыскание зависимости положения аттракторов в фазовом пространстве от параметров модели и фиксация бифуркационных значений параметров. В дальнейших разделах этой главы при рассказе о возможностях Mathcad мы будем в первую очередь описывать решение первой (базовой) задачи, для которой предусмотрен целый арсенал средств. А именно: вычислительный блок для решения ОДУ, несколько встроенных функций для решения систем ОДУ, в том числе жестких, которые не поддаются решению стандартными методами. Сводка алгоритмов с рекомендациями по их применению в зависимости от типа задачи приведена конспективно, без детального разбора. 1.2. Дифференциальное уравнение N-го порядка Для решения ОДУ порядка N 1 в Mathcad предусмотрены две возможности: вычислительный блок Given/Odesolve (начиная с версии 2000) – в этом случае решение имеет вид функции от t ; встроенные функции решения систем ОДУ, причем уравнения высших порядков необходимо предварительно свести к эквивалентной системе уравнений первого порядка, – в этом случае решение имеет формат вектора. 9 В данном разделе рассматривается первый из вариантов, а второй будет описан в следующем, применительно к общему случаю системы N уравнений. Заметим лишь, что первый путь предпочтительнее из соображений наглядности представления задачи и результатов, а второй дает пользователю больше рычагов воздействия на параметры численного метода. Вычислительный блок для решения ОДУ, реализующий численный метод Рунге-Кутты, состоит из трех частей: Given – ключевое слово; ОДУ и начальные условия в формате y(t 0 ) b , записанные с помощью логических операторов, которые должны набираться на панели инструментов Boolean (Булевы операторы); Odesolve(t , t1 ) – встроенная функция для решения ОДУ относительно переменной t на интервале (t 0 , t 1 ) , причем t 0 t1 . Примечание 1 На запись ОДУ в пределах вычислительного блока накладывается несколько ограничений. Во-первых, ОДУ должно быть линейно относительно старшей производной, т. е. фактически должно быть представлено в стандартной форме. Во-вторых, начальные условия должны иметь форму y(t 0 ) b или y (N) (t 0 ) b , а не более сложную (как, например, встречающаяся в некоторых математических приложениях форма y(t 0 ) y(t 0 ) b ). Примечание 2 Допустимо, и даже часто предпочтительнее, задание функции Odesolve(t , t1 , step) с тремя параметрами, где step – внутренний параметр численного метода, определяющий количество шагов, в которых метод Рунге-Кутты будет рассчитывать решение дифференциального уравнения. Чем больше step, тем с лучшей точностью будет получен результат, но тем больше времени будет затрачено на его поиск. Помните, что подбором этого параметра можно заметно (в несколько раз) ускорить расчеты без существенного ухудшения их точности. Листинг 1.2. Решение задачи Коши для ОДУ второго порядка (модель нелинейного осциллятора) : 0.5 Given : 0.2 : 0.95 d d2 2 y( t ) y( t ) y( t ) y( t ) 2 0 dt dt y(0) 3 y(0) 0 y : Odesolve( t ,20) 2 10 Пример решения задачи Коши для ОДУ второго порядка, являющегося усложнением уравнения для модели из листинга 1.1 на нелинейный случай (с квадратичной нелинейностью у), приведен в листинге 1.2, а результат – на рис. 1.4. Рис. 1.4. Решение уравнения ω 2 y βy y γy 2 0 (продолжение листинга 1.2) Учтите, что символ производной допускается вводить как средствами панели Calculus (Вычисления), как это сделано в листинге 1.1, так и в виде штриха, набрав его с помощью сочетания клавиш <Ctrl>+<F7> (как в листинге 1.2). Выбирайте тот или иной способ представления производной из соображений наглядности представления результатов – на ход расчетов он не влияет. Еще раз подчеркнем, что результатом применения блока Given/Odesolve является функция y(t), определенная на промежутке (t 0 ,t1 ). Следует воспользоваться обычными средствами Mathcad, чтобы построить ее график или получить значение функции в какой-либо точке указанного интервала, например: y(10) 0.048. Пользователь имеет возможность выбирать между тремя модификациями численного метода Рунге-Кутты. Для смены метода необходимо нажатием правой кнопки мыши на области функции Odesolve вызвать контекстное меню и выбрать в нем один из трех пунктов: Fixed (С фиксированным шагом), Adaptive (Адаптивный) или Stiff (Для жестких ОДУ). 1.3. Система N дифференциальных уравнений При помощи Mathcad можно решать системы N 1 ОДУ первого порядка, если они записаны в стандартной форме (Коши) в виде векторного соотношения: Y (t) F(Y(t), t) . 11 1.3.1. Встроенные функции для решения систем ОДУ В Mathcad имеется несколько встроенных функций, которые позволяют решать задачу Коши различными численными методами. Для «хороших» нежестких систем ОДУ применяются следующие функции: rkfixed(y 0 , t 0 , t1 , M, D) – метод Рунге-Кутты с фиксированным шагом; Rkadapt(y 0 , t 0 , t1 , M, D) – метод Рунге-Кутты с переменным шагом; Bulstoer(y 0 , t 0 , t1 , M, D) – метод Булирша-Штера; y 0 – вектор начальных значений в точке t 0 размера N 1 ; t 0 – начальная точка расчета; t 1 – конечная точка расчета; M – число шагов, на которых численный метод находит решение; D – векторная функция размера N 1 двух аргументов – скалярного t и векторного y . При этом y – искомая векторная функция аргумента t того же размера N 1 . Примечание 1 Соблюдайте регистр первой буквы рассматриваемых функций, поскольку это влияет на выбор алгоритма счета, в отличие от многих других встроенных функций Mathcad, например, Find find . Примечание 2 Несколько новых функций для решения жестких и нежестких ОДУ, основанных на более современных численных алгоритмах, появились в Mathcad 14. Каждая из приведенных функций выдает решение в виде матрицы размера (M 1) (N 1) . В ее левом столбце находятся значения аргумента t , делящие интервал на равномерные шаги, а в остальных N столбцах – значения искомых функций y 0 (t), y1 (t), … , y N-1 (t), рассчитанные для этих значений аргумента (рис. 1.5). Поскольку всего точек (помимо начальной) M, то строк в матрице решения будет всего M 1 . В листинге 1.3 приведен пример решения той же самой системы ОДУ осциллятора с затуханием (см. разд. 1.1 и 1.2) при помощи первой из функций rkfixed. Результат расчетов представлен на рис. 1.5 как содержимое матрицы и на рис. 1.6 в виде графика. Точки, в которых получено решение, отмечены на графике рис. 1.6 кружками. Чтобы использовать другой численный алгоритм, достаточно поменять имя функции rkfixed в последней строке листинга на другое (на практике как раз более эффективны функции Rkadapt и Bulstoer). 12 Листинг 1.3. Решение системы двух ОДУ (модель осциллятора) : 0.5 : 0.2 1 y 0 : 0 M : 50 y1 D( t , y) : y y 0 1 u : rkfixed( y 0 ,0,40, M, D) Первая строка листинга представляет задание параметров модели, вторая – начального условия задачи Коши, а в третьей строке листинга определено число шагов, на которых рассчитывается решение. Самая важная – это предпоследняя строка листинга, в которой, собственно, определяется система ОДУ. Последняя строка присваивает матричной переменной u результат действия функции rkfixed. Решение системы ОДУ будет осуществлено на промежутке (0,40). Сравните рассматриваемую систему (см. разд. 1.1.1), записанную в стандартной форме, с формальной ее записью в Mathcad, чтобы не делать впоследствии ошибок. Во-первых, функция D , входящая в число параметров встроенных функций для решения ОДУ, должна быть функцией обязательно двух аргументов. Во-вторых, второй ее аргумент должен быть вектором того же размера, что и сама функция D . В-третьих, точно такой же размер должен быть и у вектора начальных значений y0 . Не забывайте, что векторную функцию D(t, y) следует определять через компоненты вектора y с помощью кнопки Subscript (Нижний индекс) с наборной панели Calculator (Калькулятор) или нажатием клавиши <[>. Рис. 1.5. Результат, выдаваемый встроенной функцией в качестве решения системы ОДУ (продолжение листинга 1.3) 13 Матрица, представляющая решение, показана на рис. 1.5. Размер полученной матрицы будет равен (M 1) (N 1), т. е. 51 3 . Просмотреть все компоненты матрицы и, которые не помещаются на экране, можно с помощью вертикальной полосы прокрутки. Как нетрудно сообразить, на этом рисунке отмечены выделением расчетные значения искомых векторов на 10-м шаге. Это соответствует, с математической точки зрения, найденным значениям y0 (8.0) 0.307 и y1 (8.0) 0.204. Для вычисления элементов решения в последней точке интервала используйте вывод элемента u M,1 . Для построения графика решения надо отложить соответствующие компоненты матрицы решения по координатным осям: значения аргумента u 0 – вдоль оси X , а u 1 и u 2 – вдоль оси Y (рис. 1.6). Рис. 1.6. График решения системы ОДУ осциллятора (продолжение листинга 1.3) Обратите внимание на некоторое разночтение в обозначении индексов вектора начальных условий и матрицы решения. В ее первом столбце собраны значения нулевой компоненты искомого вектора, во втором столбце – первой компоненты, и т. д. 1.3.2. Решение одного уравнения (N = 1) Метод решения ОДУ при помощи встроенных функций rkfixed, Rkadapt или Buistoer (в противоположность вычислительному блоку Given/Odesolve) сохранился с прежних версий Mathcad (до 2000-й). В большинстве случаев лучше использовать вычислительный блок Given/Odesolve, который выигрывает в простоте и в наглядности, однако иногда предпочтительнее решать ОДУ первого порядка с помощью второго способа, например, при следующих обстоятельствах: вы работаете одновременно с более старыми (до 2001-й включительно) версиями Mathcad и хотите, чтобы ваши документы воспринимались каждой из них корректно; одно ОДУ решается в контексте решения более сложных задач, в которые входят системы дифференциальных уравнений (для которых 14 вычислительный блок неприменим) – в этом случае может потребоваться единый стиль программирования; ответ предпочтительнее получить в виде вектора, а не функции; вы привыкли к записи ОДУ в старых версиях Mathcad, у вас много документов, созданных с их помощью, и т. п. Поскольку решение вторым способом одного ОДУ не отличается от решения систем ОДУ, приведем пример его использования (листинг 1.4) практически без комментариев. Отметим лишь в случае одного ОДУ, что как само уравнение, так и начальное условие можно задавать не в векторной, а в скалярной форме. Результат выдается в виде матрицы размерности M 2 , которая состоит из двух столбцов: в одном находятся значения аргумента t (от t0 до tl включительно), а в другом соответствующие значения искомой функции у(t). 2 Рис. 1.7. Решение уравнения y 1 y (продолжение листинга 1.4) Построение графика (рис. 1.7) осуществляется так же, как и в рассмотренном в предыдущем разделе случае N уравнений, при помощи выделения столбцов из матрицы решения посредством оператора < >. Листинг 1.4. Решение задачи Коши для ОДУ первого порядка y 0 : 0 M : 20 D( t , y) : 1 y 2 u : rkfixed( y 0 ,0,5, M, D) 15 1.3.3. Решение систем ОДУ в одной заданной точке Зачастую при решении дифференциальных уравнений требуется определить значения искомых функций не на всем интервале (t0,t1), а только в одной его последней точке. Например, весьма распространены задачи поиска аттракторов динамических систем. Известно, что для широкого класса ОДУ одна и та же система при разных (или даже любых, как рассмотренный выше пример осциллятора с затуханием) начальных условиях при t приходит в одну и ту же точку (аттрактор). Поэтому часто нужно определить именно эту точку. Такая задача требует меньше ресурсов компьютера, чем решение системы ОДУ на всем интервале, поэтому в Mathcad имеются модификации встроенных функций Rkadapt и Bulstoer. Они имеют несколько другой набор параметров и работают значительно быстрее своих аналогов: rkadapt (у0,t0,tl,асс,D,k,s) – метод Рунге-Кутты с переменным шагом; bulstoer (у0,t0,tl,асс,D,k,s) – метод Булирша-Штера: у0 – вектор начальных значений в точке t0; t0,t1 – начальная и конечная точки расчета; асc – погрешность вычисления (чем она меньше, тем с лучшей точностью будет найдено решение; рекомендуется выбирать значения погрешности в районе 0.001); D – векторная функция, задающая систему ОДУ; k – максимальное число шагов, на которых численный метод будет находить решение; s – минимально допустимая величина шага. Как легко заметить, вместо числа шагов на интервале интегрирования ОДУ в этих функциях необходимо задать точность расчета численным методом значения функций в последней точке. В этом смысле параметр асc похож на константу TOL, которая влияет на большинство встроенных численных алгоритмов Mathcad. Количество шагов и их расположение определяются численным методом автоматически, чтобы обеспечить эту точность. Два последних параметра нужны для того, чтобы пользователь мог искусственно повлиять на разбиение интервала на шаги. Параметр k служит для того, чтобы шагов не было чрезмерно много, причем нельзя сделать k>1000. Параметр s – для того, чтобы ни один шаг не был слишком малым для появления больших погрешностей при разностной аппроксимации дифференциальных уравнений внутри алгоритма. Эти параметры следует задавать явно, исходя из свойств конкретной системы ОДУ. Как правило, проведя ряд тестовых расчетов, можно подобрать их оптимальный набор для каждого конкретного случая. Пример использования функции bulstoer для той же модели линейного осциллятора приведен в листинге 1.5. В его первых двух строках, как обычно, определяется система уравнений и начальные условия; в следующей строке матрице присваивается решение, полученное с помощью bulstoer. 16 Структура этой матрицы в точности такая же, как и в случае решения системы ОДУ посредством уже рассмотренных нами ранее встроенных функций (см. разд. 1.3.1). Однако в данном случае нам интересна только последняя точка интервала. Поскольку сделанное численным методом количество шагов, т. е. размер матрицы, заранее неизвестно, то его необходимо предварительно определить. Это сделано в четвертой строке листинга, присваивающей это число переменной M, в этой же строке оно выведено на экран. В предпоследней строке листинга осуществлен вывод решения системы ОДУ на конце интервала, т. е. в точке t = 50 в виде вектора. В последней строке для примера еще раз выводится искомое значение первой функции из системы ОДУ (сравните его с соответствующим местом вектора из предыдущей строки). Чтобы попробовать альтернативный численный метод, достаточно в листинге 1.5 заменить имя функции bulstoer на rkadapt. Листинг 1.5. Поиск аттрактора системы двух ОДУ модели осциллятора 1 y 0 : 0 M : 50 y1 D( t , y) : 0 . 5 y 0 . 2 y 0 1 u : bulstoer y 0 ,0,300,10 5 , D, M,0.01 N : rows(u ) 1 u T N 300 14 7.645 10 3.128 10 14 1.3.4. О численных методах В завершение раздела сделаем несколько важных замечаний относительно выбора численного алгоритма решения ОДУ и задания его параметров. Они не претендуют на общность, но, надеемся, будут весьма полезны читателю, особенно в случае возникновения проблем. Рекомендации по выбору численного алгоритма Все численные методы решения ОДУ основаны на аппроксимации дифференциальных уравнений разностными аналогами. В зависимости от 17 конкретной формы аппроксимации получаются алгоритмы различной точности и быстродействия. В Mathcad использован наиболее популярный алгоритм Рунге-Кутты четвертого порядка, описанный в большинстве книг по методам вычислений. Он обеспечивает малую погрешность для широкого класса систем ОДУ, за исключением жестких систем. Поэтому в большинстве случаев стоит применять функцию rkfixed. Если по различным причинам время расчетов становится критичным или точность неудовлетворительна, стоит попробовать вместо rkfixed другие функции, тем более, что сделать это очень просто благодаря одинаковому набору параметров. Для этого нужно только поменять имя функции в программе. Функция Rkadapt может быть полезна в случае, когда известно, что решение на рассматриваемом интервале меняется слабо, либо существуют участки медленных и быстрых его изменений. Метод Рунге-Кутты с переменным шагом разбивает интервал не на равномерные шаги, а более оптимальным способом. Там, где решение меняется слабо, шаги выбираются более редкими, а в областях его сильных изменений – частыми. В результате для достижения одинаковой точности требуется меньшее число шагов, чем для rkfixed. Метод Булирша-Штера Bulstoer часто оказывается более эффективным для поиска гладких решений. Имея в виду сделанные замечания, приведем краткую сводку алгоритмов решения задач Коши для ОДУ, отмечая, какие из встроенных функций следует использовать в конкретных случаях. Если вы пользуетесь Mathcad 14, применяйте универсальную функцию AdamsBDF, которая способна автоматически выбирать жесткий или нежесткий численный алгоритм. Для решения единственного уравнения (любого порядка) используйте вычислительный блок Given/odesoive. Помните о том, что в последних версиях Mathcad допускается выбирать для этого блока численный алгоритм (в том числе, жесткий) из контекстного меню. Для стандартных нежестких систем используйте алгоритм БулиршаШтера Bulstoer. Для систем с участками быстро и медленно меняющихся решений используйте адаптивный алгоритм Рунге-Кутты Rkadapt. В учебных целях и для решения несложных задач можно использовать алгоритм Рунге-Кутты с фиксированным шагом Rkfixed. Для получения решения в одной конечной точке интервала используйте (в зависимости от перечисленных классов задач) одну из встроенных функций с именем, начинающимся со строчной буквы. Для жестких систем (см. разд. 1.4) используйте функции Radau Stiffb или Stiffr, причем, если вы затрудняетесь с вводом якобиана, применяйте первую из них. Мы не будем в этом пособии приводить описание численных алгоритмов, поскольку им посвящено огромное количество книг, и читатель, несомненно, найдет соответствующую литературу с подробным объяснением их работы. 18 Тем не менее, разберем несколько важных моментов, касающихся выбора алгоритма и его параметров. Число шагов Все встроенные функции требуют задания для численного метода количества шагов, разбивающих интервал интегрирования ОДУ. Это очень важный параметр, непосредственно влияющий на погрешность результата и скорость расчетов. При решении систем ОДУ многие проблемы могут быть устранены при помощи простой попытки увеличить число шагов численного метода. В частности, сделайте так при неожиданном возникновении ошибки «Found a number with a magnitude greater than 10^307» (Найдено число, превышающее значение 10307). Данная ошибка не обязательно говорит о том, что решение в действительности расходится, а возникает из-за недостатка шагов для корректной работы численного алгоритма. В качестве иллюстрации приведем результаты простых расчетов (листинг 1.6), в которых определяется пользовательская функция u(М), представляющая решение ОДУ в зависимости от числа шагов M. На рис. 1.8 показано несколько графиков решения системы ОДУ затухающего линейного осциллятора для нескольких значений M. Рис. 1.8. Решение системы ОДУ в зависимости от числа узлов M (продолжение листинга 1.6) Листинг 1.6. Решение системы ОДУ как функция числа шагов y1 D(t , y ) : 0.5 yo 0.2 y1 1 u ( M ) : Bulstoer ,0,50, M , D 0 Как можно заметить, несмотря в целом на правильное решение ОДУ в узлах (оно показано кружками и квадратами), профиль решения при малых M получается неверным. Это видно также на рис. 1.9, представляющем фазовый портрет системы с разным числом шагов. 19 Рис. 1.9. Фазовый портрет решения системы ОДУ при M = 40 и M = 200 (продолжение листинга 1.6) Видно, что для M = 200 решение получается более гладким (конечно, при этом увеличивается и время расчетов). Погрешность алгоритмов решения ОДУ в точке Обратимся теперь к функциям bulstoer и rkadapt (тем, что пишутся со строчной буквы), которые предназначены для нахождения решения в определенной точке интервала интегрирования системы ОДУ. В первую очередь, подчеркнем еще раз, что их нельзя применять для получения решения в промежуточных точках интервала, несмотря на их вывод в матрице-результате. На рис. 1.10 показан фазовый портрет системы ОДУ динамической модели осциллятора, полученный при помощи функции bulstoer в листинге 1.5 (см. разд. 1.3.3) и с помощью rkadapt (при соответствующей замене третьей строки листинга 1.5). Видно, что, несмотря на высокую точность, равную 10-5, и верный результат на конце интервала, график, полученный при помощи функции bulstoer (рис. 1.10, а), мало напоминает правильный фазовый портрет (см. рис. 1.9), начиная быть приемлемым только при предельно допустимом для обсуждаемых функций значении асс = 10 -16 . В данном случае конкретной системы ОДУ функция rkadapt дает качественно верное решение (рис. 1.10, б), однако его необходимая точность обеспечивается только в последней точке временного интервала. В заключение остановимся на влиянии выбора параметра асc на расчеты. Как правило, разные численные методы работают несколько по-разному. Алгоритм Рунге-Кутты дает результат тем ближе к истинному, чем меньше выбирается параметр асс, а Булирша-Штера часто демонстрирует менее естественную зависимость у(ε): даже при относительно больших ε реальная погрешность остается хорошей (намного лучше метода РунгеКутты). 20 a b Рис. 1.10. Фазовый портрет, полученный bulstoer (a) и rkadapt (b) (продолжение листинга 9.5) Поэтому для экономии времени расчетов в функции bulstoer можно выбирать и большие значения асc. Чтобы обеспечить заданную точность, данные алгоритмы могут изменять как количество шагов, разбивающих интервал (t0 ,t1 ), так и их расположение вдоль интервала. Чтобы выяснить, на сколько шагов разбивался интервал при расчетах, воспользуемся простой программой, представленной в листинге 1.7. В ней определены пользовательские функции R(ε) и B(ε), вычисляющие для конкретной задачи (методов Рунге-Кутты и Булирша-Штера соответственно) зависимость числа шагов (т. е. числа строк получающейся матрицы) от параметра ε = асс. Графики функций R(ε) и B(ε) показаны на рис. 1.11. Как видно, методу Рунге-Кутты при увеличении требуемой точности требуется все возрастающее количество шагов (и, соответственно, времени на расчеты), в противоположность методу Булирша-Штера, демонстрирующему большую экономичность. 21 Рис. 1.11. Зависимость числа шагов от параметра acc численных методов (продолжение листинга 1.7) Листинг 1.7. Число шагов адаптивного численного алгоритма в зависимости от погрешности acc y1 D( t , y) : y 0 . 1 y 1 0 k : 300 0.1 B(, k ) : rows bulstoer ,0,50, , D, k ,0.001 0 0.1 R (, k ) : rows rkadapt ,0,50, , D, k ,0.001 0 Таким образом, проводя тестовые расчеты для различных задач и подбирая наилучший набор параметров, можно существенно сэкономить ресурсы компьютера. Конечно, проводить подобный анализ стоит в случаях, когда время расчетов для вас критично. 1.4. Жесткие системы ОДУ До сих пор мы имели дело с «хорошими» уравнениями, которые надежно решались численными методами Рунге-Кутты. Однако имеется класс так называемых жестких (stiff) систем ОДУ, для которых стандартные методы практически неприменимы, поскольку их решение требует исключительно малого значения шага численного метода. Некоторые из специальных алгоритмов, разработанных для этих систем, реализованы в Mathcad. Исторически интерес к жестким системам возник в середине XX в. при изучении уравнений химической кинетики с одновременным присутствием 22 очень медленно и очень быстро протекающих химических реакций. Тогда неожиданно оказалось, что считавшиеся исключительно надежными методы Рунге-Кутты стали давать сбой при расчете этих задач. Строгого общепринятого математического определения жестких ОДУ нет. В рамках этого пособия будем считать, что жесткие уравнения – это те уравнения, решение которых получить намного проще с помощью определенных неявных методов, чем посредством явных методов (типа тех, что были рассмотрены в предыдущих разделах). Примерно такое определение было предложено в 1950-х гг. классиками в этой области Кертиссом и Хиршфельдером. Начнем разговор о жестких ОДУ с примера нежесткого уравнения (листинг 1.8), решение которого удается получить численным методом Рунге-Кутты (рис. 1.12). Листинг 1.8. Решение нежесткого ОДУ Given d y( t ) 10 ( y( t ) cos( t )) dt y ( 0) 1 y : Odesolve( t ,1) Рис. 1.12. Решение нежесткого ОДУ методом Рунге-Кутты (продолжение листинга 1.8) Обратите внимание на значение коэффициента –10 во второй строке листинга. Если изменить его на –50, то решение меняется до неузнаваемости (рис. 1.13). Вас, несомненно, должен насторожить результат, выданный Mathcad. Характерная «разболтка» решения говорит о неустойчивости алгоритма. Первое, что можно сделать, – увеличить количество шагов в методе Рунге-Кутты. Для этого достаточно добавить третий параметр step в функцию Odesolve (t, l, step). После нескольких экспериментов можно подобрать такое значение step, которое будет обеспечивать устойчивость 23 решения. Читатель может самостоятельно убедиться, что при step>20 «разболтка» пропадает, и решение принимает вид графика, показанного ниже на рис. 1.14 Рис. 1.13. Неверное решение более жесткого ОДУ методом Рунге-Кутты (листинг 1.8 с коэффициентом –50) Таким образом, во-первых, мы выяснили, что одни и те же уравнения с разными параметрами могут быть как жесткими, так и нежесткими. Во-вторых, чем жестче уравнение, тем больше шагов в обычных численных методах требуется для его устойчивого решения. С классическим примером ОДУ из листинга 1.8 все получилось хорошо, т. к. оно было не очень жестким, и небольшое увеличение числа шагов разрешило все проблемы. Дня решения обычными методами более жестких уравнений требуются миллионы, миллиарды и даже большее число шагов. Функции для решения жестких ОДУ Решение жестких систем дифференциальных уравнений можно осуществить только с помощью встроенных функций, аналогичных по действию семейству рассмотренных выше функций для обычных ОДУ: Radau(у0,t0,t1,M,F) – алгоритм RADAUS для жестких систем ОДУ; Stiffb(у0,t0,t1,M,F,J) – алгоритм Булирша-Штера для жестких систем ОДУ; Stiffr(у0,t0,t1,M,F,J) – алгоритм Розенброка для жестких систем ОДУ: y0 – вектор начальных значений в точке t0; t0,t1 – начальная и конечная точки расчета; M – число шагов численного метода; F – векторная функция F (t, у) размера 1 N , задающая систему ОДУ; J – матричная функция J(t,y) размера (N 1) N , составленная из вектора производных функции F (t, у) по t (правый столбец) и ее якобиана (N левых столбцов). 24 Как вы можете заметить, для двух последних функций серьезным отличием от функций, решающих нежесткие системы, является добавление к стандартному набору параметров дополнительной матричной функции, задающей якобиан системы ОДУ. Решение выдается в виде матрицы, по форме идентичной аналогичным функциям решения нежестких задач Коши. Решение жесткой задачи из предыдущего раздела при помощи функции Radau приведено в листинге 1.9. Результат показан в виде графика на рис. 1.14 вместе с графиком решения менее жесткой задачи (для которого применялся листинг 1.8). Как вы видите, хватило всего пяти точек разбиения интервала интегрирования жесткого ОДУ, чтобы метод с ним справился. Листинг 1.9. Решение жесткого ОДУ алгоритмом RADAUS F( t , y) : 100 ( y cos( t )) y0 : 1 M : 5 u : Radau ( y0,0,1, M, F) Рис. 1.14. Решение жесткого ОДУ методом RADAUS (продолжение листингов 1.8 и 1.9) В заключение приведем соответствующие встроенные функции, которые применяются для решения жестких систем ОДУ не на всем интервале, a только в одной заданной точке t1. radau(у0,t0,tl,асc,F, k,s) – метод RADAUS. stiffb(у0,t0,tl,асc,F,J,k,s) – метод Булирша-Штера. stiffr(у0,t0,tl,асc,F ,J ,k,s) – метод Розенброка. Имена данных функций пишутся со строчной буквы, а их действие и набор параметров полностью аналогичны рассмотренным нами ранее для функций, относящихся к решению в заданной точке нежестких систем (см. разд. 1.3.2). Отличие заключается в специфике применяемого алгоритма и необходимости задания матричной функции якобиана J(t,у) (для двух последних функций). 25 1.5. Новые возможности Mathcad 14 В Mathcad 14 появилось несколько новых встроенных функций для решения как жестких, так и нежестких ОДУ, основанных на более современных численных алгоритмах. 1.5.1. Новые алгоритмы решения жестких и нежестких ОДУ Перечислим новые встроенные функции, предназначенные для решения систем дифференциальных уравнений, а также упомянем об изменениях, добавленных в существующие функции. Учитывая, что почти все функции предусматривают как обязательные, так и опциональные аргументы, заключим такие необязательные аргументы в квадратные скобки. Radau(у0,t0,tl,M,F,[J,A,acc]) – модификация алгоритма RADAU (для жестких систем ОДУ и для систем дифференциальных и алгебраических уравнений); Adams(у0,t0,t1,M,F,[асc]) – алгоритм Адамса (применяется для нежестких систем ОДУ); BDF(у0,t0,t1,M,F,[J,асc]) – алгоритм BDF (применяется для жестких систем ОДУ); AdamsBDF(у0,t0,t1,M,F,[J,асc]) – универсальный гибридный метод Адамса-BDF, применяемый для любых (как жестких, так и нежестких) систем ОДУ (численный алгоритм сам решает, насколько жесткой является система, и какую из разновидностей метода следует использовать): y0 – вектор начальных значений в точке t0; t0,t1 – начальная и конечная точки расчета; M – число шагов численного метода; F – векторная функция F(t,у) размера 1 N , задающая систему ОДУ; J – Якобиан (матричная функция Якоби) J(t,y) размера N N , состав ленная из векторов частных производных векторной функции F(t,у); асc – погрешность вычисления; A – матрица, составленная из действительных чисел, которая задает связь между неизвестными в форме матричного равенства Ay =F (t, у). Пример использования новых функций приведен в листингах 1.10 и 1.11. Обратите внимание на то, что листинг 1.10 представляет автоматизированный подсчет матрицы Якоби при помощи новой встроенной функции Jacob. 26 Листинг 1.10. Решение ОДУ химической кинетики методом BDF 0.1 y 0 10 2 y1 y 2 F( t , y) : 0.1 y 0 10 2 y1 y 2 103 y1 103 y1 1 y0 : 0 0 J ( t , y) : Jacob(F( t , y), y) 100 y 2 100 y1 0.1 J ( t , y) 0.1 100 y 2 1000 100 y1 0 1000 0 D : BDF( y0,0,50,20, F, J, A) Листинг 1.11. Решение системы ОДУ и алгебраического уравнения 0.1 y 0 10 2 y1 y 2 F( t , y) : 0.1 y 0 10 2 y1 y 2 103 y1 y 0 y1 y 2 1 1 y0 : 0 0 1 0 0 A : 0 1 0 0 0 0 J ( t , y) : Jacob(F( t , y), y) 100 y 2 100 y1 0.1 J ( t , y) 0.1 100 y 2 1000 100 y1 1 1 1 D : BDF( y0,0,50,200, F, J, A) 27 В листинге 1.11 показано решение гибридной системы, составленной из двух дифференциальных и одного алгебраического уравнения вида d y0 -.1 y0 +100 y1 y 2 dt d y1 .1 y0 -100 y1 y 2 103 y1 dt 0 y0 y1 y 2 1 посредством модернизированной функции Radau. Результат ее применения показан в виде графика на рис. 1.15. Рис. 1.15. График решения гибридной системы (продолжение листинга 1.11) 1.5.2. Решение линейных ОДУ Разработчики Mathcad 14 предусмотрели дополнительную встроенную функцию statespace решения линейных ОДУ определенного вида у'(t) = А(t)y(t) + В(t)u(t) . statespace(y0,t0,t1,M,A,B,u) – функция решения систем линейных ОДУ. y0 – вектор начальных значений в точке t0; t0,t1 – начальная и конечная точки расчета; M – число шагов численного метода; асc – погрешность вычисления; A(t) – матричная функция размера N N ; B(t) – векторная функция размера N k ; u(t) – функция (скалярная, если k = 1; или векторная размера k 1 ). Пример использования функции statespace иллюстрируется листингом 1.12 и рис. 1.16. 28 Листинг 1.12. Решение системы линейных ОДУ 1 0 A( t ) : 1 2 0 y0 : 1 3 B( t ) : .1 u ( t ) : sin( t ) D : statespace( y0,0,20,500, A, B, u ) Рис. 1.16. Решение системы линейных ОДУ (продолжение листинга 1.12) 29 2. Обыкновенные дифференциальные уравнения: краевые задачи В этой главе рассматриваются краевые задачи для обыкновенных дифференциальных уравнений (ОДУ). Средства Mathcad, реализующие алгоритм стрельбы (см. разд. 2.2), позволяют решать краевые задачи для систем ОДУ, в которых часть граничных условий поставлена в начальной точке интервала, а остальная часть – в его конечной точке. Также возможно решать уравнения с граничными условиями, поставленными в некоторой внутренней точке. Краевые задачи во множестве практических приложений часто зависят от некоторого числового параметра. При этом решение существует не для всех его значений, а лишь для счетного их числа. Такие задачи называют задачами на собственные значения (см. разд. 2.3). Несмотря на то, что, в отличие от задач Коши для ОДУ, в Mathcad не предусмотрены встроенные функции для решения жестких краевых задач, с ними все-таки можно справиться, применив программирование разностных схем, подходящих для решения задач этого класса (см. разд. 2.4). 2.1. О постановке задач Постановка краевых задач для ОДУ отличается от задач Коши, рассмотренных в главе 1, тем, что граничные условия для них ставятся не в одной начальной точке, а на обеих границах расчетного интервала. Если имеется система N обыкновенных дифференциальных уравнений первого порядка, то часть из N условий может быть поставлена на одной границе интервала, а оставшиеся условия – на противоположной границе. Чтобы лучше понять, что из себя представляют краевые задачи, рассмотрим их постановочную часть на конкретном физическом примере – модели взаимодействия встречных световых пучков. Предположим, что надо определить распределение интенсивности оптического излучения в пространстве между источником (лазером) и зеркалом, заполненном некоторой средой (рис. 2.1). Будем считать, что от зеркала отражается R-Я часть падающего излучения (т. е. его коэффициент отражения равен R), а среда как поглощает излучение с коэффициентом ослабления а(x ), так и рассеивает его. Причем коэффициент рассеяния назад равен r (x ). В этом случае закон изменения интенсивности y0(x) излучения, распространяющегося вправо, и интенсивности y1(x) излучения влево определяется системой двух ОДУ первого порядка: dy 0 (x) a(x) y 0 (x) r(x) y1 (x); dx dy1 (x) a(x) y1 (x) r(x) y 0 (x). dx 30 (2.1) Для правильной постановки задачи требуется, помимо уравнений, задать такое же количество граничных условий. Одно из них будет выражать известную интенсивность излучения I0, падающего с левой границы x = 0, а второе – закон отражения на его правой границе x = 1: y 0 (0) I0; (2.2) y1 (1) R y 0 (1). reflected beam mirror direct beam light source 0 1 x Рис. 2.1. Модель краевой задачи Полученную задачу называют краевой (boundary value problem), поскольку условия поставлены не на одной, а на обеих границах интервала (0, 1). И, в связи с этим, их нельзя решить методами, описанными в предыдущей главе и предназначенными для задач с начальными условиями. Далее для показа возможностей Mathcad будем использовать этот пример с R = 1 и конкретным видом а(x) = const = 1 и r(x) = const = 0.1, описывающим случай (не зависящего от координаты x) рассеяния. Примечание 1 Модель, представленная на рис. 2.1, привела к краевой задаче для системы линейных ОДУ. Она имеет аналитическое решение в виде комбинации экспонент. Более сложные, нелинейные, задачи возможно решить только численно. Нетрудно сообразить, что модель станет нелинейной, если сделать коэффициенты ослабления и рассеяния зависящими от интенсивности излучения. Физически это будет соответствовать изменению оптических свойств среды под действием мощного излучения. Примечание 2 Модель встречных световых пучков привела к системе уравнений (2.1), в которые входят производные только по одной переменной x. Если рассматривать более сложные эффекты рассеяния в стороны (а не только вперед и назад), то в уравнениях появились бы частные производные по другим пространственным переменным у и z. В этом случае получилась бы краевая задача для уравнений в частных производных, решение которой во много раз сложнее решения ОДУ. 31 2.2. Решение краевых задач средствами Mathcad Для решения краевых задач в Mathcad реализован наиболее популярный алгоритм, называемый методом стрельбы или пристрелки (shooting method). Он, по сути, сводит решение краевой задачи к решению серии задач Коши с различными начальными условиями. Рассмотрим сначала основной принцип алгоритма стрельбы на примере модели световых пучков (см. рис. 10.1), а встроенные функции, реализующие этот алгоритм, приведем в следующем разделе. 2.2.1. Алгоритм стрельбы Суть метода стрельбы заключается в пробном задании недостающих граничных условий на левой границе интервала, и решении затем полученной задачи Коши хорошо известными методами. В нашем примере не хватает начального условия для y 1 (0), поэтому сначала зададим его произвольное значение, например, у1(0) = 10. Конечно, такой выбор не совсем случаен, поскольку из физических соображений ясно, что, во-первых, интенсивность излучения – величина заведомо положительная, и, во-вторых, отраженное излучение должно быть намного меньше падающего. Решение задачи Коши с помощью функции rkfixed приведено в листинге 2.1, причем в его последней строке выведены расчетные значения у0 и y1 в правой крайней точке интервала х = 1. Разумеется, они не совпадают, т. е. правое краевое условие не выполнено, из чего следует, что полученный результат не является решением поставленной краевой задачи. Листинг 2.1. Решение пробной задачи Коши для модели (2.1) r ( x ) : 0.1 R : 1 a ( x ) : 1 a ( x ) y 0 r ( x ) y1 D( x , y) : a ( x ) y r ( x ) y 1 0 I0 : 100 I0 y : 10 M : 10 S : rkfixed( y,0,1, M, D) SM ,1 37.558 SM , 2 15.372 График полученных решений показан на рис. 2.2 (сверху). Из него также видно, что взятое наугад второе начальное условие не обеспечило выполнение граничного условия при х = 1. В целях лучшего выполнения 32 этого граничного условия следует взять большее значение y1(0), например, y1(0) = 15 и вновь решить задачу Коши. Рис. 2.2. Иллюстрация метода стрельбы (продолжение листинга 2.1) Соответствующий результат показан на том же рис. 2.2 (в центре). Граничное условие выполняется с лучшей точностью, но опять-таки точность оказалась недостаточной. Для еще одного значения y1(0) = 20 получается решение, показанное на рис. 2.2 (снизу). Из сравнения двух правых графиков легко заключить, что недостающее начальное значение y1(0) больше 15, но 33 меньше 20. Продолжая подобным образом «пристрелку» недостающему начальному условию, возможно отыскать правильное решение краевой задачи с достаточной точностью. В этом и состоит принцип алгоритма стрельбы. Выбирая пробные начальные условия (проводя «пристрелку») и решая соответствующую серию задач Коши, можно найти то решение системы ОДУ, которое (с заданной точностью) удовлетворит граничному условию (или, в общем случае, условиям) на другой границе расчетного интервала. Конечно, описанный алгоритм несложно запрограммировать самому, оформив его как решение системы заданных алгоритмически уравнений, выражающих граничные условия на второй границе, относительно неизвестных пристрелочных начальных условий. Но делать этого нет необходимости, поскольку он оформлен в Mathcad в виде встроенных функций. 2.2.2. Двухточечные краевые задачи Решение краевых задач для систем ОДУ методом стрельбы в Mathcad достигается применением двух встроенных функций. Первая предназначена для двухточечных задач с краевыми условиями, заданными на концах интервала: sbval(z,x0,xl,D,load,score) – поиск вектора недостающих L начальных условий для двухточечной краевой задачи для системы N ОДУ: z – вектор размера L 1 , присваивающий недостающим начальным условиям (на левой границе интервала) начальные значения; x0 – левая граница расчетного интервала; х1 – правая граница расчетного интервала; load (x0,z) – векторная функция размера N 1 левых граничных условий, причем недостающие начальные условия поименовываются соответствующими компонентами векторного аргумента z; score(x1,у) – векторная функция размера L 1 , выражающая L правых граничных условий для векторной функции у в точке x1; D(х,у) – векторная функция, описывающая систему N ОДУ, размера N 1 и двух аргументов – скалярного х и векторного у. При этом у – это неизвестная векторная функция аргумента х того же размера N 1 . Замечание. Решение краевых задач в Mathcad, в отличие от большинства остальных операций, реализовано не совсем очевидным образом. В частности, помните, что число элементов векторов D и load равно количеству уравнений N, а векторов z, score и результата действия функции sbval – количеству правых граничных условий L. Соответственно, левых граничных условий в задаче должно быть (N-L) . 34 Как видно, функция sbval предназначена не для поиска собственно решения, т. е. неизвестных функций yi(x), а для определения недостающих начальных условий в первой точке интервала, т. е. yi(x0). Чтобы вычислить yi(x) на всем интервале, требуется дополнительно решить задачу Коши. Разберем особенности использования функции sbval на конкретном примере (листинг 2.2), описанном выше (см. разд. 2.1.1). Краевая задача состоит из системы двух уравнений (N = 2), одного левого (L = 1) и одного правого (N – L = 2 – 1 = 1) граничного условия. Первые три строки листинга задают необходимые параметры задачи и саму систему ОДУ. В четвертой строке определяется вектор z. Поскольку правое граничное условие всего одно, то недостающее начальное условие тоже одно, соответственно, и вектор z имеет только один элемент z0. Ему необходимо присвоить начальное значение (мы приняли z0 = 10, как в листинге 2.1), чтобы запустить алгоритм стрельбы (см. разд. 2.1.2). Листинг 2.2. Решение краевой задачи r ( x ) : 0.1 a ( x ) : 1 R : 1 I0 : 100 a ( x ) y 0 r ( x ) y1 D( x , y) : a ( x ) y1 r ( x ) y 0 z 0 : 10 100 load( x 0, z) : z0 score( x1, y) : R y 0 y1 I1 : sbval(z,0,1, D, load, score) I1 (18.555) I0 S : rkfixed ,0,1,10, D I10 Примечание Начальное значение фактически является параметром численного метода и поэтому может решающим образом повлиять на решение краевой задачи. В следующей строке листинга векторной функции load(x,z) присваиваются левые граничные условия. Эта функция аналогична векторной переменной, определяющей начальные условия для встроенных функций, решающих задачи Коши. Отличие заключается в записи недостающих условий. Вместо конкретных чисел на соответствующих 35 местах пишутся имена искомых элементов вектора z. В нашем случае вместо второго начального условия стоит аргумент z0 функции load. Первый аргумент функции load – это точка, в которой ставится левое граничное условие. Ее конкретное значение определяется непосредственно в списке аргументов функции sbval. Следующая строка листинга определяет правое граничное условие, для введения которого используется функция score(х, у). Оно записывается точно так же, как система уравнений в функции D. Аргумент х функции score аналогичен функции load и нужен для тех случаев, когда граничное условие явно зависит от координаты х. Вектор score должен состоять из такого же числа элементов, что и вектор z. Реализованный в функции sbval алгоритм стрельбы ищет недостающие начальные условия таким образом, чтобы решение полученной задачи Коши делало функцию score(х, у) как можно ближе к нулю. Как видно из листинга, результат применения sbval для интервала (0, 1) присваивается векторной переменной I1. Этот вектор похож на вектор z, только в нем содержатся искомые начальные условия вместо приближенных начальных значений, заданных в z. Вектор содержит, как и z, всего один элемент L. С его помощью можно определить решение краевой задачи у(х) (последняя строка листинга). Тем самым функция sbval сводит решение краевых задач к задачам Коши. График решения краевой задачи показан на рис. 2.3. На рис. 2.4 показано решение той же самой краевой задачи, но с другим правым граничным условием, соответствующим R = 0. В этом случае слабый обратный пучок света образуется иcключительно за счет обратного рассеяния излучения от лазера. Конечно, многие из читателей уже обратили внимание, что реальная физическая cреда не может создавать такого большого рассеяния назад. Иными словами, более реальны значения r(х)<<а(х). Рис. 2.3. Решение краевой задачи для R = 1 (продолжение листинга 2.2) 36 Рис. 2.4. Решение краевой задачи для R = 0 (продолжение листинга 2.2 при R = 0) Однако когда коэффициенты в системе ОДУ при разных yi очень сильно (на порядки) различаются, система ОДУ становится жесткой, и функция sbval не может найти решения, выдавая вместо него сообщение об ошибке «Could not find a solution» (Невозможно найти решение). Замечание! Метод стрельбы не годится для решения жестких краевых задач. Поэтому алгоритмы решения жестких ОДУ в Mathcad приходится программировать самому (см. разд. 2.4). 2.2.3. Краевые задачи с условием во внутренней точке Иногда дифференциальные уравнения определяются с граничными условиями не только на концах интервала, но и с дополнительным условием в некоторой промежуточной точке расчетного интервала. Чаще всего такие задачи содержат данные о негладких в некоторой внутренней точке интервала решениях. Для них имеется встроенная функция bvalfit, также реализующая алгоритм стрельбы. bvalfit(zl,z2,x0,xl,xf,D,load1,load2,score) – поиск вектора недостающих граничных условий для краевой задачи с дополнительным условием в промежуточной точке для системы N ОДУ. z1 – вектор, присваивающий недостающим начальным условиям на левой границе интервала начальные значения. z2 – вектор того же размера, присваивающий недостающим начальным условиям на правой границе интервала начальные значения. x0 – левая граница расчетного интервала. xl – правая граница расчетного интервала. xf – точка внутри интервала. D(х,у) – векторная функция, описывающая систему N ОДУ размера 37 N 1 и двух аргументов – скалярного х и векторного у. При этом у – это неизвестная векторная функция аргумента х того же размера N 1 . loadl(x0,z) – векторная функция размера N 1 левых граничных условий, причем недостающие начальные условия поименовываются соответствующими компонентами векторного аргумента z. load2(xl,z) – векторная функция размера N 1 левых граничных условий, причем недостающие начальные условия поименовываются соответствующими компонентами векторного аргумента z. score(xf,у) – векторная функция размера N 1 , выражающая внутреннее условие для векторной функции у в точке xf. Обычно функция bvalfit применяется для задач, в которых производная решения имеет разрыв во внутренней точке xf. Некоторые из таких задач не удается решить обычным методом пристрелки, поэтому приходится вести пристрелку сразу из обеих граничных точек. В этом случае дополнительное внутреннее условие в точке xf является просто условием сшивки в ней левого и правого решений. Поэтому для данной постановки задачи оно записывается в форме score(xf,у) :=у. Рассмотрим действие функции bvalfit на знакомом примере модели взаимодействия пучков света (см. рис. 2.1), предположив, что в промежутке между xf = 0.5 и x = 1.0 находится другая, оптически более плотная среда с другим коэффициентом ослабления излучения а(х) = 3. Соответствующая краевая задача решена в листинге 2.3, причем разрывный показатель ослабления определяется в его второй строке. Листинг 2.3. Краевая задача с граничным условием в промежуточной точке r ( x ) : 0.1 I0 : 100 R : 1 a ( x ) : 1 if x 0.5 3 otherwise a ( x ) y 0 r ( x ) y1 D( x , y) : a ( x ) y r ( x ) y 1 0 z10 : 20 z 2 0 : 30 z2 load2( x1, z 2) : 0 Rz 2 0 100 load1( x 0, z1) : z10 score( xf , y) : y I1 : bvalfit(z1, z 2,0,1,0.5, D, load1, load2, score) T 5.618 I1 13.801 38 Система, уравнений и левое краевое условие вводится так же, как и в предыдущем листинге для функции sbval. Обратите внимание, что таким же образом записано и правое краевое условие. Для того чтобы ввести условие отражения на правой границе, пришлось определить еще один неизвестный пристрелочный параметр z20. Строка листинга, в которой определена функция score, задает условие стрельбы – сшивку двух решений в точке xf. В самой последней строке листинга выдан ответ – определенные численным методом значения обоих пристрелочных параметров, которые объединены в вектор I1 (мы применили в предпоследней строке операцию транспонирования, чтобы результат получился в форме вектора, а не матрицы-строки). Для корректного построения графика решения лучше составить его из двух частей – решения задачи Коши на интервале (x0,xf) и другой задачи Коши для интервала (xf,x1). Реализация этого способа приведена в листинге 2.4, который является продолжением листинга 2.3. В последней строке листинга 2.4 выведено значение второй искомой функции на правой границе интервала. Всегда полезно проконтролировать, что оно совпадает с соответствующим пристрелочным параметром (выведенным в последней строке листинга 2.3). Листинг 2.4. Решение краевой задачи (продолжение листинга 2.3) M : 10 I0 S0 : rkfixed ,0,0.5, M, D I10 S0 M ,1 ,0.5,1, M, D S1 : rkfixed S0 M , 2 S1M , 2 13.801 Решение краевой задачи приведено на рис. 2.5. С физической точки зрения естественно, что интенсивность света уменьшается быстрее по мере распространения в более плотной среде в правой половине расчетного интервала. В средней точке xf = 0.5, как и ожидалось, производные обоих решений имеют разрыв. Примечание Еще один пример решения краевых задач с разрывными коэффициентами ОДУ приведен в справочной системе Mathcad. Ради справедливости необходимо заметить, что разобранную краевую задачу легко решить и с помощью функции sbval, заменив в листинге 2.2 39 зависимость а(х) на третью строку листинга 2.3. В этом случае листинг 2.2 даст в точности тот же ответ, что показан на рис. 2.5. Однако в определенных случаях (в том числе из соображений быстроты расчетов) удобнее использовать функцию bvalfit, т. е. вести пристрелку с обеих границ интервала. Рис. 2.5. Решение краевой задачи с разрывом в xf = 0.5 (продолжение листингов 2.3–2.4) 2.3. Задачи на собственные значения для ОДУ Задачи на собственные значения – это краевые задачи для системы ОДУ, в которую входят один или несколько параметров λ. Значения этих параметров неизвестны, а решение краевой задачи существует только при определенных λk, которые называются собственными значениями (eigenvalues) задачи. Решения, соответствующие этим λk, называют собственными функциями (eigenfunctions) задачи. Правильная постановка таких задач требует формулировки количества граничных условий, равного сумме числа уравнений и числа собственных значений. Физическими примерами задач на собственные значения являются, например, уравнение колебаний струны, уравнение Шредингера в квантовой механике, уравнения волн в резонаторах и многие другие. С вычислительной точки зрения, задачи на собственные значения очень похожи на рассмотренные выше краевые задачи. В частности, для многих из них также применим метод стрельбы (см. разд. 2.1.2). Отличие заключается в пристрелке не только по недостающим левым граничным условиям, но еще и по искомым собственным значениям. В Mathcad для решения задач на собственные значения используются те же функции sbval и bvalfit. В их первый аргумент, т. е. вектор, присваивающий начальные значения недостающим начальным условиям, следует включить и начальное приближение для собственного значения. Рассмотрим методику решения на конкретном примере определения 40 собственных упругих колебаний струны. Профиль колебаний струны у(х) описывается линейным дифференциальным уравнением второго порядка d dy(x) (2.3) p(x) λ q(x) y(x) 0 , dx dx где р(х) и q(x) – жесткость и плотность, которые, вообще говоря, могут меняться вдоль струны. Если струна закреплена на обоих концах, то граничные условия задаются в виде у(0) = у (1) = 0. Сформулированная задача является частным случаем задачи Штурма-Лиувилля. Поскольку решается система двух ОДУ, содержащая одно собственное значение λ, то по идее задача требует задания трех (2 + 1) условий. Однако, уравнение колебаний струны – линейное и однородное, поэтому в любом случае решение у(х) будет определено с точностью до множителя. Это означает, что производную решения можно задать произвольно, например, y'(0) = 1, что и будет третьим условием. Тогда краевую задачу можно решать как задачу Коши, а пристрелку вести только по одному параметру – собственному значению. Процедура поиска первого собственного значения представлена в листинге 2.5. Листинг 2.5. Решение задачи о собственных колебаниях струны p( x ) : 1 a : 0 0 : 50 q ( x ) : 1 p( x ) : 0 b : 1 y1 1 D( x , y) : (p( x ) y1 y 2 q ( x ) y 0 ) p( x ) 0 0 load(a , ) : 1 0 score(b, y) : y 0 : sbval(, a , b, D, load, score) (39.478) 12 2 9.87 В первых двух строках листинга определяются функции, входящие в задачу, в том числе р'(х) :=0, и границы расчетного интервала (0,1). В третьей строке дается начальное приближение к собственному значению λ0, в четвертой вводится система ОДУ. Обратите внимание, что она состоит не из 41 двух, а из трех уравнений. Первые два из них определяют эквивалентную (2.3) систему ОДУ первого порядка, а третье необходимо для задания собственного значения в виде еще одного компонента у2 искомого вектора у. Поскольку по определению собственное значение постоянно при всех х, то его производная должна быть приравнена нулю, что отражено в последнем уравнении. Важно также, что во втором из уравнений собственное значение записано как у2, поскольку является одним из неизвестных. В следующих двух строках листинга задается левое граничное условие, включающее и недостающее условие на собственное значение для третьего уравнения, и правое граничное условие у0 = 0. В предпоследней строке листинга обычным образом применяется функция sbval, а в последней выводится результат ее работы вместе с известным аналитически собственным значением n2π2. Как легко убедиться, мы нашли первое собственное значение для n = 1, а чтобы найти другие собственные значения, необходимо задать другие начальные приближения к ним (в третьей строке листинга 2.5). Например, выбор λ0 = 50 приводит ко второму собственному значению 22 π2, а λ0 = 100 – к третьему 32 π2. Чтобы построить график соответствующей собственной функции, надо добавить в листинг строку, программирующую решение задачи Коши, например, такую: U: =rkfixed(load(а,Λ),a,b,100,D). Полученные кривые показаны на рис. 2.6 в виде коллажа трех графиков, рассчитанных для трех собственных значений. Примечание Примеры решения нескольких задач на собственные значения можно найти в различных ресурсах Mathcad. Рис. 2.6. Первые три собственные функции задачи колебаний струны (коллаж трех графиков, рассчитанных листингом 2.5 для разных λ0) 42 2.4. Разностные схемы для ОДУ Многие краевые задачи не поддаются решению методом стрельбы. Однако в Mathcad 12 других встроенных алгоритмов нет. Тем не менее, это не означает, что по-другому решать краевые задачи невозможно, ведь другие численные алгоритмы несложно запрограммировать самому пользователю. Рассмотрим возможную реализацию наглядного метода, называемого разностным, которым можно решать краевые задачи, как для ОДУ, так и для дифференциальных уравнений в частных производных. 2.4.1. О разностном методе Разберем идею разностного метода решения краевых задач на примере взаимодействия световых пучков (см. рис. 2.1), переобозначив в системе (2.1) интенсивность излучения вправо на Y, а интенсивность излучения влево на у (просто в целях удобства, чтобы не писать в дальнейшем индекс). Суть метода заключается в покрытии расчетного интервала сеткой из N точек. Тем самым определяются (N–1) шагов (рис. 2.7). Затем надо заменить дифференциальные уравнения исходной краевой задачи аппроксимирующими их уравнениями в конечных разностях, выписав соответствующие разностные уравнения для каждого i-ro шага. В нашем случае достаточно просто заменить первые производные из (2.1) их разностными аналогами (такой метод называется методом Эйлера): Yi1 Yi a(x i ) Yi r(x i ) y i ; Δ y i1 y i a(x i ) y i r(x i ) Yi . Δ y Y i= 0 1 2 0 (2.4) i i+1 N‐1 Δ 1 X Рис. 2.7 Сетка, покрывающая расчетный интервал Примечание Существует множество способов аппроксимации дифференциальных уравнений разностными. От выбора конкретного варианта зависит не только простота, быстрота и удобство вычислений, но и сама возможность получения правильного ответа. Получилась система (по числу шагов) 2(N – 1) разностных линейных алгебраических уравнений с 2N неизвестными Yi и уi. Для того чтобы она имела единственное решение, надо дополнить число уравнений до 2N. 43 Это можно сделать, записав в разностном виде оба граничных условия: Y0 = I0, yN = RYN. (2.5) Сформированная полная система алгебраических уравнений называется разностной схемой, аппроксимирующей исходную краевую задачу. Обратите внимание, что правые части разностных уравнений системы (2.4) на каждом шаге записаны для левой границы шага. Такие разностные схемы называют явными, т. к. все значения Yi+1 и yi+1 находятся в левой части уравнений. Полученную явную разностную схему легко записать в матричной форме Az = B, (2.6) где z – неизвестный вектор, получающийся объединением векторов Y и у. Решив систему (2.6), мы получим решение краевой задачи. Примечание На самом деле все несколько сложнее, поскольку, вообще говоря, необходимо еще доказать, что, во-первых, разностная схема действительно аппроксимирует дифференциальные уравнения и, во-вторых, при N разностное решение действительно сходится к дифференциальному. Процесс решения системы разностных уравнений называют также реализацией разностной схемы. Программа, которая решает рассматриваемую краевую задачу разностным методом, приведена в листинге 2.6. Листинг 2.6. Реализация разностной схемы a ( x ) : 1 N : 5 r ( x ) : 0.01 1 : N 1 i : 1..N 1 A i ,i : a (i ) 1 I0 : 100 R : 1 A i ,i 1 : 1 A i ,i N : r (i ) A i ,i 1 : 1 A i ,i N : r (i ) i : N 1..2 N 1 A i ,i : a (i ) 1 A 0,1 : 1 A N , N2 : 1 A N , N : R i : 1..2 N 1 Bi : 0 B0 : I0 A : submatrix (A,0,2 N 1,1,2 N) U : lsolve(A, B) U N 13.453 U N 1 31.78 44 Дадим минимальные комментарии, надеясь, что заинтересовавшийся читатель с карандашом в руках разберется в порядке индексов и соответствии матричных элементов, а возможно, составит и более удачную программу. В первой строке листинга определяются функции и константы, входящие в модель, во второй задается число точек сетки N = 5 и ее равномерный шаг. Следующие две строки определяют матричные коэффициенты, аппроксимирующие уравнения для Yi, а пятая и шестая – для уi. Седьмая и восьмая строки листинга задают соответственно левое и правое граничное условие, а с девятой по одиннадцатую – правые части системы (2.6). В следующей строке завершается построение матрицы A вырезанием из нее левого нулевого столбца. В предпоследней строке листинга применена встроенная функция lsolve для решения системы (2.6), а в последней выведены рассчитанные ею неизвестные граничные значения. Графики решения приведены на рис. 2.8, причем первые N элементов итогового вектора есть вычисленное излучение вперед, а последние N элементов – излучение назад. Рис. 2.8. Решение краевой задачи разностным методом (продолжение листинга 2.6) Как мы увидели, реализация в Mathcad разностных схем вполне возможна и не слишком трудоемка – предложенная программа состоит всего из двух десятков математических выражений. Конечно, для их написания требуется и время, и часто кропотливые расчеты, но, собственно, в этом и состоит работа математика. Кстати говоря, при небольшом числе шагов расчеты по разностным схемам не требуют существенного времени (программа, приведенная в листинге 2.6, работает быстрее, чем метод 45 стрельбы, встроенный в функцию sbval). Существуют, кроме того, весьма очевидные для многих читателей пути ускорения расчетов, связанные с применением более подходящих методов решения систем линейных уравнений с разреженной матрицей. 2.4.2. Жесткие краевые задачи Один из случаев, когда применение разностных схем может быть очень полезным, связан с решением жестких краевых задач. В частности, рассматриваемая задача о встречных световых пучках становится жесткой при увеличении коэффициента ослабления а(х) в несколько десятков раз. Например, при попытке решить ее при a(x):=100 с помощью листинга 2.2 вместо ответа выдается сообщение об ошибке «Can't converge to a solution. Encountered too many integration steps» (He сходится к решению. Слишком много шагов интегрирования). Это и неудивительно, поскольку жесткие системы характерны тем, что требуют исключительно малого значения шага в стандартных алгоритмах. Для жестких задач неприменимы и явные разностные схемы, о которых рассказывалось в предыдущем разделе (см. разд. 2.3.1). Результат расчетов по программе листинга 2.6, например с а(х):=20 (рис. 2.9), дает характерную для неустойчивых разностных схем «разболтку» – колебания нарастающей амплитуды, не имеющие ничего общего с реальным решением. Рис. 2.9. Неверное решение жесткой краевой задачи по неустойчивой явной разностной схеме 46 Выходом из положения будет использование неявных разностных схем. Применительно к нашей задаче достаточно заменить правые части уравнений значениями не на левой, а на правой границе каждого шага: Yi1 Yi a(x i1 ) Yi1 r(x i1 ) yi1; Δ (2.7) yi1 yi a(x i1 ) yi1 r(x i1 ) Yi1. Δ Граничные условия, конечно, можно оставить в том же виде (2.5). Поскольку мы имеем дело с линейными дифференциальными уравнениями, то и схему (2.7) легко будет записать в виде матричного равенства (2.6), перегруппировывая соответствующим образом выражения (2.7) и приводя подобные слагаемые. Разумеется, полученная матрица A будет иной, нежели матрица A для явной схемы (2.4). Поэтому и решение (реализация неявной схемы) может отличаться от изображенного на рис. 2.9 результата расчетов по явной схеме. Программа, составленная для решения системы (2.7), приведена в листинге 2.7. Листинг 2.7. Реализация неявной разностной схемы для жесткой краевой задачи a ( x ) : 20 N : 20 r ( x ) : 0.01 1 : N 1 i : 1..N 1 A i ,i : 0 1 I0 : 100 A i ,i N 1 : r (i ) R : 1 A i ,i 1 : a (i ) 1 i : N 1..2 N 1 A i ,i : 0 1 A 0,1 : 1 A i ,i 1 : 1 a (i ) A N , N2 : 1 A N , N : R i : 1..2 N 1 Bi : 0 B0 : I0 A : submatrix (A,0,2 N 1,1,2 N ) U : lsolve(A, B) U N 0.025 U N 1 1.165 10 4 47 A i ,i N 1 : r (i ) He будем специально останавливаться на обсуждении листинга 2.7, поскольку он почти в точности повторяет предыдущий листинг. Отличие заключается лишь в формировании матрицы A другим способом, согласно неявной схеме. Решение, показанное на рис. 2.10, демонстрирует, что произошло «небольшое чудо»: «разболтка» исчезла, а распределение интенсивностей стало физически предсказуемым. Рис. 2.10. Решение краевой задачи по неявной разностной схеме (продолжение листинга 2.7) Обратите внимание, что (из-за взятого нами слишком большого коэффициента ослабления излучения) отраженный пучок света имеет очень маленькую интенсивность, и ее пришлось построить на графике с увеличением в тысячу раз. 48 3. Примеры построения аналитических решений дифференциальных уравнений в Mathcad 3.1. «Метод интегрирования» Прежде чем приступить к методам решений дифференциальных уравнений в системе Mathcad, необходимо вспомнить основные понятия и определения, которые даются в курсе математики. При решении различных задач математики, физики, химии и других наук часто используются сложные математические модели в виде уравнений, связывающих независимую переменную, искомую функцию и ее производные. Такие уравнения называются дифференциальными уравнениями (ДУ). Решением дифференциального уравнения называется функция, которая при подстановке в уравнение обращает его в тождество. К примеру, решением уравнения y f ( x ) является функция y F ( x) f ( x)dx c – первообразная для функции f ( x). Если искомая (неизвестная) функция зависит от одной переменной, то ДУ называют обыкновенным (ОДУ). Если искомая функция зависит от нескольких переменных, то будем иметь ДУ в частных производных, но в этом пособии такие уравнения не рассматриваются. Наивысший порядок производной, входящей в дифференциальное уравнение, называют порядком этого у равнения. Например, уравнение y 5 y y 0 – обыкновенное дифференциальное уравнение третьего порядка. Обыкновенным дифференциальным уравнением (ОДУ) первого порядка называется уравнение F ( x , y , y ) 0 , где x – независимая переменная, y( x ) – неизвестная функция. В форме, разрешенной относительно производной, уравнение первого порядка записывается так: y f ( x , y ) . Если пользоваться другим обозначением производной, то можно записать dy f ( x, y). dx Общим решением ДУ первого порядка называется функция y ( x ,c ) , содержащая одну произвольную постоянную и удовлетворяющая условиям: – функция ( x ,c ) является решением ДУ при любом фиксированном значении c ; – каким бы ни было начальное условие y( x0 ) y0 , можно найти такое значение постоянной c c0 , что функция y ( x ; c0 ) будет удовлетворять данному начальному условию. 49 Частным решением ДУ первого порядка называется любая функция y ( x ; c0 ) , полученная из общего решения y ( x ,c ) при конкретном значении постоянной c c0 . С геометрической точки зрения общее решение y ( x ,c ) задает семейство интегральных кривых на плоскости Oxy; частное решение y ( x ; c0 ) определяет одну кривую из этого семейства, проходящую через точку ( x0 , y0 ) . Теперь перейдем к методам решения дифференциальных уравнений в системе Mathcad. В системе Mathcad существует достаточно большой набор функций и операторов для решения как простых, так и сложных дифференциальных уравнений. Однако наряду с этими функциями и операторами можно воспользоваться и простейшими приемами типа интегрирования и решения линейных алгебраических уравнений. Рассмотрим в подтверждение этому несколько простых примеров. Решить дифференциальное уравнение: ex y . y(1 e x ) Здесь и далее будет подразумеваться, что y есть функция от переменной x , т. е. y( x ) – искомая функция. Для начала решим это дифференциальное уравнение «методом интегрирования» (по терминологии [3]). Так как это уравнение с разделяющимися переменными, запишем его в виде dy ex . dx y (1 e x ) Переносим функцию y из знаменателя правой части в числитель левой части и дифференциал dx переносим в правую часть: ydy ex dx. 1 y (1 e x ) Таким образом, здесь имеют место два интеграла, которые необходимо найти: ydy . Первый интеграл: I1 1 ex dx. Второй интеграл: I 2 y (1 e x ) 50 В системе Mathcad это может выглядеть следующим образом: Дифференциальное уравнение : d ex y ( x) dx y (1 e x ) x ex I1( x) : dx x e (1 ) 0 I1( x) ln(e x 1) ln 2 y I 2( y ) : ydy I 2( y ) 0 y2 2 2 ln(e x 1) ln 2 I 2( y ) I1( x) solve, y 2 ln(e x 1) ln 2 y 0( x) : 2 ln(e x 1) ln 2 y 0(0) 0 Рис. 3.1. Решение дифференциального уравнения в системе Mathcad методом интегрирования Как видно из последней строки, которая приведена в примере, график функции y0(x) проходит через начало координат. Убедиться в этом можно, построив график функции: Рис. 3.2. График решения дифференциального уравнения 51 3.2. Задача Коши В большинстве реальных задач, которые сводятся к решению дифференциальных уравнений, существуют так называемые начальные условия. В теории дифференциальных уравнений эта задача называется задачей Коши. Введем для примера из 3.1. начальные условия. ex Решить дифференциальное уравнение y со следующим y( 1 e x ) начальным условием: y( 0 ) 1. Далее разберем метод решения дифференциального уравнения с начальным условием (задачи Коши). Дифференциальное уравнение : y ( 0) 1 Начальное условие : x ex I1( x ) : dx x ( 1 e ) 0 I1( x ) ln(e x 1) ln 2 y I2( y) : ydy d ex y( x ) dx y(1 e x ) I 2( y ) 0 y2 2 y2 ln(e x 1) ln 2 2 C 0.5 I0( x , y) : I2( y) I1( x ) C : I0(0,1) 2 ln(e x 1) 2 ln 2 1 I0( x , y) C solve, y 2 ln(e x 1) 2 ln 2 1 y( x ) : 2 ln(e x 1) 2 ln 2 1 Рис. 3.3. Решение дифференциального уравнения с задачей Коши 52 Данный метод решения дифференциальных уравнений в системе Mathcad называется методом непосредственного интегрирования [3]. Этот метод хорош тем, что пользователь может непосредственно отслеживать любой этап решения уравнения и исправлять возможные ошибки. Однако к его недостаткам относится достаточно большая громоздкость в вычислениях – необходимо вводить много переменных, вычислять большое количество интегралов. Поэтому в системе Mathcad введена функция odesolve(x,b, [число шагов]), которая возвращает решение дифференциального уравнения в блоке Given при заданных начальных условиях и в конце интервала интегрирования b. Эта функция имеет ряд особенностей. Если указан параметр число_шагов, то решение выполняется с фиксированным шагом, иначе – адаптивным методом. Однако одним большим недостатком данной функции является то, что аналитическое значение результирующей функции не выводится, что является неприемлемым для ее дальнейшего использования. Рассмотрим ниже пример решения задачи Коши для дифференциального ex уравнения y , y( 0 ) 1 при помощи функции odesolve. y( 1 e x ) Given d ex y( x ) dx y( x ) (1 e x ) y(0) 1 y : odesolve( x ,10,100) x : 0,0.05..10 Рис. 3.4. Решение дифференциального уравнения при помощи оператора odesolve 53 Несмотря на то, что данная функция не выдает аналитического выражения решения дифференциального уравнения, результатом ее можно пользоваться, как ранее объявленной функцией, т. е. можно находить ее производную, определенный и неопределенный интеграл для нее. Однако во всех случаях аналитическое выражение для функций получить не удается. Далее приведем пример. Given d ex y( x ) dx y( x ) (1 e x ) y ( 0) 1 y : odesolve( x ,10,100) x : 0,0.05..10 d z( x ) : y( x ) dx Рис. 3.5. Пример применения функции Odesolve Обратите внимание, в первом примере для того, чтобы получить символьное выражение функции, необходимо было расписать дифференциальное уравнение с разделяющимися переменными, т. е. выделить все его части как при dx , так и при dy. Во втором примере дифференциальное уравнение было записано так, как оно было дано в задаче, т. е. без какихлибо промежуточных преобразований. Разберем еще один пример решения дифференциального уравнения этого типа – уравнение с разделяющимися переменными. Решить уравнение 2( x 1 )dx 3 y 2 dy 0 ; начальное условие y( 2 ) 1. 54 Традиционным способом его можно решить так. Исходное уравнение – с разделенными переменными, интегрируя его, получим 2( x 1)dx 3 y dy C ; 2 ( x 1) 2 y 3 C . Соотношение ( x 1 )2 y 3 C – общее решение (общий интеграл) уравнения. Для того, чтобы найти частное решение, удовлетворяющее начальному условию, надо подставить в общее решение значения x0 и y0 , и найти значение постоянной С : ( 2 1 )2 13 С С 2 . Получим решение поставленной задачи: ( x 1 )2 y 3 2 . Если явно (в виде y f ( x ) ) выразить функцию, то получим: y 3 2 ( x 1) 2 . Рис. 3.6. Решение дифференциального уравнения методом интегрирования (начало) 55 Рис. 3.6. Решение дифференциального уравнения методом интегрирования (окончание) Обратите внимание на результат, который выдала функция solve. Из трех полученных выражений только одно является верным, так как оба остальных содержат комплексный коэффициент. В данном случае нас это не устраивает, поскольку предполагаем, что решение не должно содержать комплексных величин. Далее рассмотрим решение того же примера, но при помощи функции odesolve. Обратите внимание на то, что при применении функций, которые созданы для решения дифференциальных уравнений численными методами (например, функция odesolve), могут возникнуть ошибки, при которых Mathcad откажется считать значение результирующей функции на том или ином промежутке. Пример этому приведен ниже. Поэтому рекомендуется по мере возможности решать дифференциальные уравнения «методом интегрирования» [3]. 56 Given d 2( x 1) 3y( x ) 2 y( x ) 0 dx y ( 2) 1 y : Odesolve( x ,10,1000) x : 10,10 0.01..10 Рис. 3.7. Решение дифференциального уравнения при помощи оператора odesolve 3.3. Уравнения с разделяющимися переменными В общем случае уравнения с разделяющимися переменными имеют вид: y f ( x ) g( y ) или f1( x ) g1( y )dx f 2 ( x ) g 2 ( y )dy 0 Эти уравнения легко сводятся к уравнению с разделенными переменными: dy f ( x ) g( y ) , – записываем уравнение y f ( x ) g ( y ) в форме dx dy f ( x ) dx ; затем делим на g( y ) и умножаем на dx : g( y ) – уравнение f1( x ) g1( y )dx f 2 ( x ) g 2 ( y )dy 0 делим на f 2 ( x ) g1 ( y ) : f1( x )dx g 2 ( y )dy 0. f2( x ) g1( y ) Получены уравнения с разделенными переменными. Интегрируя, получим f ( x )dx g ( y )dy dy 2 С общие решения: f ( x )dx C и 1 f2( x ) g1( y ) g ( y) В обоих случаях возможна потеря решений: деление на функцию может привести к у равнению, которое неэквивалентно данному: • если функция g( y ) имеет действительные корни y1 , y2 , y3 , , то функции y y1 , y y2 , y y3 , , очевидно, являются решениями исходного уравнения; 57 • если функция f 2 ( x ) имеет действительные корни x1 , x2 , x3 ,, функция g1( y ) имеет действительные корни y1 , y2 , y3 , , то функции x x1 , x x2 , x x3 , , y y1 , y y 2 , y y3 , являются решениями исходного уравнения. Приведем пример. Решить ДУ: y x( y 1 ) . Приводим данное уравнение к уравнению с разделенными переменными: dy dy dy xdx x( y 1 ) y x( y 1 ) xdx y 1 dx y 1 x2 ln y 1 C. 2 При такой форме записи общего интеграла решение y 1 потеряно. Приведем решение к явной форме: x2 x2 C x2 ln y 1 C y 1 e 2 y C1e 2 1. 2 Разберем этот пример в системе Mathcad. y x( y 1) Дифференциальное уравнение : Приводим данное уравнение к виду уравнения с разделенными переменными y x( y 1) dy x( y 1) dx I1( x) : xdx I1( x) I 2( y ) : 1 dy y 1 dy xdx y 1 x2 2 I 2( y ) ln( y 1) I 0( x, y ) : I 2( y ) I1( x) ln( y 1) I 0( x, y ) C solve, y e x2 C 2 x2 2 1 x2 y( x , C) : exp C 1 2 C1 : 0 C2 : 2 C3 : 4 Рис. 3.8. Решение дифференциального уравнения с разделяющимися переменными (начало) 58 Рис. 3.8. Решение дифференциального уравнения с разделяющимися переменными (окончание) Разберем еще один показательный пример решения дифференциальных уравнений с разделяющимися переменными. После того, как будет получен ответ, проверим правильность решения, подставив ответ в исходное уравнение. Дифференциальное уравнение : ( xy 2 x)dx ( yx 2 y )dy y (2) 5 Начальное условие : Приводим данное уравнение к виду уравнения с разделенными переменными xdx ydy 2 2 x 1 y 1 x( y 2 1)dx y ( x 2 1) dy x dx 2 x 1 y dy I 2( y ) : 2 y 1 I1( x) : ln( x 2 1) 2 ln( y 2 1) I 2( y ) 2 I1( x) ln( x 2 1) ln( y 2 1) I 0( x, y ) : I1( x) I 2( y ) 2 2 C : I 0(2,5) Рис. 3.9. Решение дифференциального уравнения с разделяющимися переменными (начало) 59 8 x2 7 I0( x , y) C solve, y 8 x2 7 y( x ) : 8 x 2 7 Рис. 3.9. Решение дифференциального уравнения с разделяющимися переменными (окончание) Внизу производится проверка правильности решения дифференциального уравнения с разделяющимися переменными. После того, как ответ, т. е. функция, была подставлена в исходное дифференциальное уравнение, Mathcad выдал достаточно громоздкий результат. Это не означает, что уравнение решено неверно. В данном случае необходимо применить функцию simplify для упрощения полученного выражения. После ее применения убеждаемся, что ответ найден верно. Рис. 3.10. График решения и его проверка с помощью функции simplify 3.4. Однородные дифференциальные уравнения Перейдем к решению однородных дифференциальных уравнений. Так называются уравнения первого порядка следующего вида: y y f . x 60 Это уравнение сводится к уравнению с разделяющимися переменными y( x ) u( x ) или относительно новой неизвестной функции u( x ) заменой x y( x ) x u( x ) . Подставляя в уравнение y( x ) x u( x ) , y u( x ) x u( x ) , du f ( u ) u (это уравнение с получим u( x ) x u ( x ) f ( u( x )) или x dx y x разделяющимися переменными). Разберем пример. Решить ДУ: y . x y y Это уравнение однородное, вводим новую переменную u . Получаем: x dx dx 1 du 1 , udu , udu , u ux u , x y u u x, y ux , x x u dx u 2 2 u C y ln x , u 2 2ln x C , 2 2ln x C . 2 2 x Общее решение уравнения y 2 x 2 ( 2ln x C ) . В системе Mathcad этот пример может быть решен следующим образом. Решить ДУ : y y x x y y x Получаем : y ux y u u x 1 1 du 1 u u x u u x x u u dx u u2 I1(u ) : udu I1(u ) 2 1 I2( x ) : dx I2( x ) ln(x ) x u2 I0( x , u ) : I1(u ) I2( x ) ln(x ) 2 y2 I0( x , y) : 2 ln(x ) 2x 2 x C ln(x ) I0( x , y) C solve, y 2 x C ln(x ) Вводим новую переменную : u udu dx x y( x, C) : 2 x C ln(x ) C0 : 0 C1 : 3 C2 : 5 Рис. 3.11. Решение однородного дифференциального уравнения (начало) 61 Рис. 3.11. Решение однородного дифференциального уравнения (окончание) Рассмотрим еще один пример. Решить ДУ: ( y 2 2 xy )dx x 2 dy 0 . Здесь коэффициенты при дифференциалах – однородные функции второй степени, т. е. уравнение однородное. Делаем стандартную замену переменной: y ux , dy udx xdu . Подставляем в уравнение: ( u 2 x 2 2 x 2u )dx x 2 ( udx xdu ) 0 . Делим правую часть на x 2 (не забывая о потерянном решении x 0 ). u 2 dx 2udx udx xdu 0 , ( u 2 u )dx xdu 0 , du dx . 2 x u u Интегрируем правую и левую части: du du 1 u 1 du ln u ln u 1 C ln C, u u 2 u( 1 u ) u u 1 u -1 dx x ln x C . Получаем: u ln ln x C , u -1 u eC x C1 x . u 1 y Возвращаемся к исходной переменной: u . x 62 y 2 x C x y C x y C1 x . 1 1 y y x C1 x 1 1 x Это и есть общее решение. Этот же пример может быть решен в системе Mathcad следующим образом. Получаем : (u 2 x 2 2 x 2 u )dx x 2 ( xdu udx ) 0 Делим на x 2 : (u 2 u )dx xdu 0 du dx 2 x uu 1 du I1(u ) ln(u ) ln(u 1) u u2 1 I2( x ) : dx I2( x ) ln(x ) x I0( x , u ) : I1(u ) I2( x ) ln(u ) ln(u 1) ln(x ) I1(u ) : Возвращаемся к исходной переменной : u eC x u 1 u y x y x C x 1 y 1 x y C1x yx C x2 y( x , C) : C x 1 C0 : 1 x4 2 x3 d ( y( x , C0) 2 y( x , C0) x ) x y( x , C0) 2 x 1 dx ( x 1) 2 2 x2 2 x x4 2 x3 x2 2x 2 x x simplify 0 2 2 2 x 1 x 1 x 1 ( x 1 ) ( x 1 ) ( x 1 ) 2 Рис. 3.12. Решение однородного дифференциального уравнения В этом, как и в предыдущем примере, часть вычислений делается «вручную». В данном случае «самая тяжелая работа» по вычислению интегралов достается системе Mathcad. А остальные преобразования можно без труда сделать «вручную». Проверка также показала, что найденное решение удовлетворяет исходному дифференциальному уравнению. 63 3.5. Линейные дифференциальные уравнения с постоянными коэффициентами Рассмотрим теперь линейные дифференциальные уравнения II порядка с постоянными коэффициентами: y py q f ( x ) , где p и q – числа, f ( x ) – функция, зависящая только от x . Если f(x) 0 , то такое уравнение называется однородным. Решение однородного уравнения сводится к решению характеристического уравнения: k 2 pk q 0 . Это обычное квадратное уравнение. Возможны следующие варианты: 1) Уравнение имеет два действительных корня; 2) Уравнение имеет один действительный корень; 3) Уравнение не имеет действительных корней (имеет два комплексных). Рассмотрим каждый из этих случаев отдельно. 1) Характеристическое уравнение имеет два различных действительных корня k1 и k2 В этом случае общее решение однородного дифференциального уравнения записывается следующим образом: y ( x ) C1e k1x C2e k2 x . Заметим, что в общее решение уравнения второго порядка входят две произвольные константы, которые находятся из начальных условий (условий Коши): y( x0 ) y0 , y ( x0 ) y1 . Удовлетворяя этим условиям, получим систему для определения C1 и C 2 : C1e k1x0 C2 e k2 x0 y0 , C1k1e k1x0 C2 k 2 e k2 x0 y1 . Приведем примеры: 1) Найти общее решение уравнения y 5 y 6 y 0. Решение. Запишем характеристическое уравнение: k 2 5k 6 0. 5 25 24 3 . Решаем его: k1,2 2 2 Зная корни характеристического уравнения, записываем общее решение дифференциального уравнения: y ( x ) C1e3 x C2e 2 x . 64 В системе Mathcad это решение может выглядеть следующим образом Найти общее решение уравнения : y 5 y 6 y 0 Составим характеристическое уравнение : 2 5 6 0 Находим корни характеристического уравнения : ORIGIN : 1 2 : 2 5 6 solve 3 1 : 1,1 2 : 2,1 1 2 2 3 y( x , C1, C2) : C1 e 1 x C2 e 2 x y( x , C1, C2) C1 e 2x C2 e 3x Рис. 3.13. Решение однородного дифференциального уравнения 2 порядка После получения решения сделаем проверку, а также построим график функции при определенных значениях константы. Сделаем проверку решения : d y( x , C1, C2) : y( x , C1, C2) dx y( x , C1, C2) 2 C1 e 2x 3 C2 e 3x d2 y( x , C1, C2) : 2 y( x , C1, C2) dx y( x , C1, C2) 4 C1 e 2x 9 C2 e 3x y( x , C1, C2) 5 y( x , C1, C2) 6 y( x , C1, C2) 0 C : 0 C : 0 Рис. 3.14. Решение однородного дифференциального уравнения 2 порядка (начало) 65 Рис. 3.14. Решение однородного дифференциального уравнения 2 порядка (окончание) 2) Найти частное решение уравнения y 3 y 4 y 0, удовлетворяющее начальным условиям: y( 0 ) 0 , y ( 0 ) 5 . Решение: k 2 3k 4 0 , k1,2 3 9 16 1 2 4 y( x ) C1 e x C 2 e 4 x – общее решение y ( x ) C1 e x 4C 2 e 4 x Для нахождения частного решения удовлетворяем начальным условиям: y( 0 ) C1 C2 0, y( 0 ) C1 4C2 5. Решая систему, получаем С1 1 , С2 1 . Тогда частное решение имеет вид: y ( x ) e x e 4 x . 66 Решим эту задачу Коши в системе Mathcad. Найти общее решение уравнения : y 3y 4 y 0 Начальные условия : y(0) 0 y(0) 5 Составим характеристическое уравнение : 2 3 4 0 Находим корни характеристического уравнения : ORIGIN : 1 1 : 2 3 4 solve 4 1 : 1,1 2 : 2,1 1 1 2 4 y( x , C1, C2) : C1 e 1x C2 e 2 x y( x , C1, C2) C2 e 4x C1 e x y( x , C1, C2) : d y( x , C1, C2) dx Given y(0, C1, C2) 0 y(0, C1, C2) 5 1 C : Find (C1, C2) 1 y( x ) : y( x , C1,1 , C 2,1 ) y( x ) e x e 4x Сделаем проверку решения : d y( x ) : y( x ) y( x ) 4 e 4x e x dx d2 y( x ) : 2 y( x ) y( x ) e x 16 e 4x dx y( x ) 3 y( x ) 4 y( x ) 0 Рис. 3.15. Решение однородного дифференциального уравнения 2 порядка (начало) 67 Рис. 3.15. Решение однородного дифференциального уравнения 2 порядка (окончание) 2) Характеристическое уравнение имеет один действительный корень k (кратности 2) В этом случае общее решение записывается следующим образом: y( x ) C1 e kx C 2 k e kx . Частное решение по начальным условиям находится аналогично предыдущему случаю. Пример: Найти частное решение уравнения y 4 y 4 y 0 , удовлетворяющее начальным условиям: y( 0 ) 2 , y ( 0 ) 1. Решение. Записываем характеристическое уравнение k 2 4k 4 0 . Уравнение имеет единственный корень k 2 . Тогда общее решение имеет вид: y( x ) C1e 2 x C 2 xe 2 x , y ( x ) 2C1e 2 x C 2 e 2 x 2C 2 xe 2 x . Находим частное решение, удовлетворяя начальным условиям: С1 2, C1 2 ,C 2 3 . 2C1 C2 1 Частное решение: y( x ) 2e 2 x 3 xe 2 x . 68 В системе Mathcad эту задачу можно решить следующим образом. Найти общее решение уравнения : y 4 y 4 y 0 Начальные условия : y ( 0) 2 y(0) 1 Составим характеристическое уравнение : 2 4 4 0 Находим корни характеристического уравнения : ORIGIN : 1 2 : 2 4 4 solve 2 1 : 1,1 2 : 2,1 1 2 2 2 y( x , C1, C2) : C1 e 1x C2 e 2 x y( x , C1, C2) C1 e 2x C2 x e 2x y( x , C1, C2) : d y( x , C1, C2) dx Given y(0, C1, C2) 2 y(0, C1, C2) 1 2 C : Find(C1, C2) 3 y( x ) : y( x , C1,1 , C 2,1 ) y( x ) 2 e 2x 3 x e 2x Сделаем проверку решения : d y( x ) : y( x ) y( x ) e 2x 6 x e 2x dx d2 y( x ) : 2 y( x ) y( x ) 12 x e 2x 4 e 2x dx y( x ) 4 y( x ) 4 y( x ) 0 Рис. 3.16. Решение однородного дифференциального уравнения 2 порядка с одним действительным корнем (начало) 69 Рис. 3.16. Решение однородного дифференциального уравнения 2 порядка с одним действительным корнем (окончание) После того, как было найдено решение однородного дифференциального уравнения второго порядка, и была решена задача Коши, необходимо сделать проверку данного решения и построить график функции. Обратите внимание, что оба вида обыкновенных дифференциальных уравнений второго порядка были решены методом интегрирования. 3 ) Характеристическое уравнение не имеет действительных корней (имеет два комплексных сопряженных корня i ) Общее решение уравнения в данном случае: y( x ) ex C1 sin x C 2 cos x . Пример: Найти общее решение уравнения: 2 y 2 y y 0 . Решение: Записываем характеристическое уравнение и находим его решения: 2k 2 2k 1 0 , 2 4 8 2 2i 1 1 k1,2 i. 4 4 2 2 Следовательно, общее решение уравнения имеет вид: 1 x x x y( x ) e 2 C1 sin C2 cos . 2 2 Рассмотрим этот пример в системе Mathcad. 70 Найти общее решение уравнения : 2 y 2 y y 0 Составим характеристическое уравнение : 22 2 1 0 Находим корни характеристического уравнения : ORIGIN : 1 1 1 i 2 : 2 2 1 solve 2 2 1 1 i 2 2 1 : 1,1 2 : 2,1 1 0.5 0.5i 2 0.5 0.5i 1 1 : 2 2 x y( x , C1, C2) : e (C1 sin( x ) C2 cos( x )) : y( x , C1, C2) e x x x 2 C2 cos C1 sin 2 2 Сделаем проверку решения : d y( x , C1, C2) : y( x , C1, C2) dx d2 y( x , C1, C2) : 2 y( x , C1, C2) dx 2 y( x , C1, C2) 2 y( x , C1, C2) y( x , C1, C2) simplify 0 Рис. 3.17. Решение однородного дифференциального уравнения 2 порядка, которое не имеет действительных корней 71 4. Аналитические решения некоторых классов дифференциальных уравнений в Mathcad В этом разделе представлены примеры решения в Mathcad дифференциальных уравнений из сборника заданий по высшей математике Кузнецова Л. А.: дифференциальные уравнения с разделяющимися переменными, однородные дифференциальные уравнения первого порядка, дифференциальные уравнения первого порядка, сводящиеся к однородным, линейные дифференциальные уравнения первого порядка, уравнения Бернулли, линейные дифференциальные уравнения с постоянными коэффициентами. Задача 1. Найти общий интеграл дифференциального уравнения. (Ответ представьте в виде ψ ( x, y ) = C ). Вариант 31. 20 xdx − 3 ydy = 3 x 2 ydy − 5 xy 2 dx . Решение. Введем функцию: F(x, y, dx, dy) := 20 ⋅ x ⋅ dx − 3 ⋅ y ⋅ dy − 3 ⋅ x 2 ⋅ y ⋅ dy + 5 ⋅ x ⋅ y 2 ⋅ dx . Приведем подобные слагаемые относительно dx и dy с помощью встроенной функции Collect: F(x, y, dx, dy) collect, dx, dy → (5 ⋅ x ⋅ y 2 + 20 ⋅ x) ⋅ dx + (-3 ⋅ y ⋅ x 2 - 3 ⋅ y) ⋅ dy . Выделим коэффициенты при dx и dy с помощью встроенной функции Coeffs: - 3 ⋅ dy ⋅ y ⋅ x 2 − 3 ⋅ dy ⋅ y , A := F(x, y, dx, dy) coeffs, dx → 2 ⋅ ⋅ + ⋅ 5 x y 20 x 5 ⋅ dx ⋅ x ⋅ y 2 + 20 ⋅ dx ⋅ x . B := F(x, y, dx, dy) coeffs, dy → 2 ⋅ ⋅ − ⋅ 3 y x 3 y Разложим коэффициенты при dx и dy на множители с помощью встроенной функции Factor: M(x, y) := A1 factor → 5 ⋅ x ⋅ (y 2 + 4) , N(x, y) := B1 factor → - 3 ⋅ y ⋅ (x 2 + 1) . Перенесем члены с dx и dy в разные части равенства. Исходное уравнение примет вид: M(x, y)dx = -N(x, y)dy → 5 ⋅ dx ⋅ x ⋅ (y 2 + 4) = 3 ⋅ dy ⋅ y ⋅ (x 2 + 1) . Данное уравнение является уравнением с разделяющимися переменными, поскольку представимо в виде: M1( x )M 2( y)dx = N1( x ) N 2( y)dy . Разложим функции M(x, y) на M1(x) и M2(y) , а N(x, y) на N1(x) и N2(y) : M1(x) := 5 ⋅ x , M2(y) := y 2 + 4 , N1(x) := x 2 + 1, N2(y) := 3 ⋅ y . 72 Разделим переменные: M1(x) N2(y) 5 ⋅ dx ⋅ x 3 ⋅ dy ⋅ y dx = dy → 2 = 2 . N1(x) M2(y) x +1 y +4 Проинтегрируем каждую часть равенства: M1(x) 5 ⋅ ln(x 2 + 1) , I1(x) := ∫ dx → N1(x) 2 N2(y) 3 ⋅ ln(y 2 + 4) . I2(y) := ∫ dy → M2(y) 2 Введем функцию: 5 ⋅ ln(x 2 + 1) 3 ⋅ ln(y 2 + 4) . − I0(x, y) := I1(x) - I2(y) → 2 2 Проверим решение на предмет потери части решений. Для этого решим два уравнения N1(x) = 0 и M2(y) = 0 : i 2i N1(x) solve → , M2(y) solve → . - i - 2i Среди решений данных уравнений нет действительных корней. Значит, потери решений исходного дифференциального уравнения не произошло. Ответ запишем в требуемой форме: 5 ⋅ ln(x 2 + 1) 3 ⋅ ln(y 2 + 4) I0(x, y) = С → − = С. 2 2 Задача 2. Найти общий интеграл дифференциального уравнения. (Ответ представьте в виде ψ ( x, y ) = C ). x 2 + 2 xy − 5 y 2 . 2 x 2 − 6 xy Решение. Данное уравнение является однородным дифференциальным уравнением. Введем функцию: x 2 + 2 ⋅ x ⋅ y(x) − 5 ⋅ y(x)2 . F(x, y, y′) := y′ − 2 ⋅ x 2 − 6 ⋅ x ⋅ y(x) d d y(x) → u(x) + x ⋅ u(x) . Тогда: Сделаем замену: y(x) := u(x) ⋅ x ⇒ y′ := dx dx d 2 ⋅ x 2 ⋅ u(x) − 5 ⋅ x 2 ⋅ u(x) 2 + x 2 F(x, y, y′) = 0 → u(x) + x ⋅ u(x) = 0. dx 2 ⋅ x 2 − 6 ⋅ x 2 ⋅ u(x) Вариант 31. y ′ = 73 d du u(x) = , u(x) = u с помощью функции substitute и dx dx упрощения выражения встроенной функции simplify получаем: d 2 ⋅ x 2 ⋅ u(x) − 5 ⋅ x 2 ⋅ u(x) 2 + x 2 u(x) + x ⋅ u(x) =0 dx 2 ⋅ x 2 − 6 ⋅ x 2 ⋅ u(x) После подстановки: d du dx ⋅ u 2 + 6 ⋅ du ⋅ x ⋅ u + dx − 2 ⋅ du ⋅ x u(x) = , u(x) = u →− = 0. dx dx ( dx 3 dx u ) ⋅ − ⋅ ⋅ 2 simplify substitute, Введем функцию: d 2 ⋅ x 2 ⋅ u(x) − 5 ⋅ x 2 ⋅ u(x) 2 + x 2 G(x, u, dx, du) := F(x, y, y′) → u(x) + x ⋅ u(x) dx 2 ⋅ x 2 − 6 ⋅ x 2 ⋅ u(x) d du u 2 + 1 du ⋅ x substitute, u(x) = , u(x) = u → + . dx dx ⋅ − 6 u 2 dx simplify Умножим данную функцию на dx и пере обозначим: dx ⋅ u 2 + 6 ⋅ du ⋅ x ⋅ u + dx-2 ⋅ du ⋅ x G(x,u,dx,du) := G(x,u,dx,du) ⋅ dx simplify → . 6 ⋅ u-2 Выделим коэффициенты при dx и dy с помощью встроенной функции Coeffs: 6 ⋅ du ⋅ u ⋅ x 2 ⋅ du ⋅ x − 6 u 2 6 u 2 ⋅ ⋅ , A := G(x, u, dx, du) coeffs, dx → 2 1 u + 6⋅u - 2 6⋅u - 2 dx dx ⋅ u 2 + 6 ⋅ u 2 6 ⋅ u 2 . B := G(x, u, dx, du) coeffs, du → 2⋅x 6⋅u ⋅x − 6⋅u - 2 6⋅u - 2 Разложим коэффициенты при dx и du на множители с помощью встроенной функции Factor: u2 +1 M1(u) := A1 factor → , 2 ⋅ (3 ⋅ u − 1) M2(x) := B1 factor → x . Исходное уравнение примет вид: M1(u)dx + M2(x)du = 0 . Данное уравнение является уравнением с разделяющимися переменными. Разделим переменные: 1 1 − dx = du . M2(x) M1(u) 74 Проинтегрируем каждую часть равенства: 1 du → 3 ⋅ ln(u 2 + 1) − 2 ⋅ atan(u) , I1(u) := ∫ M1(u) 1 I2(x) := − ∫ dx → −ln(x) . M2(x) Введем функцию: I0(x, u) := I1(u) − I2(x) → 3 ⋅ ln(u 2 + 1) − 2 ⋅ atan(u) + ln(x) . Сделаем обратную замену: y1 x 2 + y12 y1 substitute, u = − 2 ⋅ atan + ln(x) . I0(x, y1) := I0(x, u) x → 3 ⋅ ln 2 x x simplify Ответ записываем в форме: x 2 + y12 y1 − 2 ⋅ atan + ln(x) = С . G(x, y, C) := I0(x, y) = С → 3 ⋅ ln 2 x x Задача 3. Найти общий интеграл дифференциального уравнения. y+2 . Вариант 31. y′ = 2x + y − 4 Решение. Это дифференциальное уравнение, приводящееся к однородному. Введем функцию: y+2 F(x, y, y′) := y′ − . 2⋅x + y − 4 Сделаем замену: y := u + α , x := v + β . Тогда: du α+u+2 F(x, y, y′) = 0 → − = 0. dv 2β + α + u + 2v − 4 Найдем α и β . Для этого решим систему уравнений с помощью блока Given-Find: Given α + 2 = 0, 2β + α − 4 = 0 α − 2 := Find(α, β) → . β 3 Введем дополнительную функцию: α+u+2 du du − G(u, v, du, dv) := F x, y, → . dv dv 2 ⋅ β + α + u + 2 ⋅ v − 4 Введем новую переменную: u := v ⋅ t , du := dv ⋅ t + v ⋅ dt . Имеем: t 2 + t dt ⋅ v . + G (t , v, dt , dv ) := G (u , v, du , dv) simplify → t+2 dv 75 Умножим данную функцию на dv и переобозначим: 2 ⋅ dv G(t, v, dt, dv) := G(t, v, dt, dv) ⋅ dv simplify → − dv + dv ⋅ t + dt ⋅ v . t+2 Выделим коэффициенты при dt и dv с помощью встроенной функции Coeffs: 2 ⋅ dv − dv + dv ⋅ t A := G(t, v, dt, dv) coeffs, dt → t + 2 , v dt ⋅ v . 2 B := G(t, v, dt, dv) coeffs, dv → − 1 t + t+2 Разложим коэффициенты при dt и dv на множители с помощью встроенной функции Factor: M1(v) := − A1 factor → − v , t ⋅ (t + 1) M2(t) := B1 factor → . t+2 Исходное уравнение примет вид: M1(v)dt = M2(t)dv . Данное уравнение является уравнением с разделяющимися переменными. Разделим переменные: 1 1 dt = dv . M2(t) M1(v) Проинтегрируем каждую часть равенства: 1 I1(v) := ∫ dv → − ln( v) , M1(v) 1 I2(t) := ∫ dt → 2 ⋅ ln(t) - ln(t + 1) . M2(t) Введем функцию: I0(t, v) := I1(v) − I2(t) → ln( t + 1) − 2 ⋅ ln (t) − ln(v) . Сделаем обратную замену: y-α I0(x, y) := I0(t, v) substitute, t = ,v = x −β → x -β . x + y -1 y+ 2 ln − ln( x − 3) − 2 ⋅ ln x -3 x -3 Ответ записываем в форме: x + y -1 y+ 2 G(x, y, C) := I0(x, y) = С → ln − ln( x − 3) − 2 ⋅ ln = С. x -3 x -3 76 Задача 4. Найти решение задачи Коши. y 2 Вариант 31. y′ − = 2 , y( 1 ) = 1 . x x Решение. Это уравнение относится к классу линейных ДУ первого порядка. Введем функцию: y( x ) 2 F( x , y, y′) := y′ − + 2. x x Сделаем замену: y( x ) := u ( x ) ⋅ v( x ) . d d d y′ := y( x ) → u ( x ) ⋅ v( x ) + u ( x ) ⋅ v( x ) . dx dx dx Тогда уравнение примет вид: d d u ( x ) ⋅ v( x ) 2 = 0. F( x , y, y′) = 0 → 2 + u ( x ) ⋅ v( x ) + u ( x ) ⋅ v( x ) − dx dx x x После подстановки и упрощения уравнение принимает вид: substitute, d d u ( x ) ⋅ v( x ) 2 =0 F( x , y, y′) = 0 → 2 + u ( x ) ⋅ v( x ) + u ( x ) ⋅ v( x ) − simplify dx dx x x d du d dv u ( x ) = , u ( x ) = u , v( x ) = , v( x ) = v → dx dx dx dx 2 2 2dx + dv ⋅ u ⋅ x + du ⋅ v ⋅ x − dx ⋅ u ⋅ v ⋅ x = 0. dx ⋅ x 2 Введем вспомогательную функцию: d d u ( x ) ⋅ v( x ) 2 G ( x , u , dx , du ) := F( x , y, y′) → 2 + u ( x ) ⋅ v( x ) + u ( x ) ⋅ v( x ) − dx dx x x d du d dv substitute, u ( x ) = , u ( x ) = u , v( x ) = , v( x ) = v → dx dx dx dx simplify dv ⋅ u + du ⋅ v u ⋅ v ⋅ x − 2 − . dx x2 Упростим и соберем слагаемые с u: simplify dx ⋅ v 2 ⋅ dx → dv − G ( x , u , dx , du ) := G ( x , u , dx , du ) ⋅ dx ⋅ u + 2 + du ⋅ v . collect, u x x Соберем коэффициенты при степенях u в матрицу A: 2 ⋅ dx 2 + du ⋅ v . A := G ( x , u , dx , du ) coeffs, u → x dx ⋅ v dv − x Разложим на множители: factor dx ⋅ v . → dv − M1( v, x , dx , dv) := A1 simplify x 77 Выделим коэффициенты при dx и dv: dv N1( x , v) := M1( v, x , dx , dv) coeffs, dx → v . − x dx ⋅ v − N 2( x , v) := M1( v, x , dx , dv) coeffs, dv → x . 1 Уравнение принимает вид: dx ⋅ v − N1( x , v)1 dx = N 2( x , v)1 dv → = dv . x Разделим переменные: M1( x )M 2( v)dx = N1( x ) N 2( v)dv . 1 M1( x ) := , M 2( v) := v , N1( x ) := 1 , N 2( v) := 1 . x M1( x ) N 2( v) dx dv dx = dv → = . N1( x ) M 2( v) x v Интегрируем: M1( x ) N 2( v) I1( x ) := ∫ dx → ln( x ) , I2( v) := ∫ dv → ln( v) . N1( x ) M 2( v) Введем функцию: I0( x , v) = I1( x ) − I2( v) → ln( x ) − ln( v) . Найдем функцию v(x): v( x ) := I0( x , v) solve, v → x . Введем функцию: du ⋅ v ⋅ x 2 + 2 ⋅ dx . M 2( x , u , v) := A 0 factor → x2 Выделим коэффициенты при du и dx: 2 ⋅ dx G1( x , u ) := M 2( x , u , v( x )) coeffs, du → x 2 . x du ⋅ x G 2( x , u ) := M 2( x , u , v( x )) coeffs, dx → 2 . 2 x После подстановки v(x) уравнение принимает вид: 2 ⋅ dx G1( x , u )1 d = −G 2( x , u )1 dx → du ⋅ x = − 2 . x G11( x )G12(u )du = G 21( x )G 22(u )dx . 2 G11( x ) := x , G12(u ) := 1, G 21( x ) := − 2 , G 22(u ) := 1 . x 78 Разделяем переменные: G 21( x ) G12(u ) 2 ⋅ dx dx = du → − 3 = du . G11( x ) G 22(u ) x Интегрируем и получаем: G12(u ) G 21( x ) 1 I11( x ) := ∫ du → u . dx → 2 , I22(u ) := ∫ G 22(u ) G11( x ) x 1 I00( x , u ) := I11( x ) − I22(u ) → 2 − u . x Находим функцию u(x): 1 u ( x ) := I00( x , u ) + С solve, u → C + 2 . x Тогда решение уравнения имеет вид: y( x , C) := u ( x ) ⋅ v( x ) . 1 y ( x , C) → x ⋅ C + 2 . x Удовлетворим начальному условию и найдем константу C: Given y(1, C) = 1 h := Find(C) → 0 Ответ принимает вид: 1 y( x ) := y( x , C) substitute, C = h → . x Задача 5. Решить задачу Коши. Вариант 31. dx + (2 x + sin( 2 y) − 2 cos 2 ( y))dy = 0, y(−1) = 0 . Решение. Это линейное уравнение первого порядка относительно переменной x. Введем функцию: F( x , y, x ′) := x ′ + 2 x ( y) + sin( 2 y) − 2 cos( y) 2 . Сделаем замену: x ( y) := u ( y) ⋅ v( y) . d d d x ′ := x ( y) → u ( y) ⋅ v( y) + u ( y) ⋅ v( y) . dy dy dy Тогда уравнение примет вид: d d F( x , y, x ′) = 0 → sin( 2 y) − 2 ⋅ cos( y) 2 + 2 ⋅ u ( y) ⋅ v( y) + u ( y) ⋅ v( y) + u ( y) ⋅ v( y) = 0 dy dy ( ) 79 После замены переменных и упрощения получим уравнение: d du d dv substitute, u ( y) = , u ( y) = u , v( y) = , v( y) = v dy dy dy dy F( x , y, x ′) = 0 → simplify ( ) dy ⋅ sin( 2 y) + 2dy sin( y) 2 − 1 + dv ⋅ u + du ⋅ v + 2dy ⋅ u ⋅ v = 0. dy Введем вспомогательную функцию: G ( y, u , dy, du ) := F( x , y, x ′) → sin( 2 y) − 2 ⋅ cos( y) 2 + 2 ⋅ u ( y) ⋅ v( y) + d d v( y) + u ( y) ⋅ v( y) . dy dy d dv d du substitute, u ( y) = , u ( y) = u, v( y) = , v( y) = v dy dy dy dy G ( y, u, dy, du ) := G ( y, u, dy, du ) → simplify dv ⋅ u du ⋅ v + sin( 2 y) − 2 cos( y) 2 + 2uv + . dy dy Упростим и сгруппируем слагаемые по переменной u: simplify → (dv + 2dy ⋅ v ) ⋅ u + 2dy ⋅ sin( y) 2 − G ( y, u , dy, du ) := G ( y, u , dy, du ) ⋅ dy collect, u − 2dy + dy ⋅ sin( 2 y) + du ⋅ v . Соберем коэффициенты при степенях u в матрицу A: 2dy ⋅ sin( y) 2 + 2dy ⋅ cos( y) ⋅ sin( y) − 2dy + du ⋅ v . A := G ( y, u , dy, du ) coeffs, u → + ⋅ dv 2 dy v Разложим на множители: factor → dv + 2dy ⋅ v . M1( v, y, dy, dv) := A1 simplify Выделим коэффициенты при dx и dv: dv N1( y, v) := M1( v, y, dy, dv) coeffs, dy → . 2v 2dy ⋅ v . N 2( y, v) := M1( v, y, dy, dv) coeffs, dv → 1 Уравнение принимает вид: − N1( y, v)1 dy = N 2( y, v)1 dv → −2dy ⋅ v = dv . Разделим переменные: M1( y)M 2( v)dy = N1( y) N 2( v)dv . M1( y) := −2 , M 2( v) := v , N1( y) := 1 , N 2( v) := 1 . M1( y) N 2( v) dv dy = dv → −2dy = . N1( y) M 2( v) v + u ( y) ⋅ 80 Интегрируем: I1( y) := ∫ M1( y) N 2( v) dy → −2 y , I2( v) := ∫ dv → ln( v) . N1( y) M 2( v) Введем функцию: I0( y, v) := I1( y) − I2( v) → −2 y − ln( v) . Найдем функцию v(x): v( y) := I0( y, v) solve, v → e −2 y . Введем функцию: M 2( y, u , v) :=A 0 factor → 2dy ⋅ sin( y) 2 + 2dy ⋅ cos( y) ⋅ sin( y) − 2dy + du ⋅ v . Выделим коэффициенты при du и dx: 2dy ⋅ sin( y) 2 + 2dy ⋅ cos( y) ⋅ sin( y) − 2dy . G1( y, u ) := M 2( y, u , v( y)) coeffs, du → −2 y e du ⋅ e −2 y . G 2( y, u ) := M 2( y, u , v( y)) coeffs, dy → 2 2 ⋅ sin( y) + 2 cos( y) ⋅ sin( y) − 2 После подстановки v(x) уравнение принимает вид: G1( y, u )1 du = −G 2( y, u )1 dy → du ⋅ e − 2 y = −dy ⋅ 2 sin( y) 2 + 2 cos( y) ⋅ sin( y) − 2 . G11( y)G12(u )du = G 21( y)G 22(u )dy . Разделяем переменные: G11( y) := e −2 y , G12(u ) := 1, G 21( y) := 2 sin( y) 2 + 2 cos( y) ⋅ sin( y) − 2 , G 22(u ) := 1 G 21( y) G12(u ) dy = du → dy ⋅ e 2 y ⋅ 2 sin( y) 2 + 2 cos( y) ⋅ sin( y) − 2 = du . G11( y) G 22(u ) Интегрируем и получаем: G12(u ) G 21( y) e 2 y ⋅ (cos(2 y) + 1) du → u . , I22(u ) := ∫ I11( y) := ∫ dy → − G 22(u ) G11( y) 2 ( ( e 2 y ⋅ (cos(2 y) + 1) . I00( y, u ) := I11( y) − I22(u ) → −u − 2 Находим функцию u(x): e 2 y ⋅ (cos(2 y) + 1) . u ( y) := I00( y, u ) + C solve, u → C − 2 Тогда решение уравнения имеет вид: x ( y, C) := u ( y) ⋅ v( y) . e 2 y ⋅ (cos(2 y) + 1) . x ( y, C) → e ⋅ C − 2 Удовлетворим начальному условию и найдем константу C: Given x (0, С) = −1 h := Find(C) → 0 −2 y 81 ) ) Ответ принимает вид: x ( y) := x ( y, C) substitute, C = h → − cos(2 y) 1 − . 2 2 Задача 6. Найти решение задачи Коши. Вариант 31. xy′ + y = xy 2 , y(1) = 1 . Решение. Это уравнение Бернулли. Введем функцию: F( x , y, y′) := x ⋅ y′ + y( x ) − x ⋅ y( x ) 2 . Сделаем замену: y( x ) := u ( x ) ⋅ v( x ) . d d d y′ := y( x ) → u ( x ) ⋅ v( x ) + u ( x ) ⋅ v( x ) . dx dx dx Тогда уравнение примет вид: d d F( x , y, y′) = 0 → x ⋅ u ( x ) ⋅ v( x ) + u ( x ) ⋅ v( x ) + u ( x ) ⋅ v( x ) − x ⋅ u ( x ) 2 ⋅ v( x ) 2 = 0 x dx После подстановки и упрощения уравнение принимает вид: dv d du d u ( x ) = , u ( x ) = u , v ( x ) = , v( x ) = v substitute , F( x , y, y′) = 0 → dx dx dx dx simplify dv ⋅ u ⋅ x du ⋅ v ⋅ x + = 0. u ⋅ v − u 2 ⋅ v2 ⋅ x + dx dx Введем вспомогательную функцию: d d G ( x , u , dx , du ) := F( x , y, y′) → x ⋅ u ( x ) ⋅ v( x ) + u ( x ) ⋅ v( x ) + x dx 2 2 + u ( x ) ⋅ v( x ) − x ⋅ u ( x ) ⋅ v( x ) . d du substitute, u ( x ) = , u ( x ) = u , dx dx G ( x , u , dx , du ) := G ( x , u , dx , du ) d → dv v( x ) = , v( x ) = v dx dx simplify dv ⋅ u ⋅ x + du ⋅ v ⋅ x + u ⋅ v − u 2 ⋅ v2 ⋅ x . dx Упростим и соберем слагаемые с u: simplify G ( x , u , dx , du ) := G ( x , u , dx , du ) ⋅ dx → collect, u (− dx ⋅ v ⋅ x )⋅ u + (dx ⋅ v + dv ⋅ x ) ⋅ u + du ⋅ v ⋅ x . 2 2 Соберем коэффициенты при степенях u в матрицу A: du ⋅ v ⋅ x A := G ( x , u , dx , du ) coeffs, u → dx ⋅ v + dv ⋅ x . − dx ⋅ v 2 ⋅ x 82 Разложим на множители: factor → dx ⋅ v + dv ⋅ x . simplify Выделим коэффициенты при dx и dv: dv ⋅ x . N1( x , v) := M1( v, x , dx , dv) coeffs, dx → v dx ⋅ v . N 2( x , v) := M1( v, x , dx , dv) coeffs, dv → x Уравнение принимает вид: − N1( x , v)1 dx = N 2( x , v)1 dv → −dx ⋅ v = dv ⋅ x . Разделим переменные: M1( x )M 2( v)dx = N1( x ) N 2( v)dv . M1( x ) := −1 , M 2( v) := v , N1( x ) := x , N 2( v) := 1 . M1( x ) N 2( v) dx dv dx = dv → − = . N1( x ) M 2( v) x v Интегрируем: M1( x ) N 2( v) I1( x ) := ∫ dx → − ln( x ) , I2( v) := ∫ dv → ln( v) . N1( x ) M 2( v) Введем функцию: I0( x , v) := I1( x ) − I2( v) → − ln( v) − ln( x ) . Найдем функцию v(x): 1 v( x ) := I0( x , v) solve, v → . x Введем функцию: M 2( x , u , v) := A 0 + A 2 ⋅ u 2 factor → v ⋅ x ⋅ du − dx ⋅ u 2 ⋅ v . Выделим коэффициенты при du и dx: dx ⋅ u 2 G1( x , u ) := M 2( x , u , v( x )) coeffs, du → − x . 1 M1( v, x , dx , dv) := A1 ( du G 2( x , u ) := M 2( x , u , v( x )) coeffs, dx → u 2 . − x После подстановки v(x) уравнение принимает вид: dx ⋅ u 2 . G1( x , u )1 du = −G 2( x , u )1 dx → du = x G11( x )G12(u )du = G 21( x )G 22(u )dx . 1 G11( x ) := 1 , G12(u ) := 1, G 21( x ) := , G 22(u ) := u 2 . x 83 ) Разделяем переменные: G12(u ) dx du G 21( x ) dx = du → = . G11( x ) G 22(u ) x u2 Интегрируем и получаем: 1 I00( x , u ) := I11( x ) − I22(u ) → ln( x ) + . u Находим функцию u(x): 1 u ( x ) := I00( x , u ) + C solve, u → − . C + ln( x ) Тогда решение уравнения имеет вид: y( x , C) := u ( x ) ⋅ v( x ) . 1 y ( x , C) → − . x ⋅ (C + ln( x ) ) Удовлетворим начальному условию и найдем константу C: Given y(1, С) = 1 h := Find(C) → −1 Ответ принимает вид: 1 y( x ) := y( x , C) substitute, C = h → − . x ⋅ (ln( x ) − 1) Задача 7. Найти общее решение дифференциального уравнения. xdx + ydy + ( xdy − ydx) = 0. Вариант 31. (x 2 + y 2 ) Решение. Это уравнение в полных дифференциалах. Введем функцию: xdx + ydy + ( xdy − ydx) F( x , y, dx , dy) := . x 2 + y2 Сгруппируем слагаемые с dx и dy с помощью встроенной функции: x+y x−y dy . + dx F( x , y, dx , dy) collect, dx , dy → 2 x 2 + y2 x + y2 x+y x−y dy . dx + 2 G ( x , y, dx , dy) := F( x , y, dx , dy) collect, dx , dy → 2 2 x + y2 x +y Выделим коэффициенты при dx и dy: dy ⋅ y dy ⋅ x + 2 x + y2 x 2 + y2 A := F( x , y, dx , dy) coeffs, dx → . y x x 2 + y2 − x 2 + y2 84 dx ⋅ y dx ⋅ x − 2 x + y2 x 2 + y2 B := F( x , y, dx , dy) coeffs, dy → . y x x 2 + y2 + x 2 + y2 Проверим условия Коши-Римана: x 2 + 2 ⋅ x ⋅ y − y2 ∂ . C( x , y) := A1 simplify → − ∂y (x 2 + y 2 ) 2 x 2 + 2 ⋅ x ⋅ y − y2 ∂ . D( x , y) := B1 simplify → − ∂x (x 2 + y 2 ) 2 I1( x , y) := if (C( x , y) = D( x , y), A1 ,0) . Интегрируем по x коэффициент при dx и произвольную константу берем в виде функции ϕ( y) : x ln( x 2 + y 2 ) . I( x , y, ϕ) := ∫ I1( x , y)dx + ϕ( y) → ϕ( y) − a tan + y 2 Дифференцируем по y: d d x+y L( x , y) := I( x , y, ϕ) simplify → ϕ( y) + 2 . dy dy x + y2 d M := L( x , y) − B1 simplify → ϕ( y) . dy Находим функцию ϕ( y) : d M = 0 → ϕ( y) = 0 . dy H := ∫ Mdy − c → ϕ( y) − c . k := H substitute, ϕ( y) = t →c. solve, t ϕ( y) := k → c . Переобозначаем константы: Тогда общий интеграл имеет вид: C := c1 + c . ( ) x ln x 2 + y 2 J := I( x , y, ϕ) = C → c − a tan + = c + c1 . 2 y Находим константу с1: x ln x 2 + y 2 JJ := J solve, c1 → − a tan . 2 y Ответ записываем в виде: x ln x 2 + y 2 JJ = c → − a tan = c . 2 y ( ( ) ) 85 Задача 8. Найти общее решение дифференциального уравнения. Вариант 31. y′′′ − 5 y′′ + 6 y′ = 6 x 2 + 2 x − 5 . Решение. Это неоднородное уравнение третьего порядка с постоянными коэффициентами. Введем функции: F( y, y′, y′′, y′′′, y′′′′) := y′′′ − 5 y′′ + 6 y′ , f ( x ) := 6 x 2 + 2 x − 5 . Правая часть уравнения относится к виду: Pn ( x ) ⋅ e r⋅x . В нашем случае: r := 0 . Уравнение имеет вид: F( y, y′, y′′, y′′′, y′′′′) = f ( x ) → 6 y′ − 5y′′ + y′′′ = 6 x 2 + 2 x − 5 . Составим характеристическое уравнение: F(λ 0,λ, λ 2,λ 3 , λ4 ) = 0 → λ3 − 5λ2 + 6λ = 0 . Решение найдем с помощью встроенной функции Solve: 0 λ := F(λ 0,λ, λ 2,λ 3 , λ4 ) = 0 solve → 2 . 3 C помощью следующих циклов подсчитаем количество корней характеристического уравнения (переменная m) и количество совпадений среди корней с r в правой части уравнения (переменная k): m := h ← 0 a ←0 while a ≠ 1 a ← 1 on error λ h h ← h +1 h −1 m→3 k := k ← 0 for i ∈ 0..m − 1 k ← k + 1 if λ i = r k k →1 86 Подсчитаем кратность каждого корня (матрица K): K := l ← 0 while i ≤ m − 1 k1 ← k1 ← 0 for j ∈ 0..m − 1 k1 ← k1 + 1 if k1 λ j = λi K1 ← k1 A1 ← λ k1−1 l ← l +1 i ← i + k1 K 1 K → 1 1 Корни характеристического уравнения запишем в виде матрицы A: A := l ← 0 while i ≤ m − 1 k1 ← k1 ← 0 for j ∈ 0..m − 1 k1 ← k1 + 1 if λ j = λ i k1 A1 ← λ i l ← l +1 i ← i + k1 A 0 A → 2 3 87 Введем вспомогательную переменную h: h := h ← 0 a←0 while a ≠ 1 a ← 1 on error K h h ← h +1 h −1 h →3 Введем функцию I(x,c) – составляющие решения однородного уравнения в виде матрицы: I( x , c) := p ← 0 for i ∈1..h s←s←0 for j ∈ 0..K i −1 − 1 s ← s + c j+ p +1 ⋅ x je A i −1 ⋅x s I i −1 ← s p ← p + j +1 I c1 I( x , c) → e 2⋅x ⋅ c 2 e 3⋅x ⋅ c 3 Запишем решение однородного уравнения в виде функции y1(x,c): y1( x , c) := s ← 0 for i ∈1..h s ← s + I( x , c) i−1 s y1( x , c) → e 2⋅x ⋅ c 2 + e 3⋅x ⋅ c 3 + c1 Выделим коэффициенты многочлена из правой части в матрицу R: − 5 R := f(x) coeffs, x → 2 6 88 Введем вспомогательную переменную t: t := h ← 0 a←0 while a ≠ 1 a ← 1 on error R h h ← h +1 h −1 t →3 Частное решение неоднородного уравнения будем искать в виде функции Q(x,b): Q( x , b) := a ← 0 for i ∈ 0..t − 1 a ← a + bi ⋅ x i a ⋅ xk ( ) Q( x , b) → x ⋅ b 2 ⋅ x 2 + b1 ⋅ x + b 0 y( x , b) := Q( x , b) Подставим функцию Q(x,b) в уравнение и соберем коэффициенты при x в функцию z: d4 d3 d d2 F(x, b) := F y(x, b), y(x, b), 2 y(x, b), 3 y(x, b), 4 y(x, b) − f ( x ) dx dx dx dx F( x , b) collect, x → (18 ⋅ b 2 − 6 ) ⋅ x 2 + (12 ⋅ b1 − 30 ⋅ b 2 − 2 ) ⋅ x + + 6 ⋅ b 0 − 10 ⋅ b1 + 6 ⋅ b 2 + 5 6 ⋅ b 0 − 10 ⋅ b1 + 6 ⋅ b 2 + 5 z(b) := F( x , b) coeffs, x → 12 ⋅ b1 − 30 ⋅ b 2 − 2 18 ⋅ b 2 − 6 a := for i ∈ 0..t − 1 bi ← 0 b 0 a → 0 0 6 ⋅ c 0 − 10 ⋅c1 +6 ⋅ c 2 + 5 z(c) → 12 ⋅ c1 − 30 ⋅ c 2 − 2 18 ⋅ c 2 − 6 89 Найдем коэффициенты функции Q(x,b): 1 1 Z := z(c) = a solve, c 0 , c1 , c 2 , c 3 , c 4 , c 5 → 1 0 0 0 3 2 b := Z T Тогда частное решение примет вид: Q( x ) := Q( x , b) x2 1 Q( x ) → x ⋅ + x + 2 3 Решение дифференциального уравнения запишем как сумму общего решения однородного уравнения y1(x,c) и частного решения неоднородного уравнения Q(x): y( x , c) := y1( x , c) + Q( x ) x2 1 y( x , c) → e 2⋅x ⋅ c 2 + e 3⋅x ⋅ c 3 + x ⋅ + x + + c1 2 3 Задача 9. Найти общее решение дифференциального уравнения. Вариант 31. y′′′ + y′′ − 6 y′ = (20 x + 14)e 2 x . Решение. Это неоднородное уравнение третьего порядка с постоянными коэффициентами. Введем функции: F( y, y′, y′′, y′′′) := y′′′ + y′′ − 6 y′ , f ( x ) := (20 x + 14) ⋅ e 2 x . Правая часть уравнения относится к виду: Pn ( x ) ⋅ e r⋅x . В нашем случае: r := 2 . Уравнение имеет вид: F( y, y′, y′′, y′′′) = f ( x ) → y′′ − 6 y′ + y′′′ = e 2 x (20 x + 14) . Составим характеристическое уравнение: F(λ 0,λ, λ 2,λ 3 ) = 0 → λ3 + λ2 − 6λ = 0 . Решение найдем с помощью встроенной функции Solve: 0 λ := F(λ 0,λ, λ 2,λ 3 ) = 0 solve → 2 . − 3 90 C помощью следующих циклов подсчитаем количество корней характеристического уравнения (переменная m) и количество совпадений среди корней с r в правой части уравнения (переменная k): m := h ← 0 a ←0 while a ≠ 1 a ← 1 on error λ h h ← h +1 h −1 m→3 k := k ← 0 for i ∈ 0..m − 1 k ← k + 1 if λ i = r k k →1 Подсчитаем кратность каждого корня (матрица K): K := l ← 0 while i ≤ m − 1 k1 ← k1 ← 0 for j ∈ 0..m − 1 k1 ← k1 + 1 if k1 K1 ← k1 A1 ← λ k1−1 l ← l +1 i ← i + k1 K 1 K → 1 1 91 λ j = λi Корни характеристического уравнения запишем в виде матрицы A: A := l ← 0 while i ≤ m − 1 k1 ← k1 ← 0 for j ∈ 0..m − 1 k1 ← k1 + 1 if λ j = λ i k1 A1 ← λ i l ← l +1 i ← i + k1 A 0 A→ 2 − 3 Введем вспомогательную переменную h: h := h ← 0 a←0 while a ≠ 1 a ← 1 on error K h h ← h +1 h −1 h →3 Введем функцию I(x,c) – составляющие решения однородного уравнения в виде матрицы: I( x , c) := p ← 0 for i ∈1..h s←s←0 for j ∈ 0..K i −1 − 1 s ← s + c j+ p +1 ⋅ x je A i −1 ⋅x s I i −1 ← s p ← p + j +1 I c1 I( x , c) → e 2⋅x ⋅ c 2 e −3⋅x ⋅ c 3 92 Запишем решение однородного уравнения в виде функции y1(x,c): y1( x , c) := s ← 0 for i ∈1..h s ← s + I( x , c) i−1 s 2⋅x y1( x , c) → e ⋅ c 2 + e −3⋅x ⋅ c 3 + c1 Выделим коэффициенты многочлена из правой части в матрицу R: 14 ⋅ e 2⋅x R := f(x) coeffs, x → 2⋅x 20 ⋅ e Введем вспомогательную переменную t: t ( x ) := h ← 0 a ←0 while a ≠ 1 a ← 1 on error R ( x ) h h ← h +1 h −1 t(x) → 2 Частное решение неоднородного уравнения будем искать в виде функции Q(x,b): Q( x , b) := a ← 0 for i ∈ 0..t ( x ) − 1 a ← a + bi ⋅ x i a ⋅ x k ⋅ e r ⋅x Q( x , b) → x ⋅ e 2⋅x ⋅ (x ⋅ b1 + b 0 ) y( x , b) := Q( x , b) Подставим функцию Q(x,b) в уравнение и соберем коэффициенты при x в функцию z: d3 d d2 F(x, b) := F y(x, b), y(x, b), 2 y(x, b), 3 y(x, b) − f ( x ) dx dx dx ( ) F( x , b) collect, x → 20 ⋅ e 2⋅x ⋅ b1 − 20 ⋅ e 2⋅x ⋅ x + 10 ⋅ e 2⋅x ⋅ b 0 − 14 ⋅ e 2⋅x + 14 ⋅ e 2⋅x ⋅ b1 10 ⋅ e 2⋅x ⋅ b 0 − 14 ⋅ e 2⋅x + 14 ⋅ e 2⋅x ⋅ b1 z( x , b) := F( x , b) coeffs, x → 2⋅x 2⋅x ⋅ ⋅ − ⋅ 20 e b 20 e 1 93 a ( x ) := for i ∈ 0..t ( x ) − 1 bi ← 0 b 0 a ( x ) → 0 Найдем коэффициенты функции Q(x,b): Z := z( x , b) = a ( x ) solve, b 0 , b1 , b 2 , b 3 , b 4 , b 5 → (0 1 0 0 0 0 ) b := Z T Тогда частное решение примет вид: Q( x ) := Q( x , b) Q( x ) → x 2 ⋅ e 2⋅x Решение дифференциального уравнения запишем как сумму общего решения однородного уравнения y1(x,c) и частного решения неоднородного уравнения Q(x): y( x , c) := y1( x , c) + Q( x ) y( x , c) → e 2⋅x ⋅ c 2 + e −3⋅x ⋅ c 3 + x 2 ⋅ e 2⋅x + c1 Задача 10. Найти общее решение дифференциального уравнения. Вариант 31. y′′ − 4 y′ + 4 y = e 2 x sin 6 x . Решение. Это неоднородное уравнение второго порядка с постоянными коэффициентами. Введем функции: F( y, y′, y′′) := y′′ − 4 y′ + 4 y , f ( x ) := (sin(6 x )) ⋅ e 2 x . Правая часть уравнения относится к виду: (P( x ) sin(βx ) + S( x ) cos(βx )) ⋅ e α⋅x и соответствует r := 2 + 6i . Уравнение имеет вид: F( y, y′, y′′) = f ( x ) → y′′ − 4 y′ + 4 y = e 2 x sin(6 x ) . Составим характеристическое уравнение: F(λ 0,λ, λ 2 ) = 0 → λ2 − 4λ + 4 = 0 . Решение найдем с помощью встроенной функции Solve: 2 λ := F(λ 0,λ, λ 2 ) = 0 solve → . 2 C помощью следующих циклов подсчитаем количество корней характеристического уравнения (переменная m) и количество совпадений среди корней с r в правой части уравнения (переменная k): m := h ← 0 k := k ← 0 a ←0 for i ∈ 0..m − 1 while a ≠ 1 k ← k + 1 if λ i = r a ← 1 on error λ h k h ← h +1 h −1 k→0 m→2 94 Подсчитаем кратность каждого корня (матрица K): K := l ← 0 while i ≤ m − 1 k1 ← k1 ← 0 for j ∈ 0..m − 1 k1 ← k1 + 1 if k1 λ j = λi K1 ← k1 A1 ← λ k1−1 l ← l +1 i ← i + k1 K K → (2 ) Корни характеристического уравнения запишем в виде матрицы A: A := l ← 0 while i ≤ m − 1 k1 ← k1 ← 0 for j ∈ 0..m − 1 k1 ← k1 + 1 if λ j = λ i k1 A1 ← λ i l ← l +1 i ← i + k1 A A → (2 ) Введем вспомогательную переменную h: h ( x ) := h ← 0 a ←0 while a ≠ 1 a ← 1 on error I( x , c) h h ← h +1 h −1 h(x) → 1 95 Введем функцию I(x,c) – составляющие решения однородного уравнения в виде матрицы: I( x, c) := p ←0 u ←0 i←1 while [ ( i ≤ h ) ∧ ( u s ← 0) ] s ←0 for j ∈ 0 .. K i −1 −1 ( ( i−1) ≠ 0) if Im A u ←1 j Re( Ai− 1) ⋅ x s ←s+xe s ←s+c j+ p + 1 ( j+ p + 1⋅ cos ( Im(Ai−1) ⋅ x) + cj+ p + 2⋅ sin( Im(Ai−1) ⋅ x)) ⋅ c j A i − 1⋅ x ⋅x e otherwise s I i −1 ←s p ←p +j +1 i←i+ 1 I ( ) I( x , c) → e 2⋅x ⋅ c1 + x ⋅ e 2⋅x ⋅ c 2 Запишем решение однородного уравнения в виде функции y1(x,c): y1( x , c) := s ← 0 for i ∈1..h ( x ) s ← s + I( x , c) i−1 s y1( x , c) → e 2⋅x ⋅ c1 + x ⋅ e 2⋅x ⋅ c 2 Выделим коэффициенты многочлена из правой части в матрицу R: coeffs, x → sin (6 ⋅ x ) ⋅ e 2⋅x R := f(x) simplify ( Введем вспомогательную переменную t: t ( x ) := h ← 0 a←0 while a ≠ 1 a ← 1 on error R ( x ) h h ← h +1 h −1 t(x) → 1 96 ) Частное решение неоднородного уравнения будем искать в виде функции Q(x,b): Q( x , b) := a ← 0 c←0 for i ∈ 0..t ( x ) − 1 c ← c + bi ⋅ x i j←i for j ∈ 0..t ( x ) − 1 a ← a + b j+1 ⋅ x i (a ⋅ sin ( Im(r ) ⋅ x ) + c ⋅ cos( Im(r ) ⋅ x ))⋅ x k ⋅ e Re(r ) x Q( x , b) → e 2⋅x ⋅ (cos(6 ⋅ x ) ⋅ b 0 + sin(6 ⋅ x ) ⋅ b1 ) y( x , b) := Q( x , b) Подставим функцию Q(x,b) в уравнение и соберем коэффициенты при x в функцию z: d d2 F(x, b) := F y(x, b), y(x, b), 2 y(x, b) − f ( x ) dx dx 2⋅x 2⋅x F( x , b) collect, sin ( Im(r ) x ) → − e − 36 ⋅ e ⋅ b1 ⋅ sin(6 ⋅ x ) − 36 ⋅ cos(6 ⋅ x ) ⋅ e 2⋅x ⋅ b 0 ( z( x , b) := F( x , b) coeffs, sin ( Im(r ) x ) ) − 36 ⋅ cos(6 ⋅ x ) ⋅ e 2⋅x ⋅ b 0 → 2⋅x simplify − ⋅ ⋅ + e ( 36 b 1 ) 1 a ( x ) := for i ∈ 0..t ( x ) bi ← 0 b 0 a ( x ) → 0 Найдем коэффициенты функции Q(x,b): − 36 ⋅ cos(6 ⋅ x ) ⋅ e 2⋅x ⋅ c 0 z( x , c) → 2⋅x ( ) − ⋅ ⋅ + e 36 c 1 1 1 Z := z( x , b) = a ( x ) solve, c 0 , c1 , c 2 , c 3 , c 4 , c 5 → 0 − 0 0 0 0 36 b := Z T 97 Тогда частное решение примет вид: Q( x ) := Q( x , b) sin(6 ⋅ x ) ⋅ e 2⋅x Q( x ) → − 36 Решение дифференциального уравнения запишем как сумму общего решения однородного уравнения y1(x,c) и частного решения неоднородного уравнения Q(x): y( x , c) := y1( x , c) + Q( x ) sin(6 ⋅ x ) ⋅ e 2⋅x + x ⋅ e 2⋅x ⋅ c 2 36 Задача 11. Найти общее решение дифференциального уравнения. Вариант 31. y′′′ − 100 y′ = 10 cos(10 x ) + 20e10 x . Решение. Это неоднородное ДУ с постоянными коэффициентами. Это неоднородное ДУ второго порядка с постоянными коэффициентами. Введем функции: F( y, y′, y′′, y′′′) := y′′′ − 100 y′ , y( x , c) → e 2⋅x ⋅ c1 − f 1( x ) := 100 cos(10 x ) , r1 := 10i , f 2( x ) := 20e10 x , r 2 := 10 . Уравнение имеет вид: F( y, y′, y′′, y′′′) = f 1( x ) + f 2( x ) → y′′′ − 100 y′ = 100 ⋅ cos(10 ⋅ x ) + 20 ⋅ e10⋅x . Составим характеристическое уравнение: F(λ 0,λ, λ 2 , λ3 ) = 0 → λ3 − 100 ⋅ λ = 0 . Решение найдем с помощью встроенной функции Solve: 0 0 2 3 λ := F(λ ,λ, λ , λ ) = 0 solve → 10 . − 10 C помощью следующих циклов подсчитаем количество корней характеристического уравнения (переменная m) и количество совпадений среди корней с r в правой части уравнения (переменная k): m := h ← 0 k := k ← 0 k 2 := k ← 0 a ←0 for i ∈ 0..m − 1 for i ∈ 0..m − 1 while a ≠ 1 k ← k + 1 if λ i = r1 k ← k + 1 if λ i = r 2 a ← 1 on error λ h k k h ← h +1 h −1 k→0 k2 → 1 m→3 98 Подсчитаем кратность каждого корня (матрица K): K := l ← 0 while i ≤ m − 1 k1 ← k1 ← 0 for j ∈ 0..m − 1 k1 ← k1 + 1 if k1 K1 ← k1 A1 ← λ k1−1 l ← l +1 i ← i + k1 K λ j = λi 1 K → 1 1 Корни характеристического уравнения запишем в виде матрицы A: A := l ← 0 while i ≤ m − 1 k1 ← k1 ← 0 for j ∈ 0..m − 1 k1 ← k1 + 1 if λ j = λ i k1 A1 ← λ i l ← l +1 i ← i + k1 A 0 A → 10 − 10 Введем вспомогательную переменную h: h := h ← 0 a←0 while a ≠ 1 a ← 1 on error K h h ← h +1 h −1 h →3 99 Введем функцию I(x,c) – составляющие решения однородного уравнения в виде матрицы: I( x, c) := p ←0 u ←0 i←1 while [ ( i ≤ h ) ∧ ( u s ← 0) ] s ←0 for j ∈ 0 .. K i −1 −1 ( ( i−1) ≠ 0) if Im A u ←1 j Re( Ai− 1) ⋅ x s ←s+xe s ←s+c ( j+ p + 1⋅ cos ( Im(Ai−1) ⋅ x) + cj+ p + 2⋅sin( Im(Ai−1) ⋅ x)) ⋅ c j A i − 1⋅ x ⋅x e j+ p + 1 otherwise s I i −1 ←s p ←p +j +1 i←i+ 1 I c1 I( x , c) → e10⋅x ⋅ c 2 e −10⋅x ⋅ c 3 Введем вспомогательную переменную h(x): h ( x ) := h ← 0 a ←0 while a ≠ 1 a ← 1 on error I( x , c) h h ← h +1 h −1 h(x) → 3 Запишем решение однородного уравнения в виде функции y1(x,c): y1( x , c) := s ← 0 for i ∈1..h ( x ) s ← s + I( x , c) i−1 s y1( x , c) → e10⋅x ⋅ c 2 + e −10⋅x ⋅ c 3 + c1 . 100 Выделим коэффициенты многочлена из правой части в матрицы: coeffs, x → (100 ⋅ cos(10 ⋅ x )) , simplify coeffs, x R1(x) := f2(x) → 20 ⋅ e10⋅x . simplify R(x) := f1(x) ( ) Введем вспомогательные переменные: t1( x ) := h ← 0 t ( x ) := h ← 0 a←0 while a ≠ 1 a ← 1 on error R ( x ) h a←0 while a ≠ 1 a ← 1 on error R1( x ) h h ← h +1 h −1 h ← h +1 h −1 t1( x ) → 1 t(x) → 1 Частное решение неоднородного уравнения будем искать в виде функций: Q( x , b) := a ← 0 c←0 for i ∈ 0..t ( x ) − 1 c ← c + bi ⋅ x i j←i for j ∈ 0..t ( x ) − 1 a ← a + b j+1 ⋅ x i (a ⋅ sin ( Im(r1) ⋅ x ) + c ⋅ cos( Im(r1) ⋅ x ))⋅ x k ⋅ e Re(r1) x Q( x , b) → cos(10 ⋅ x ) ⋅ b 0 + sin(10 ⋅ x ) ⋅ b1 y( x , b) := Q( x , b) Q1( x , b) := a ← 0 for i ∈ 0..t1( x ) − 1 a ← a + bi ⋅ x i a ⋅ x k 2 ⋅ e r 2⋅x Q1( x , b) → x ⋅ e10⋅x ⋅ b 0 y2( x , b) := Q1( x , b) 101 Подставим функции Q(x,b) и Q1(x,b) в уравнение и соберем коэффициенты при x в функции z(x,b) и z1(x,b): d3 d d2 F(x, b) := F y(x, b), y(x, b), 2 y(x, b), 3 y(x, b) − f 1( x ) dx dx dx F( x , b) collect, sin ( Im(r1) x ) → 2000 ⋅ b 0 ⋅ sin(10 ⋅ x ) − − (100 ⋅ cos(10 ⋅ x ) + 2000 ⋅ cos(10 ⋅ x ) ⋅ b1 ) . hh ( x ) := zz ← sin ( Im(r1) x ) if Im(r1) ≠ 0 zz ← x otherwise zz hh ( x ) → sin(10 ⋅ x ) coeffs, hh ( x ) 100 ⋅ (20 ⋅ b1 + 1) ⋅ 2 ⋅ sin(5 ⋅ x ) 2 − 1 . → z( x , b) := F( x , b) simplify 2000 ⋅ b 0 ( ) d3 d d2 F1(x, b) := F y(x, b), y(x, b), 2 y(x, b), 3 y(x, b) − f 2( x ) dx dx dx 10⋅x 10⋅x F1( x , b) collect, x → 200 ⋅ e ⋅ b 0 − 20 ⋅ e . z1( x , b) := F1( x , b) coeffs, x → 200 ⋅ e10⋅x ⋅ b 0 − 20 ⋅ e10⋅x . ( ) k1 ← t ( x ) if Im(r1) ≠ 0 a ( x ) := k1 ← t ( x ) − 1 otherwise for i ∈ 0..k1 a1( x ) := for i ∈ 0..t1( x ) − 1 bi ← 0 b bi ← 0 b 0 a ( x ) → a1( x ) → (0 ) 0 Найдем коэффициенты функции Q(x,b): (2000 ⋅ c1 + 100 ) ⋅ 2 ⋅ sin(5 ⋅ x ) 2 − 1 z( x , c) → ⋅ 2000 c 0 Z ← z( x , c) = a ( x ) solve, c 0 , c1 , c 2 , c 3 , c 4 , c 5 → Z := 1 0 0 0 0 if Im(r1) ≠ 0 0 − 20 Z ← z( x , c) 0 = a ( x ) 0 solve, c 0 , c1 , c 2 , c 3 , c 4 , c 5 → otherwise ( Z Z1 := z1( x , d ) 0 = a1( x ) 0 1 solve, d 0 , d1 , d 2 , d 3 , d 4 , d 5 → 10 1 Z → 0 − 0 0 0 0 . 20 T T b := Z , b1 := Z1 102 ) 0 0 0 0 0 Тогда компоненты частного решения примут вид: Q( x ) := Q( x , b) , Q2( x ) := Q1( x , b1) ; sin(10 ⋅ x ) x ⋅ e10⋅x Q( x ) → − , Q2( x ) → . 20 10 Решение дифференциального уравнения запишем как сумму общего решения однородного уравнения y1(x,c) и частного решения неоднородного уравнения Q(x)+Q2(x): y( x , c) := y1( x , c) + Q( x ) + Q2( x ) ; x ⋅ e10⋅x sin(10 ⋅ x ) 10⋅x y ( x , c) → − + e ⋅ c 2 + e −10⋅x ⋅ c 3 + c1 . 10 20 Задача 12. Найти решение задачи Коши. 1 Вариант 31. y′′ + y = , y(0) = 1 , y′(0) = 0 . cos x Решение. Это неоднородное ДУ второго порядка с постоянными коэффициентами. Введем функции: 1 , r=0, Y:=1, Y′ := 0 . F( y, y′, y′′) := y′′ + y , f ( x ) := cos x Уравнение имеет вид: 1 F( y, y′, y′′) = f ( x ) → y′′ + y = . cos x Составим характеристическое уравнение: F(λ 0,λ, λ 2 ) = 0 → λ2 + 1 = 0 . Решение найдем с помощью встроенной функции Solve: i λ := F(λ 0,λ, λ 2 ) = 0 solve → . − i C помощью следующих циклов подсчитаем количество корней характеристического уравнения (переменная m) и количество совпадений среди корней с r в правой части уравнения (переменная k): m := h ← 0 a ←0 while a ≠ 1 a ← 1 on error λ h h ← h +1 h −1 m→2 k := k ← 0 for i ∈ 0..m − 1 k ← k + 1 if λ i = r k k→0 103 Подсчитаем кратность каждого корня (матрица K): K := l ← 0 while i ≤ m − 1 k1 ← k1 ← 0 for j ∈ 0..m − 1 k1 ← k1 + 1 if λ j = λ i k1 K1 ← k1 A1 ← λ k1−1 l ← l +1 i ← i + k1 K 1 K → 1 Корни характеристического уравнения запишем в виде матрицы A: A := l ← 0 while i ≤ m − 1 k1 ← k1 ← 0 for j ∈ 0..m − 1 k1 ← k1 + 1 if λ j = λ i k1 A1 ← λ i l ← l +1 i ← i + k1 A i A → − i Введем вспомогательную переменную h: h := h ← 0 a←0 while a ≠ 1 a ← 1 on error K h h ← h +1 h −1 h→2 104 Введем функцию I(x,c) – составляющие решения однородного уравнения в виде матрицы: I( x, c) := p ←0 u ←0 i←1 while [ ( i ≤ h ) ∧ ( u s ← 0) ] s ←0 for j ∈ 0 .. K i −1 −1 ( ( i−1) ≠ 0) if Im A u ←1 j Re( Ai− 1) ⋅ x s ←s+xe s ←s+c ( j+ p + 1⋅ cos ( Im(Ai−1) ⋅ x) + cj+ p + 2⋅sin( Im(Ai−1) ⋅ x)) ⋅ c j A i − 1⋅ x ⋅x e j+ p + 1 otherwise s I i −1 ←s p ←p +j +1 i←i+ 1 I I( x , c) → (cos( x ) ⋅ c1 + sin( x ) ⋅ c 2 ) Введем вспомогательную переменную h(x): h ( x ) := h ← 0 a ←0 while a ≠ 1 a ← 1 on error I( x , c) h h ← h +1 h −1 h(x) → 1 Запишем решение однородного уравнения в виде функции y1(x,c): y1( x , c) := s ← 0 for i ∈1..h ( x ) s ← s + I( x , c) i−1 s y1( x , c) → cos( x ) ⋅ c1 + sin( x ) ⋅ c 2 . Выделим коэффициенты при с1 и с 2 : sin( x ) ⋅ c 2 , d1( x , c) := y1( x , с) coeffs, c1 → cos( x ) 105 Переобозначим: cos( x ) ⋅ c1 . d 2( x , c) := y1( x , с) coeffs, c 2 → sin( x ) g1( x ) := d1( x , c) → cos( x ) , g 2( x ) := d 2( x , c) → sin( x ) . Введем вспомогательные функции: A11( x , L1, L2) := L1 ⋅ g1( x ) + L2 ⋅ g 2( x ) → L1 ⋅ cos( x ) + L2 ⋅ sin( x ) , d d A12( x , L1, L 2) := L1 ⋅ g1( x ) + L 2 ⋅ g 2( x ) → L 2 ⋅ cos( x ) − L1 ⋅ sin( x ) . dx dx Составим систему уравнений и найдем ее решение: Given A11( x , L1, L2) = 0 , A12( x , L1, L2) = f ( x ) . − tan( x ) . H( x ) := Find(L1, L 2) simplify → 1 Проинтегрируем: P1( x , c2) := ∫ H( x ) 0 dx + c1 → c1 + ln(cos(x )) , Переобозначим: P 2( x , c2) := ∫ H( x )1 dx + c2 → c2 + x . y 2( x , b) := y1( x , c) , c1 = P1( v, c1) , c 2 = P 2( v, c2) , y( x , с) := y1( x , c) , z := v , y( x , c) → c1 ⋅ cos( x ) + c2 ⋅ sin( x ) . Удовлетворим начальным условиям: Given y ( z, c) = Y , d y(z, c) = Y′. dx c1 1 := Find(c1, c2) → c2 0 0 c := c1 . c2 y1( x , c) := y( x , c) . y( x , c) := y 2( x , c) + y1( x , c) . Ответ запишем в виде: y( x , c) → cos( x ) + cos( x ) ⋅ c1 + sin( x ) ⋅ c 2 . 106 ЗАКЛЮЧЕНИЕ В данном пособии рассмотрены динамические системы, в частности дифференциальные уравнения N-го порядка, системы N дифференциальных уравнений, жесткие системы ОДУ. В пособии также рассмотрено решение краевых задач, в том числе двухточечных краевых задач и краевых задач с условием во внутренней точке, представлены задачи на собственные значения для ОДУ. Приведены сведения о разностных схемах для ОДУ и жестких краевых задачах. Приведены примеры построения аналитических решений дифференциальных уравнений в Mathcad. Рассмотрены «метод интегрирования» (по терминологии из [3]) для уравнений с разделяющимися переменными, задача Коши, однородные дифференциальные уравнения первого порядка, линейные дифференциальные уравнения с постоянными коэффициентами. Приведены также аналитические решения некоторых классов дифференциальных уравнений в Mathcad. Представлены примеры решения в Mathcad дифференциальных уравнений из сборника заданий по высшей математике Кузнецова Л.А.: дифференциальные уравнения с разделяющимися переменными, однородные дифференциальные уравнения первого порядка, дифференциальные уравнения первого порядка, сводящиеся к однородным, линейные дифференциальные уравнения первого порядка, уравнения Бернулли, линейные дифференциальные уравнения с постоянными коэффициентами. 107 БИБЛИОГРАФИЧЕСКИЙ СПИСОК 1. 2. 3. 4. 5. 6. Кузнецов, Л. А. Сборник заданий по высшей математике. Типовые расчеты : учеб. пособие для вузов / Л. А. Кузнецов. – 10-е изд., стер. – Санкт-Петербург : Лань, 2008. – 239 с. Кирьянов, Д. В. Mathcad 14 / Д. В. Кирьянов. – Санкт-Петербург : БХВПетербург, 2007. – 704 с. Денисов-Винский, Н. Д. Mathcad при решении задач по курсу Математика. II курс / Н. Д. Денисов-Винский. – Москва : МИЭЭ, 2009. – 132 с. Эдвардс, Ч. Г. Дифференциальные уравнения и краевые задачи: моделирование и вычисление с помощью Mathematica, Maple и MATLAB / Ч. Г. Эдвардс, Д. Э. Пенни. – Москва : Вильямс, 2008. – 1104 с. Тихонов, А. Н. Дифференциальные уравнения / А. Н. Тихонов, А. Б. Васильева, А. Г. Свешников. – Москва : Наука. Физматлит, 1998. – 232 с. Вельмисов, П. А. Дифференциальные уравнения : учеб. пособие / Вельмисов П. А., Покладова Ю. В., Распутько Т. Б.; Ульян. гос. техн. ун-т. – Ульяновск : УлГТУ, 2013. – 90 с. 108 Оглавление Введение……………………………………………………………………. 3 Раздел 1. Обыкновенные дифференциальные уравнения: динамические системы…………………………………………………... 4 1.1. О постановке задач………………………………………………… 4 1.1.1. Задачи Коши для ОДУ……………………………………….. 4 1.1.2. Фазовый портрет динамической системы…………………... 7 1.2. Дифференциальное уравнение N-го порядка………………….… 9 1.3. Система N дифференциальных уравнений……………………..... 11 1.3.1. Решение одного уравнения (N = 1)…………………………. 14 1.3.2. Решение систем ОДУ в одной заданной точке……………... 16 1.3.3. О численных методах………………………………………… 17 1.4. Жесткие системы ОДУ…………………………………………….. 22 1.5. Новые возможности Mathcad 14………………………………….. 26 1.5.1. Новые алгоритмы решения жестких и нежестких ОДУ…… 26 1.5.2. Решение линейных ОДУ……………………………………... 28 Раздел 2. Обыкновенные дифференциальные уравнения: краевые задачи………………………..……………………………………………... 30 2.1. О постановке задач………………………………….……………... 30 2.2. Решение краевых задач средствами Mathcad……………………. 32 2.2.1. Алгоритм стрельбы…………………………………………… 32 2.2.2. Двухточечные краевые задачи………………………………. 34 2.2.3. Краевые задачи с условием во внутренней точке………….. 37 2.3. Задачи на собственные значения для ОДУ………………..……... 40 2.4. Разностные схемы для ОДУ………………………………………. 43 2.4.1. О разностном методе…………………………………………. 43 2.4.2. Жесткие краевые задачи……………………………………… 46 Раздел 3. Примеры построения аналитических решений дифференциальных уравнений в Mathcad……………………………. 49 3.1. «Метод интегрирования»……......………………………………… 49 3.2. Задача Коши…………………………………………………...…… 52 3.3. Уравнения с разделяющимися переменными……………………. 57 3.4. Однородные дифференциальные уравнения……………………... 60 3.5. Линейные дифференциальные уравнения ……………………….. 64 Раздел 4. Аналитические решения некоторых классов дифференциальных уравнений в Mathcad……………………………. 72 Заключение………………………………………………………………… 107 Библиографический список……………………………………………... 108 109 Учебное электронное издание ВЕЛЬМИСОВ Петр Александрович КИРЕЕВ Сергей Владимирович ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ В MATHCAD Учебное пособие ЭИ № 785. Объем данных 4,39 Мб. Технический редактор Ю. С. Лесняк. ЛР № 020640 от 22.10.97. Печатное издание Подписано в печать 30.11.2016. Формат 60×84/16. Усл. п. л. 6,51. Тираж 100 экз. Заказ № 1001. Ульяновский государственный технический университет 432027, г. Ульяновск, ул. Северный Венец, 32. ИПК «Венец» УлГТУ, 432027, г. Ульяновск, ул. Северный Венец, 32. Тел.: (8422) 778-113 E-mail: [email protected] http://www.venec.ulstu.ru