Учебное пособие Москва 2008
Скачать 3.68 Mb.
|
Эллиптический параболоид приведен на рис. Рис. 37. График функции z =c x 2 a 2 y 2 b 2 (эллиптический параболоид) Сечение параболоида горизонтальной плоскостью представляет собой эллипса сечение вертикальной плоскостью – параболу. Гиперболический параболоид приведен на рис. 38. Поверхность имеет вид седла – прекрасную иллюстрацию отсутствия локального экстремума. Отметим, что в вызове функции plot3d() в рассмотренных случаях мы использовали список видано функция plot3d() допускает и более простой вызов вида выражение, переменная, начало, конец, 53 Стахин НА, Основы работы с системой аналитических (символьных) вычислений переменная, начало, конец если выражение в явном виде зависит от переменной и переменной. В этом случае удобно пользоваться также кнопкой График 3D... или пунктом меню Графики | График Рис. 38. График функции z =c x 2 a 2 − y 2 b 2 (гиперболический параболоид 7.1. Трехмерные параметрические графики Если координаты x, y, z зависят от параметров u, v: (x =X(u,v), y =Y(u,v), z =Z(u,v)), тов вызове функции plot3d() нужно использовать только списки вида выражение, выражение, выражение, переменная, начало, конец, переменная, начало, конец, где выражения представляют собой упорядоченные зависимости X(u,v), Y(u,v), Z(u,v). Рис. 39. Параметрический круговой цилиндр Простейшей параметрической поверхностью после плоскости является круговой цилиндр вдоль оси Z. Однако, если мы попробует записать вызов функции plot3d() слишком просто в виде. plot3d ( [ sin ( t ) ,cos ( t ) ,z ] , 54 Стахин НА, Основы работы с системой аналитических (символьных) вычислений Maxima [ t,-%pi,%pi ] , [ z,-1.2,1.2 ] ) ;, то вместо цилиндра Максима нарисует пространственную окружность, а переменную z изменять от - 1.2 доне будет. «Обмануть» Максиму в данном случае нетрудно, достаточно вместо стандартной декартовой переменной z ввести любую другую переменную. Хотя она нам как таковая и ненужна в данном случае, номы вынуждены поддержать стандарт записи списка из трех выражений (рис. Наличие фиктивной переменной позволяет нарисовать пространственную кривую. Чтобы винтовая линия на графике (рис. 39) получилась достаточно гладкой, была добавлена опция [grid, 150,150], которая использовалась ранее для рисования сетки. Рис. 40. Пространственная кривая Отметим, что нарисовать красивый пространственный график не всегда просто, даже если использовать дополнительные опции (рис. 41). Рис. 41. Рисунок сферы во встроенном формате Стахин НА, Основы работы с системой аналитических (символьных) вычислений Рисунок сферы на рис. 41 во встроенном формате плохо отождествляется со сферой, хотя если смотреть по масштабу сетки вдоль осей графиков, наличию опции "set mapping spherical" это должно быть сферой. Кроме того заметим, что во встроенном формате функция wxplot3d() результат выводит не в отдельное окно, а в обычное графическое окно интерфейса wxMaxima, что не позволяет поворачивать графики рассматривать его с разных сторон.. Заметим также, что кроме самой программы Maxima и ее модуля openmath на компьютере должен быть установлен также графический интерфейс xMaxima. Так, например, при отсутствии графического интерфейса xMaxima рисунок этой же самой сферы будет выведен в отдельное окно (как ив случае непараметрических графиков - окно Gnuplot) и может масштабироваться и рассматриваться с разных точек зрения, ноне быть сферой (рис. Рис. 42. Рисунок сферы в окне При наличии установленного графического интерфейса xMaxima параметрические графики могут быть выведены в Окно 3D графики Вильяма Шелтера, имеющего свое собственное меню (рис. 43). На рис. 43 кроме непосредственно рисунка сферы 1) представлен также текст вызова функции plot3d() - 2), в котором присутствует опция [plot_format, Рис. 43. Рисунок сферы в окне Вильяма Шелтера 56 Стахин НА, Основы работы с системой аналитических (символьных) вычислений Окно 3D графики Вильяма Шелтера позволяет не только изменять размеры самого окна, но и передвигать рисунок по окну (при нажатой правой кнопке мыши, масштабировать рисунок (щелчком мыши увеличивать размера щелчком мыши при нажатой кнопке Shift - уменьшать размеры рисунка, вращать рисунок и изменять его настройки. Если после этих манипуляций "Перерисовать" график, получится очень симпатично. Наследующем рисунке (рис. 44) представлен график односторонней поверхности - лист Мёбиуса, Рис. 44. Односторонняя поверхность, лист Мёбиуса и приведен текст вызова функции plot3d(), которая выводит график в Окно 3D графики Вильяма Шелтера. 8. Решение уравнений Уравнения и системы уравнений решаются водной и той же функцией solve . Интерфейс wxMaxima позволяет упростить процедуру использования функции solve : после нажатия на кнопку Решить появится дополнительное окно Решить, в котором конкретизируется и вид уравнения, и имя переменной, относительно которой нужно решить уравнение (рис. 45). Рис. 45. Интерфейс wx Maxima для решения уравнения Стахин НА, Основы работы с системой аналитических (символьных) вычислений Впрочем, интерфейс wxMaxima можно не использовать, можно просто написать команду для Максимы вида solve([(x+1)/(x^2+1)=x^2/(x+2)], Но прежде чем рассмотреть результаты решения подробнее, нужно сказать пару слово списках, или векторах, в Maxima; поскольку именно в виде списков solve возвращает корни, да и принимает параметры в случае решения системы уравнений, а не одного уравнения. Синтаксис списков в Maxima прост это перечисление элементов в квадратных скобках элемент, элемент ,…, элемент. Особенность — не в синтаксисе. Основное достоинство списков Maxima в том, что их элементами могут быть совершенно любые выражения символы, арифметические выражения, вызовы функций, присвоения, уравнения, другие списки Поэтому списки и во встроенных функциях широко применяются. Функция solve в своем простейшем варианте, для решения одиночного уравнения, в качестве аргументов никаких списков не принимает (а принимает либо уравнение и символ, относительно которого его надо решать, либо только уравнение, если символ в нем всего один. А возвращает список, состоящий из всех корней заданного уравнения. В рассматриваемом случае получаем Здесь мы сначала записали уравнение (команда %i1). Потом попросили решить его с помощью функции solve (команда %i2). Как видно из полученного решения, функция solve нашла не только действительные корни, но и все комплексные корни уравнения и записала их в виде списка из четырех элементов. К конкретному элементу полученного списка можно обратиться с помощью тех же квадратных скобок, указав в них номер элемента после имени списка. Вот так, например, мы можем осуществить проверку решения, подставив первый корень из выданного списка в исходное уравнение. 58 Стахин НА, Основы работы с системой аналитических (символьных) вычислений Здесь в равенство (eq), переданное в качестве дополнительного параметра функции ev, подставляется значение переменной, указанной в последнем (%) результате (%o2) в списке под номером один. Точно таким же образом можно обратиться ко второму, третьему и четвертому элементу списка: Вообще говоря, в качестве первого аргумента функции solve можно задавать не только уравнение, а вообще любое выражение. При этом корни выражения (не являющегося уравнением) ищутся в том самом смысле, в каком эта фраза понимается в математике корни выражения — это те значения переменной, на которых выражение обращается в ноль. Возможность такой записи позволяет, к примеру, легко найти критические точки любой непрерывной функции (а заодно и вычислить значения функции в этих точках 8.1. Поиск экстремума В следующем примере мы сначала конкретизировали вид функции команда %i1), затем попросили Максиму решить уравнение, указав в качестве аргумента функции solve выражение вида (diff(f, x)), которое представляет собой производную функции f попеременной. В качестве решения (о) уравнения f ′(x) = 0 функция solve вывела список из двух значений [ x = –2, x = 0 ]. Команда (%i3) использована для того, чтобы вычислить значение функции в критических точках. В этом примере есть еще два важных момента. Первый — функция Она, как видно из контекста, вызывается как %th(n) и возвращает ю ячейку вывода. Ею удобно пользоваться, также как и обозначениями % и, чтобы не обращать внимания на номера ячеек результата, и кроме того, применимо в командных файлах Maxima, которые могут загружаться, в том числе прямо из интерактивной сессии (с помощью функции load ). И второй момент здесь 59 Стахин НА, Основы работы с системой аналитических (символьных) вычислений Maxima проиллюстрировано, что в Maxima операция индексирования списка доступна не только по отношению к именам переменных, но и к вызовам функций иными словами, если функция возвращает список значений, мы можем выбрать одно конкретное из них, написав его номер в квадратных скобках прямо после вызова функции. 8.2. Решение систем уравнений Попросим Maxima решить систему из двух уравнений пусть требуется найти точки пересечения окржности x 2 + y 2 =2 и прямой x + y =1. Для записи команды для Maxima можно использовать следующий вариант уравнение, уравнение, …], переменная, переменная, …]), но можно использовать сокращенный вариант, аналогично варианту для одиночного уравнения. Совместим графики окружности и прямой, чтобы убедиться в том, что решение существует. Из графика рис. 46 видим, что решением исследуемой системы уравнений являются координаты 2 точек. Рис. 46. Пересечение окружности и прямой В нашем случае количество уравнений и количество неизвестных равны, поэтому список неизвестных можно не писать, а использовать обращение вида уравнение, уравнение, Не следует, конечно, забывать, что квадратные скобки используются для указания списка, иначе Maxima проинтерпретирует вызов за вариант с одним уравнением. Получим в итоге Стахин НА, Основы работы с системой аналитических (символьных) вычислений Здесь в качестве решения возвратился список из двух списков, каждый из которых соответствует одному решению системы (координатам точек пересечения. В качестве подстановок можно использовать как такие списки целиком (например, в данном контексте, %o1[1]), таки отдельные их элементы например, %o1[1][1]). Рассмотрим другой случай, когда уравнений меньше, чем неизвестных, solve поступит точно также, как ив случае одного уравнения с несколькими символами но все неуказанные в списке как переменные Maxima будет воспринимать как параметры: В этом примере Максиме нужно было найти точки пересечения окружности радиуса ас пересекающей ее прямой х+у=2а+1 ив общем случае произвольного а Максима нашла 2 точки пересечения. Если жене сможет найти точных решений, как это она сделала в данном случае, то она может поступить как функция integrate и вернуть уравнение или систему уравнений в некотором упрощенном виде, а может и самостоятельно попытаться решить систему численно. Попробуем найти точки пересечения двух кривых второго порядка гиперболы 4x 2 – y 2 = 12 с гиперболой xy – x = 2. Прежде всего мы записали команда %i13) систему двух рассматриваемых уравнений. Затем дали команду решить систему уравнений совместно (команда %i14) и получили в качестве решения список, в котором имеются 4 (численных) приближенных решения, два из них – это действительные координаты точек пересечения (рис. 47) и два других – комплексные корни, содержащие мнимую единицу %i (корень квадратный из –1). 61 Стахин НА, Основы работы с системой аналитических (символьных) вычислений Рис. 47. Пересечение двух гипербол Но если нам все же нужны точные значения корней (в аналитической записи, либо если они не найдены даже в числах, можно попробовать решить уравнения по очереди, выражая одно неизвестное через другое. Для данной пары уравнений решим второе из уравнений eq2 относительно y, подставим найденное решение в первое уравнение и решим его относительно х. В результате решения получим 4 различных корня, в том числе 2 корня комплексные. После подстановки найденного решения в уравнение о, можно будет найти значение второй неизвестной. Точное решение уравнения о имеет вид 62 Стахин НА, Основы работы с системой аналитических (символьных) вычислений Запишем точное решение для первого и последнего корней из полученного списка, в итоге получим точные (хотя и немного страшные на вид) аналитические выражения. Функция solve имеет довольно большое количество различных переключателей, из которых может пригодиться в первую очередь один, называемый solveradcan . По умолчанию в Максима выставлено false , а если выставить этот флаг в true , мы заставим solve , помимо его поведения, применять radcan — функцию по упрощению показательных, логарифмических и степенных (с рациональными степенями) функций. Это делает работу функции solve более медленной (потому по умолчанию этот режим и выключен, нов некоторых случаях может помочь разрешить проблемы, которые без этого ключа приведут к невозможности найти точное решение [8]. 9. Решение задач математического анализа 9.1. Нахождение производной Функция diff(); позволяет найти производные как первого, таки более высоких порядков. При наличии у функции нескольких переменных можно найти частную производную по одной из них. Синтаксис: функция, переменная, порядок производной); Пример: найти первую производную функции Сначала введем функцию f(x):=exp(x)/x ^ 2; (обратите внимание, что далее в строке %i4, в отличие от присвоения значения переменной, используется комбинация символов ":=" (двоеточие и равно, а затем дается команда найти ее производную попеременной х Стахин НА, Основы работы с системой аналитических (символьных) вычислений Для вычисления производной вводится команда diff(y(x),x,1); или diff(y(x),x);. В случае первой производной ее порядок можно не указывать. При вычислении кратных производных по нескольким переменным после указания функции перечисляются переменные дифференцирования с указанием соответствующих кратностей, например, diff(x ^ 8*y ^ 5, x, 4, y, 2); — дифференцирует функцию x 8 y 5 попеременной х четыре раза и попеременной у два раза Если функция diff() содержит только один аргумент, то функция выражение вычисляет не производную записанного выражения, а полный дифференциал этого выражения. Другими словами, запись diff(f, x); равнозначна математическому обозначению df/dx, а diff(f) — Кроме того, функция diff () используется еще и для обозначения производных в дифференциальных уравнениях 9.2. Интегрирование Для нахождения неопределенного интеграла в качестве аргументов указывается функция и переменная интегрирования. Синтаксис: функция, переменная Стахин НА, Основы работы с системой аналитических (символьных) вычислений Пример вычислить интеграл от функции х 2 +5х+3 попеременной х. При нахождении значения определенного интеграла помимо рассмотренных параметров указываются пределы интегрирования. В качестве пределов интегрирования могут фигурировать бесконечность (inf) и минус бесконечность (Синтаксис функция, переменная, нижний предел, верхний предел); Пример: вычислить интеграл функции sin(x) попеременной хна отрезке от 0 до В случае, когда интеграл расходится, Maxima выдает сообщение "Integral is divergent". Например, integrate(1/x, x, 0, inf); выдаст именно такое сообщение. В некоторых случаях Maxima может попросить доопределить некоторую переменную, как в случае вычисления определенного интеграла, значение которого зависит от знака параметра а, являющегося верхним пределом, или интегрирования функции x n . В следующем примере подынтегральное выражение не зависит от знака параметра a, но значение интеграла — зависит, так как параметра может быть записан или как верхний предел или как нижний предел Стахин НА, Основы работы с системой аналитических (символьных) вычислений На вопрос Maxima Is a positive, negative, or zero? мы ответили р (positive) и получили положительное значение. В случае отрицательного знака у параметра а значение интеграла (о) будет отрицательное, а численное значение интеграла по модулю будет тем же. В следующем примере прежде чем записать ответ Maxima уточнила, не является ли значение n+1 равным нулю Is n+1 zero or nonzero?, после получения положительного ответа nonzero Maxima, наконец, записала численное значение интеграла. 9.3. Нахождение пределов Полноценных функций для нахождения предела существует в Maxima одна. Но зато какая Она может принимать три различных варианта списка аргументов, и кроме того, на ее действие влияют еще и три флага. Зовут эту функции вполне соответственно ее действию limit ; ив самом стандартном варианте ее вызов выглядит как выражение, переменная, значение_переменной), то есть то, что в математической записи выглядит как lim x→a f(x), в контексте Maxima запишется как limit(f(x), x, Синтаксис функция, переменная, значение_аргумента); или функция, переменная, значение_аргумента, слева/справа); Предел слева обозначается minus, а справа – plus. Многоразличных примеров собрано в табл. 4 66 Стахин НА, Основы работы с системой аналитических (символьных) вычислений Таблица Пределы и их вычисление в Предел функции Вычисление предела в В двух последних представленных здесь примерах появились два новых ответа Максимы, означающие, что искомый предел не существует ind (от слова indefinite — неопределенный) и und (от слова undefined — опять же неопределенный. В документации первый из этих ответов описан как indefinite but bounded (неопределенно ограничен, что дает основание предположить, что речь идет о функции, не имеющей предела, но при этом ограниченной сверху либо в окрестности предельной точки, либо на всей прямой. Функция limit(); в третьем варианте — выражение — предназначена уже не для поиска собственно пределов, 67 Стахин НА, Основы работы с системой аналитических (символьных) вычислений Maxima а для упрощения выражений, содержащих символы inf и Выражения такого рода могут возникать, к примеру, при подстановках в формулы результатов вычисления каких-то других пределов или интегралов. Такая способность функции limit(); — принимать различные списки аргументов — не является в Maxima чем-то особенным она свойственна очень многим встроенным функциям. Как и различное действие в зависимости от значений разнообразных переключателей. Это достаточно удобно ненужно запоминать много разных имен функций (для поиска пределов, к примеру, используется исключительно функция limit ); для вычисления производных, в том числе и частных, — функция diff; для нахождения интегралов, как определенных, таки неопределенных — функция integrate. Имена наиболее часто используемых функций запомнить несложно, а о дополнительных ключах или флагах в случае чего можно прочитать во встроенной справке, набрав ? имя-функции. Об этих самых ключах к функции limit в [8] рассказывается следующее. Первый ключ называется lhospitallim и задает максимальное количество применений правила Лопиталя; название ключа происходит от фамилии ученого, давшей название самому правилу, которая в оригинале пишется как L’Hospital. Правило Лопиталя гласит, что в случае неопределенности вида 0/0 или ∞/∞ можно продифференцировать числитель и знаменатель — и предел от этого не изменится. Ограничитель количества применений этого правила нужен для того, чтобы избежать зацикливаний, которые могут случиться для бесконечно дифференцируемых функций, у которых в данной точке равны нулю либо бесконечности все производные. По умолчанию значение lhospitallim равно четырем, и этого, повидимому, вполне достаточно. Второй ключ к функции limit — это флаг limsubst, который, будучи выставлен в true, позволяет этой функции производить подстановки внутрь 68 Стахин НА, Основы работы с системой аналитических (символьных) вычислений Maxima неизвестных выражений. По умолчанию этот флаг равен false, что исключает ошибки вроде той, что появляется в строках (%i2)–(%o2), когда предел отношения двух "соседних" значений функции на бесконечности, автоматически считается равным единице для любой функции произвольного вида. И наконец, последний дополнительный параметр — еще один флаг, по имени tlimswitch . По умолчанию он тоже выключена если его включить, функция limit будет, при невозможности найти предел другими способами, пытаться его найти путем разложения подпредельной функции вряд Тейлора в окрестности заданной точки. Что касается "неполноценных" функций, то таковая тоже имеется по имени tlimit(); она представляет собой фактически просто-напросто вызов самой функции limit(); с поднятым флагом tlimswitch, то есть пытается при необходимости разложить исследуемую функцию вряд Тейлора вне зависимости от реального значения этого флага. Другими словами вызов аргументы полностью аналогичен записи аргументы, tlimswitch:true; только чуть короче. И аргументы она может принимать точно такие же [8]. |