Введение в пакет Maxima2
.pdfФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Федеральное государственное образовательное учреждение высшего профессионального образования
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
С.М. Кузьменко
Введение в систему аналитических вычислений Maxima
Часть 2
Ростов-на-Дону
2007
Вычисление производных
Функция, которая используется в Maxima, для вычисления производных и дифференциалов уже упоминалась ранее: это функция diff. Рассмотрим ее под- робнее. Возможны четыре различных варианта вызова этой функции:
diff (expr)
diff (expr, x)
diff (expr, x, n)
diff (expr, x_1, n_1, ..., x_m, n_m)
Первый вариант – diff (expr) – вычисляет полный дифференциал выражения expr. При этом, для записи дифференциалов переменных используется функция
del(x).
Второй вариант – diff (expr, x), которым мы и пользовались ранее, вычисляет первую производную от выражения expr по переменной x.
В третьем варианте – diff (expr, x, n) – вычисляется n-я производная от выра- жения expr по переменной x.
1
И, наконец, четвертый вариант – diff (expr, x_1, n_1, ..., x_m, n_m) – позволяет вычислить смешанные частные производные порядков n_1,…, n_m, по перемен- ным x_1,… x_m, соответственно, от выражения expr.
В невычисляемой форме (с апострофом) функция diff используется при со- ставлении дифференциальных уравнений. Для того чтобы определить старший порядок производной от переменной y по независимой переменной x в выражении expr служит функция derivdegree (expr, y, x).
Для задания цепочки зависимостей функций и переменных друг от друга слу- жит функция depends (f_1, x_1, ..., f_n, x_n). В качестве аргументов функции depends могут передаваться имена переменных, массивы или списки. Все зависи- мости, устанавливаемые при вызовах функции depends накапливаются в систем- ной переменной dependencies, являющейся списком. Для удаления из списка за- висимостей функции f служит команда remove(f, dependency).
2
Следует отметить, что хранящиеся в переменной dependencies зависимости используются только функцией diff. Другие функции, такие как интегрирование или преобразования Лапласа учитывают только зависимости явно заданные в своих аргументах.
Вычисление интегралов
Для вычисления неопределенных и определенных интегралов в Maxima ис- пользуется функция integrate. Так же, как и функция diff, она может быть вызва- на с различными наборами параметров.
Очевидно, что в случае вызова integrate (expr, x), вычисляется неопределен- ный интеграл от выражения expr по переменной x а в случае вызова integrate
3
(expr, x, a, b) – определенный интеграл от выражения expr по переменной x в пре- делах от a до b.
При невозможности вычислить интеграл, он будет либо возвращен в неизмен- ном виде, либо частично упрощен.
Maxima может вычислять и несобственные интегралы, как первого (с беско- нечными пределами), так и второго (от функций с бесконечными разрывами) ро- да.
4
Если несобственный интеграл расходится, мы получим соответствующее со- общение об ошибке.
Единственное ограничение, накладываемое Maxima на пределы интегрирова- ния – они не должны зависеть от переменной, по которой интегрирование ведет- ся.
Для пользователей, считающих, что команду integrate (expr, x, a, b) набирать слишком долго, существует альтернативный способ вызова команды вычисления определенного интеграла: defint (expr, x, a, b). Никаких различий между результа- тами выполнения этих команд не существует.
Чтобы провести замену переменной необходимо воспользоваться функцией changevar (expr, f(x,y),y,x), которая заменяет переменную x на y во всех интегра- лах, входящих в выражение expr, руководствуясь равенством f(x,y)=0.
В Maxima определено, также, большое количество разнообразных функций численного интегрирования, обзор которых выходит за пределы данного пособия, но, при необходимости, может быть найден в руководстве пользователя.
5
Решение алгебраических уравнений
Для аналитического решения алгебраических уравнений и их систем можно воспользоваться функцией solve. как и многие другие функции Maxima, функция solve может быть вызвана с различными наборами аргументов. Кроме того, как обычно бывает в Maxima, ее поведение регулируется значениями системных пе- ременных. Рассмотрим возможные варианты вызова функции solve.
solve (expr, x) решает алгебраическое уравнение expr относительно перемен- ной x. В качестве результата выдается список корней уравнения. В случае, если выражение expr уравнением не является, то Maxima автоматически дополняет его введением нулевой правой части expr=0.
Если expr зависит только от одной переменной, то возможен вызов функции solve с одним аргументом: solve (expr).
Для решения системы n уравнений с n неизвестными используется вызов solve
([eqn_1,…,eqn_n ], [x_1,…,x_n ])
6
Механизм поиска решений систем уравнений имеет некоторые особенности. Сначала функция solve анализирует переданную ей в качестве аргумента систему уравнений, а затем, в зависимости от ее вида (линейная или нелинейная) обраща- ется к одной из двух функций linsolve или algsys, которые, впрочем, могут быть вызваны пользователем и самостоятельно.
Функция linsolve ([eqn_1,…,eqn_m ], [x_1,…,x_n ]) решает систему m линейных уравнений с n неизвестными.
Вприведенном примере Maxima исключила из системы третье уравнение, как зависимое, выбрала x1 и x2 за базисные, а x3 и x4 за независимые переменные, и корректно нашла решение.
Вслучае несовместности системы выдается сообщение об ошибке:
7
Что же касается функции algsys ([eqn_1,…,eqn_m ], [x_1,…,x_n ]), то она пыта- ется решить произвольную алгебраическую систему.
Как и функция solve, две последние функции, в случае, когда eqn_i не являют- ся уравнениями, дополняют их правой частью, равной нулю.
Если решение системы найти не удается, возвращается пустой список []. Приведем краткий список системных переменных, влияющих на работу с
уравнениями.
|
Флаг |
|
Возможные |
Значение |
|
|
Описание |
|
||
|
|
|
значения |
по умолча- |
|
|
|
|
|
|
|
|
|
|
нию |
|
|
|
|
|
|
|
|
|
|
|
|
Если true, то после решения сис- |
||||
|
|
|
|
|
|
темы двух и более линейных урав- |
||||
|
globalsolve |
|
true |
false |
|
нений |
найденные значения при- |
|||
|
|
false |
|
сваиваются переменным. При ре- |
||||||
|
|
|
|
|
||||||
|
|
|
|
|
|
шении |
любых |
других |
уравнений |
|
|
|
|
|
|
|
(систем) игнорируется |
|
|||
|
|
|
true |
|
|
Управляет |
выводом |
функцией |
||
|
linsolvewarn |
|
true |
|
linsolve |
сообщения об исключении |
||||
|
|
false |
|
|||||||
|
|
|
|
|
зависимого уравнения из системы |
|||||
|
|
|
|
|
|
|||||
|
|
|
true |
|
|
Если true – |
функцией algsys воз- |
|||
|
realonly |
|
false |
|
вращаются только действительные |
|||||
|
|
false |
|
|||||||
|
|
|
|
|
корни |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Управляет |
выводом |
сообщения |
||
|
solvetrigwarn |
|
true |
true |
|
об использовании обратных триго- |
||||
|
|
false |
|
нометрических функций и возмож- |
||||||
|
|
|
|
|
||||||
|
|
|
|
|
|
ной потере корней |
|
|||
|
|
|
true |
|
|
Управляет выводом сообщения о |
||||
|
solve_inconsistent_error |
|
true |
|
несовместности |
системы уравне- |
||||
|
|
false |
|
|||||||
|
|
|
|
|
ний. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8
Решение дифференциальных уравнений
Возможности Maxima по решению дифференциальных уравнений большим разнообразием не отличаются. Но все же, Maxima умеет находить частные реше- ния линейных дифференциальных уравнений и их систем, а также общие и част- ные решения обыкновенных дифференциальных уравнений первого и второго по- рядков. Необходимо учитывать, что при работе с линейными дифференциальны- ми уравнениями Maxima требует задания функциональных зависимостей в явном виде, как для функций, так и для их производных, соответственно не f и `diff(f,x) а f(x) и `diff(f(x),x).
Для задания начальных условий служит функция atvalue (expr, x=a, c), кото- рая задает значение с выражению expr в точке x=a.
Итак, для решения линейных дифференциальных уравнений и их систем слу- жит функция desolve. В первом случае она вызывается desolve (eqn, f)
а во втором – desolve ([eqn_1,…, eqn_n], [f_1,…, f_n] )
9