Как решать уравнения в mathematica

Использование Wolfram Mathematica в решении дифференциальных уравнений

Саратовский национальный исследовательский государственный университет имени Н.Г. Чернышевского

NovaInfo55, с. 5-9
Опубликовано 20 ноября 2016
Раздел: Физико-математические науки
Просмотров за месяц: 49
CC BY-NC

Аннотация

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

Ключевые слова

Текст научной работы

Системы компьютерной математики (Maple, Mathematica, MatLab, Derive и др.) применяются в различных областях науки. Они содержат процедуры для численных и аналитических расчетов, средства программирования, визуализации. В настоящее время пакеты прикладных программ используются не только при решении численных задач, но и при доказательстве теорем. Системы компьютерной математики используются в решении математических проблем в работах Д.С. Воронова, О.П. Гладуновой, Е.С. Корнева, М.В. Куркиной, Е.Д. Родионова, Я.В. Славолюбовой, В.В. Славского, Н.К. Смоленцева, Л.Н. Чибриковой и др.

Система компьютерной математики Wolfram Mathematica является одним из наиболее распространенных программных средств, которое позволяет выполнять численные, символьные вычисления, имеет развитую двумерную и трехмерную графику, а также встроенный язык программирования высокого уровня. Для знакомства с языком программирования Wolfram Language рекомендуется интернет-ресурс Wolfram Language & System «Documentation Center» (http://reference.wolfram.com/language/). Выбирая раздел, можно познакомиться с имеющимися командами для решения задач и с примерами их использования. Примеры использования Mathematica в решении геометрических задач приведены в 5.

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

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

Пример 2. Решим уравнение y’=\frac

Попытаемся решить уравнение с помощью функции DSolve:

В данном случае функция DSolve не может решить нелинейное уравнение. Поэтому запишем уравнение в виде:

и будем интегрировать обе части уравнения:

Следовательно, общее решение уравнения примет вид

-(-2+y^2)\cos y+2y\sin y=x-10\ln (1-x)+13\ln(2-x)+C

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

Построим таблицу решений, заменив С[1] на a, где a изменяется от -2 до 2 с шагом 0,5:

Отобразим два графика одновременно и покажем, что векторы поля направлений являются касательными к решениям дифференциального уравнения:

Система Wolfram Mathematica используется для решения дифференциальных уравнений не только в математике, но и актуальна в других научных областях. Ее можно применять и в механике, в частности, для решения различных постановок задач, где в качестве математических объектов используются дифференциальные уравнения. В работах [6,7] рассмотрены уравнения движения мембран и акустических сред в виде обыкновенных дифференциальных уравнений. Для их решения может быть использована система компьютерной математики Wolfram Mathematica.

Читайте также

Математическая подготовка студентов в вузе в контексте будущей профессиональной деятельности

Использование прикладных программ при изучении математической статистики

Применение систем компьютерной математики при изучении комплексного анализа

Организация самостоятельной работы студентов в условиях информационно-образовательной среды вуза

Системы компьютерной математики в решении дифференциальных уравнений

Список литературы

  1. Букушева А.В. Использование Mathematica для описания геометрии динамических систем // Математика и ее приложения: фундаментальные проблемы науки и техники : сборник трудов всероссийской конференции, Барнаул, 24 — 26 ноября 2015. — Барнаул : Изд-во Алт. ун-та, 2015. С. 248-249.
  2. Букушева А.В. Применение Wolfram Language для выделения специальных классов почти контактных метрических структур // Компьютерные науки и информационные технологии : Материалы Междунар. науч. конф. — Саратов : Издат. центр.»Наука», 2016. С. 105-107.
  3. Букушева А.В. Использование систем компьютерной математики для решения геометрических задач сложного уровня // Информационные технологии в образовании: Материалы VI Всероссийской научно-практической конференции. – Саратов: ООО «Издательский центр «Наука»». 2014. – С. 76-77.
  4. Букушева А.В. Решение учебно-исследовательских задач с использованием систем компьютерной математики // Информационные технологии в образовании: Материалы VII Всеросс. научно-практ. конф. – Саратов: ООО «Издательский центр «Наука»», 2015. С.185-187.
  5. Букушева А.В. Учебно-исследовательские задачи в продуктивном обучении будущих бакалавров-математиков // Образовательные технологии. 2016. №2. С. 16-26.
  6. Вельмисова А.И. Распространение и отражение гармонических волн в плоском акустическом слое с гибкими стенками в случае разрыва упругих свойств на одной из стенок // Математика. Механика: Сб. науч. тр. Саратов: Изд-во Сарат. ун-та, 2010. Вып.12. С. 136-140.
  7. Вельмисова А.И., Вильде М.В., Кириллова И.В. Распространение и отражение гармонических волн в плоском акустическом слое с кусочно-неоднородными гибкими стенками // Известия Саратовского университета. Новая серия. Серия: Математика. Механика. Информатика. 2011. Т.11. №4. С. 68-73.

Цитировать

Зинина, А.И. Использование Wolfram Mathematica в решении дифференциальных уравнений / А.И. Зинина. — Текст : электронный // NovaInfo, 2016. — № 55. — С. 5-9. — URL: https://novainfo.ru/article/8754 (дата обращения: 22.02.2022).

Поделиться

Электронное периодическое издание зарегистрировано в Федеральной службе по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзор), свидетельство о регистрации СМИ — ЭЛ № ФС77-41429 от 23.07.2010 г.

Соучредители СМИ: Долганов А.А., Майоров Е.В.

7. Уравнения и системы уравнений

Уравнения и системы уравнений

Многие математические задачи сводятся к решению в общем случае нелинейных уравнений вида f(x) = 0 или f(x) = expr.

В системе Mathematica они обозначаются как eqns (от слова equations — уравнения). Разумеется, могут решаться и системы, состоящие из ряда таких уравнений.

Для решения уравнений (как одиночных, так и систем) в численном и символьном виде Mathematica имеет функцию Solve:

  • Solve [eqns, vars] — предпринимает попытку решить уравнение или систему уравнений eqns относительно переменных vars;
  • Solve [eqns, vars, elims] — пытается решать уравнения eqns по переменным vars, исключая переменные elims.

Входные параметры этой функции могут быть представлены списками или записаны выражениями через объединительный знак«&&». В eqns в качестве знака равенства используется знак «= =». Примеры применения функции Solve представлены на рис. 4.12.

Рис. 4.12. Примеры решения уравнений

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

Решение систем нелинейных уравнений в символьном виде

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

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

В последнем примере рис. 4.13 получен набор из пяти пар корней, определенных через функцию Root. Эта функция, в свою очередь, означает вычисление корней полиномиального уравнения пятой степени. Данный пример, как и ранее приводимые решения кубического уравнения, является наглядной иллюстрацией того, что простота нелинейных уравнений порой оказывается весьма обманчивой, а их решение порой приводит к весьма громоздким и сложным результатам. Тем не менее, возможность решения отдельных нелинейных уравнений и их систем в символьном виде трудно переоценить. К сожалению, далеко не все уравнения имеют такие решения — многие можно решать только в численном виде.

Рис. 4.13. Примеры решения систем нелинейных уравнений

Не следует полагать, что Mathematica всегда выдает верное решение систем нелинейных уравнений. На самом деле решение иногда бывает ошибочным. Поэтому в большинстве случаев стоит оформлять решение таким образом, чтобы обеспечить его проверку. Для этого рекомендуется отдельно задать систему уравнений и результат решения. Тогда проверка легко осуществляется с помощью подстановки. Два примера решения систем уравнений с проверкой решений показаны на рис. 4.14.

В первом примере решение кажется очевидным (равенства выполняются, например, при х=2 и у=3). Однако здесь Mathematica дает сразу три пары решений, и все они оказываются верны, поскольку после подстановки проверка всех равенств возвращает True.

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

Рис. 4.14. Примеры решения уравнений с проверкой

Опции функции Solve

С функцией Solve можно использовать ряд опций. Их можно вывести командой Options [Solve]. Ниже описано их назначение:

  • InverseFunctions — указывает, следует ли использовать обратные функции;
  • MakeRules — указывает, должен ли результат быть представлен как объект AlgebraicRulesData;
  • Method — устанавливает алгоритм, используемый для вычисления результата (возможны методы 1, 2 и 3);
  • Mode — задает характер решения уравнения (возможны Generic, Modular и Rational);
  • Sort — устанавливает, нужна ли сортировка результатов;
  • Verif ySolutions — устанавливает, следует ли проводить проверку полученных решений и удаление посторонних решений;
  • WorkingPrecision — устанавливает число цифр промежуточных вычислений (по умолчанию Infinity).

На рис. 4.15 приведены примеры применения функции Solve с опцией Inverse-Functions.

Обратите внимание на то, что последняя система уравнений при отсутствии опции InverseFunctions решается с предупреждением. Она вообще не решается, если эта опция задана как False, и гладко решается при InverseFunctions -> True.

Рис. 4.15. Примеры решения уравнений с опцией InverseFunction

То, насколько может влиять на решение опция Method, наглядно показывают примеры, представленные на рис. 4.16.

Рис. 4.16. Примеры решения уравнений разными методами

Множество примеров решения систем нелинейных уравнений в символьном виде можно найти в справочной системе Mathematica.

Численное решение уравнений

Многие нелинейные уравнения и системы нелинейных уравнений в принципе не имеют аналитических решений. Однако их решение вполне возможно численными методами. Для численного решения систем нелинейных уравнений используется функция NSolve:

  • NSolve [eqns, vars] — пытается численно решить одно уравнение или систему уравнений eqns относительно переменных vars;
  • NSolve [eqns, vars, elims] — пытается численно решить уравнения eqns относительно vars, исключая переменные elims.

С этой функцией используется единственная опция WorkingPrecision, задающая число верных цифр результата — по умолчанию 16. На рис. 4.17 представлены примеры использования функции NSolve для численного решения уравнений.

Риc. 4.17. Примеры численного решения уравнений

Результаты решения с помощью функции NSolve также рекомендуется проверять с помощью подстановки, например, так:

Нетрудно заметить, что в данном случае решение верно.

Поиск корней уравнений

Для вычисления корней полиномиальных уравнений используется функция Roots:

На рис. 4.18 представлены примеры применения функции Roots.

Рис. 4.18. Примеры использования функции Roots

Формат выдачи результатов для функции Roots отличается от такового для функции Solve. Поэтому проверку решения подстановкой надо выполнять как в следующем примере:

х == -3.56155 | | х == 0.561553

Для преобразования результата вычислений в список решений (подобный решениям, получаемым с помощью функции Solve) здесь использована функция ToRules.

При затруднениях в решении уравнений с помощью функции Roots можно использовать следующие опции:

True, Eliminate -> False, EquatedTo-> Null,

Modulus -> 0, Multiplicity->1, Quar tics -> True, Using -> True>

Ниже они описаны подробно:

  • Cubics — указывает, следует ли искать явные решения для неприводимых кубических уравнений;
  • EquatedTo — задает выражение для замещения переменной в решении;
  • Modulus — задает промежуточную факторизацию полинома;
  • Multiplicity— устанавливает кратность каждого из корней в конечном результате;
  • Quartics — задает точное решение квадратного уравнения и полинома четвертой степени;
  • Using — указывает какие-либо дополнительные уравнения, которые следует использовать для решения уравнений.

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

Дополнительные функции для решения уравнений

Имеется также ряд дополнительных функций, которые используются описанными ранее функциями и также могут применяться при решении нелинейных уравнений:

  • Auxiliary [v] — применяется модулем Solve для указания того, что переменная v должна использоваться функцией Roots для результирующих решений, но соответствующие значения v не должны быть включены в окончательный ответ;
  • Eliminate [eqns, vars] — исключает переменные vars из системы уравнений eqns;
  • FindRoot [Ihs == rhs, ] — ищет численное решение уравнения Ihs == rhs, начиная с х = x0;
  • MainSolve [eqns] — основная функция для преобразования системы уравнений. Ее вызывают Solve и Eliminate. Уравнения должны быть представлены в форме Ihs == rhs. Они могут объединяться с помощью && и | |. MainSolve возвращает False, если не существует решения уравнений, и возвращает True, если все значения переменных являются решениями. MainSolve перестраивает уравнения, применяя определенные директивы;
  • MainSolve [eqns, vars, elim, rest] — пытается перестраивать уравнения eqns так, чтобы найти решения для переменных vars и исключить переменные elim. Список rest может включаться для указания порядка исключения любых остальных переменных;
  • NRoots [lhs==rhs, var] — возвращает список численных приближений корней полиномиального уравнения;
  • Residue [ехрr, <х, х0 >] — ищет вычет ехрг в точке х = х0;
  • SolveAlways [eqns, vars] — возвращает значения параметров, которые превращают уравнения eqns в тождества для всех значений переменных vars.

Примеры использования некоторых из этих функций показаны на рис. 4.19.

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

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

Графическая иллюстрация и выбор метода решения уравнений

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

На самом деле порой даже простые уравнения могут не иметь решения. В сложных случаях очень полезна графическая визуализация решения. В качестве примера на рис. 4.20 показана визуализация вычисления корней квадратного уравнения. В данном случае график функции явно указывает на существование двух действительных корней при х, близких к 0.2 и 2.3. Функция Nsolve без труда находит оба корня.

Рис. 4.20. Визуализация решения квадратного уравнения для случая двух действительных корней

А вот на рис. 4.21 показан случай, когда из-за изменения последнего члена квадратичной функции ее график уже не пересекает ось х вообще. Это говорит о том, что решения в виде действительных корней нет. И в самом деле, NSolve находит корни как комплексно-сопряженные числа. Действительная часть найденных корней дает координату х для впадины кривой — параболы.

Если требуется решение равенства f1(х) = f 2 (x), то для графической визуализации решения можно построить графики функций f1(х) и f 2 (лг) — наличие точек их пересечения будет означать существование действительных корней. Этот случай иллюстрирует рис. 4.22. В данном случае проблем с решением нет, поскольку, по существу, решается квадратное уравнение.

Рис. 4.21. Визуализация решения квадратного уравнения для случая двух комплексных корней

Рис. 4.22. Пример визуализации решения уравнения вида f(x) = 5х + 1

Но вот на рис. 4.23 показан случай решения уравнения f(x) = ехр(х/2). Графики функций ясно показывают, что парабола пересекается экспонентой в двух точках. Однако функция NSolve отказывается решать такое уравнение и выдает сообщение о том, что оно является трансцендентным.

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

Рис. 4.23. Пример решения уравнения вида f(x) = ехр(х/2)

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

Получение сразу нескольких корней

Многие уравнения с тригонометрическими функциями могут иметь периодические или близкие к ним решения. К сожалению, функции Mathematica, вычисляющие корни уравнений, не способны в этом случае дать сразу несколько корней. Однако ситуация тут далеко не безнадежна — приведенный ниже пример наглядно показывает это.

Пусть требуется в интервале изменения х от 0 до 20 найти все решения уравнения

График функции, представляющей левую часть уравнения, показан на рис. 4.24. Хорошо видно, что он пересекает ось х семь раз, то есть имеет в интересующем нас диапазоне семь корней.

Рис. 4.24. График функции х sin(x) + х/2 — 1 и пример вычисления всех ее корней в интервале изменения х от 0 до 20

Колебательная составляющая функции обусловлена входящей в нее функцией sin(x), которая имеет нули в точках 0, n, 2n, Зn. Однако, как видно из рис. 4.24, эти значения лишь приближенные, ввиду влияния других членов уравнения.

Ключевая идея получения всех корней уравнения заключается в поиске нужных решений с помощью функции FindRoot, которой последовательно подставляются различные начальные приближения. Однако вместо уже испытанного приема — поиска корней поодиночке — можно воспользоваться «таблицей» решений, используя функцию Table. Решение, приведенное под графиком функции на рис. 4.24, наглядно иллюстрирует возможности этого приема — найдены (или, вернее, уточнены) все семь корней исходного уравнения.

Получение неизвестных в явном виде

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

Список переменных в этом выражении должен однозначно соответствовать списку неизвестных системы уравнений. Покажем этот прием в действии. Ниже приведено решение системы из трех нелинейных уравнений:

Обратите внимание на то, что вывод списка <х, у, z >не дает полученных значений неизвестных. Это связано с тем, что переменные в блоке решения имеют ло-к(1лъный характер и за пределами блока их значения (в том числе неопределенные) сохранятся такими, какими они были до применения в блоке решения.

Теперь зададим решение в ином виде:

Как видите, на сей раз решение получено в виде списка с числами — явными значениями неизвестных. Можно обозначить их как а, Ь и с, получить список <а, b, с>и даже использовать их отдельно:

Теперь можно проверить решение данной системы:

Полученный вектор правых частей системы совпадает с заданным, что свидетельствует о правильности решения. Разумеется, вместо нового списка < а , b , с >для вектора решения можно было использовать и вектор < х, у, z >.

WolframAlpha по-русски

Математика с WolframAlpha ® . Объяснения с примерами.

Решение «буквенных» уравнений в Wolfram|Alpha

Задача «выразить х из уравнения (с несколькими неизвестными)» встречается довольно часто. Ее можно рассматривать, как решение уравнения с буквенными коэффициентами. Поэтому логично, что Wolfram|Alpha использует для решения таких «буквенных» уравнений запрос solve, который обычно служит для решения уравнений с одним неизвестным.

Вот простой пример такой задачи.

Запрос solve применительно к этому уравнению дает такой результат:

Здесь Wolfram|Alpha отдает приоритет отысканию переменной y. Возможно, полагая, что y это — функция, а x — ее аргумент? Кстати, тот же самый результат дает и запрос solve 2x+3y-1.

Если же из данного уравнения нужно найти именно х, то это следует указать явно. И вот, каким образом:

При этом, в отличие от первого варианта, здесь Wolfram|Alpha дает возможность посмотреть пошаговое решение задания с подробным текстовым комментарием:

(Эта замечательная особенность Wolfram|Alpha уже обсуждалась в одном из предыдущих постов Математика с Wolfram|Alpha: шаг за шагом. )

Итак, рассмотренный выше пример уже дает представление о том, как легко Wolfram|Alpha справляется с «буквенными» уравнениями. Однако, пойдет ли дело так же гладко, если вместо x и y взять другие буквы?

Запрос solve 2a+3b-1 дает следующее:

Однако, абсолютно аналогичный по структуре запрос solve 2n+3m-1 выводит совсем другой результат:

Конечно же! Логика здесь есть: Wolfram|Alpha по умолчанию считает неизвестным то, что обозначено буквой, расположенной ближе к концу алфавита. Но, если вы не уверены в своем знании английского алфавита, тогда, решая в Wolfram|Alpha буквенное уравнение, лучше каждый раз явно указывать неизвестную величину.

Естественно, теперь возникает вопрос: а что будет, если взять уравнение, которое содержит не два буквенных обозначения, а больше? Например, такое:

Как и следовало ожидать, здесь Wolfram|Alpha по запросу solve (без указания неизвестного) выводит решение квадратного уравнения относительно x:

Если же из данного уравнения нужно найти b, то запрос должен быть таким:

Аналогичным образом следует поступить, если ищем c:

Также ясно, что решение кубического уравнения

А вот, если нас интересует, как выражается из данного уравнения a, то запрос формулируем иначе:

Под конец, хочется задать Wolfram|Alpha вопрос посложнее. Например, сможет ли система решить такое «буквенное» уравнение?

Запрос solve без явного указания неизвестного выводит решение этого уравнения относительно z:

Если же нужно найти, к примеру, w, тогда, естественно, получим:

Что же касается решения трансцендентных «буквенных» уравнений, то все зависит от вида конкретного уравнения. Если уравнение допускает аналитическое решение, тогда это решение получается точно так же, как и ранее. Если же нет, тогда, по-возможности, Wolfram|Alpha выдает неявное решение в графическом виде.

Рассмотрим несколько типичных примеров.

Некоторые решения оказываются довольно неожиданными и по-своему красивыми:


источники:

http://lib.qrz.ru/node/10625

http://www.wolframalpha-ru.com/2011/10/wolframalpha_30.html