LXF82:Maxima
Yaleks (обсуждение | вклад) (Новая: {{Цикл/Maxima}} == Maxima – функции и операторы == ''ЧАСТЬ 2 Понять философию сложного пакета – уже половина дел...) |
Yaleks (обсуждение | вклад) (иллюстрация) |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 1: | Строка 1: | ||
{{Цикл/Maxima}} | {{Цикл/Maxima}} | ||
− | == | + | == Maxima — функции и операторы == |
− | ''ЧАСТЬ 2 Понять философию сложного | + | ''ЧАСТЬ 2 Понять философию сложного пакета — уже половина дела, однако, для того, чтобы уметь читать, надо хотя бы освоить азбуку. Сегодня '''Тихон Тарнавский''' расскажет вам об операторах (или функциях?) Maxima.'' |
=== Операторы Максимы === | === Операторы Максимы === | ||
Строка 8: | Строка 8: | ||
свойствах. | свойствах. | ||
− | На самом деле в Максиме нет чёткого разграничения между операторами и функциями. Более того, каждый | + | На самом деле в Максиме нет чёткого разграничения между операторами и функциями. Более того, каждый оператор — это на самом деле |
функция: | функция: | ||
− | + | [[Изображение:Img 82 106 1.png|center]] | |
Здесь имена функций-операторов берутся в кавычки лишь потому, | Здесь имена функций-операторов берутся в кавычки лишь потому, | ||
что содержат символы, нестандартные для имён функций. Это похоже на | что содержат символы, нестандартные для имён функций. Это похоже на | ||
работу в командной оболочке Unix, где, если в имя файла входят управляющие символы, вы можете либо взять это имя в кавычки, либо экранировать каждый такой символ обратным слэшем. В Maxima допустимы те же | работу в командной оболочке Unix, где, если в имя файла входят управляющие символы, вы можете либо взять это имя в кавычки, либо экранировать каждый такой символ обратным слэшем. В Maxima допустимы те же | ||
− | два варианта: например, вместо | + | два варианта: например, вместо «+» можно было бы написать \+. |
Итак, все встроенные операторы максимы являются функциями; | Итак, все встроенные операторы максимы являются функциями; | ||
Строка 26: | Строка 26: | ||
некоторых операторах, но и о нескольких функциях, которые по природе | некоторых операторах, но и о нескольких функциях, которые по природе | ||
своих действий сходны с операторами. Наиболее привычные операторы | своих действий сходны с операторами. Наиболее привычные операторы | ||
− | уже упоминались в предыдущей статье: +, | + | уже упоминались в предыдущей статье: +, -, *, /, ^ или ** (возведение |
в степень) и функцию sqrt(x) (квадратный корень). Сегодня мы поговорим ещё о нескольких достаточно распространённых. | в степень) и функцию sqrt(x) (квадратный корень). Сегодня мы поговорим ещё о нескольких достаточно распространённых. | ||
Точкой обозначается матричное произведение. В документации | Точкой обозначается матричное произведение. В документации | ||
− | утверждается, что сама точка при этом должна быть отделена пробелами от обоих своих | + | утверждается, что сама точка при этом должна быть отделена пробелами от обоих своих операндов — дабы не спутать её с точкой десятичной. |
На самом деле мне не удалось добиться от Максимы неадекватной реакции и в «беспробельном» варианте; что и логично, так как всё равно эти | На самом деле мне не удалось добиться от Максимы неадекватной реакции и в «беспробельном» варианте; что и логично, так как всё равно эти | ||
две разные ипостаси точки можно различить по контексту: ведь цифры | две разные ипостаси точки можно различить по контексту: ведь цифры | ||
именами матриц быть не могут. Так что, думаю, можете смело писать и | именами матриц быть не могут. Так что, думаю, можете смело писать и | ||
без пробелов. | без пробелов. | ||
− | + | [[Изображение:Img 82 106 2.png|center]] | |
В случае, если заданные матрицы не могут быть перемножены из-за | В случае, если заданные матрицы не могут быть перемножены из-за | ||
несовпадающих размерностей, Maxima выдаст сообщение об ошибке: | несовпадающих размерностей, Maxima выдаст сообщение об ошибке: | ||
+ | [[Изображение:Img 82 106 3.png|center]] | ||
− | + | Восклицательный знак, стоящий после своего аргумента (то есть постфиксный оператор), традиционно обозначает факториал. Не менее традиционно, двумя восклицательными знаками обозначен полуфакториал | |
− | Восклицательный знак, стоящий после своего аргумента ( | + | |
[произведение всех четных (для четного операнда) или нечетных чисел, | [произведение всех четных (для четного операнда) или нечетных чисел, | ||
− | меньших либо равных данному, | + | меньших либо равных данному, — прим. ред.]. Функции abs(x) и |
signum(x) возвращают, как опять же нетрудно догадаться, модуль и | signum(x) возвращают, как опять же нетрудно догадаться, модуль и | ||
− | знак числа. А функции max(x1, | + | знак числа. А функции max(x1,…,xn) и min(x1,…,xn) — соответственно максимальное и минимальное из заданных чисел. |
− | + | ||
Тут стоит остановиться на нескольких моментах. Во-первых, все | Тут стоит остановиться на нескольких моментах. Во-первых, все | ||
Строка 52: | Строка 51: | ||
но и комплексными числами. Сами комплексные числа записываются в | но и комплексными числами. Сами комплексные числа записываются в | ||
Максиме в алгебраической форме, с мнимой единицей, обозначенной | Максиме в алгебраической форме, с мнимой единицей, обозначенной | ||
− | через %i; то есть в виде a+b*%i, где a и | + | через %i; то есть в виде a+b*%i, где a и b — соответственно действительная и мнимая части числа. |
Так, факториал задан в наиболее общем виде и представляет собой, | Так, факториал задан в наиболее общем виде и представляет собой, | ||
Строка 59: | Строка 58: | ||
При этом факториал от натурального числа (и нуля) автоматически | При этом факториал от натурального числа (и нуля) автоматически | ||
упрощается до натурального же числа: | упрощается до натурального же числа: | ||
− | + | [[Изображение:Img 82 107 1.png|center]] | |
Точно так же и модуль определён для всех комплексных чисел | Точно так же и модуль определён для всех комплексных чисел | ||
− | (напомню, что |a+b*i|=sqrt( | + | (напомню, что <math>|a+b*i|=sqrt(a^2+b^2)</math>). Минимум, максимум и знак определены, естественным образом, только для действительных чисел, так как |
комплексные числа общего вида, как известно, между собой | комплексные числа общего вида, как известно, между собой | ||
несравнимы. | несравнимы. | ||
Второй важный момент: когда некоторая встроенная функция или | Второй важный момент: когда некоторая встроенная функция или | ||
− | оператор Maxima не может получить для переданного выражения однозначный результат (ввиду недостаточности данных) | + | оператор Maxima не может получить для переданного выражения однозначный результат (ввиду недостаточности данных) — она пытается максимально упростить это выражение. (Для некоторых функций такое |
автоупрощение регулируется специальными параметрами.) Например, | автоупрощение регулируется специальными параметрами.) Например, | ||
если x не задан: | если x не задан: | ||
− | + | [[Изображение:Img 82 107 2.png|center]] | |
Подобные упрощения, равно как и «раскрытие» факториалов и | Подобные упрощения, равно как и «раскрытие» факториалов и | ||
арифметических операторов, не считаются вычислениями, а следовательно оператор блокировки вычислений их не предотвращает: | арифметических операторов, не считаются вычислениями, а следовательно оператор блокировки вычислений их не предотвращает: | ||
− | + | [[Изображение:Img 82 107 3.png|center]] | |
Как вы, вероятно, помните, в прошлый раз кроме упомянутого только что оператора блокировки вычислений мы познакомились с оператором присвоения значений, или, иначе, именования выражений, : . В | Как вы, вероятно, помните, в прошлый раз кроме упомянутого только что оператора блокировки вычислений мы познакомились с оператором присвоения значений, или, иначе, именования выражений, : . В | ||
Maxima существуют и другие операторы именования, из которых нам на | Maxima существуют и другие операторы именования, из которых нам на | ||
− | данный момент интересен | + | данный момент интересен один — оператор задания функции. |
Обозначается он через :=, и аналогии здесь прослеживаются не с языками Pascal или Algol, как может показаться на первый взгляд, а с другими обозначениями самой Максимы: с одной стороны определение | Обозначается он через :=, и аналогии здесь прослеживаются не с языками Pascal или Algol, как может показаться на первый взгляд, а с другими обозначениями самой Максимы: с одной стороны определение | ||
− | функции можно воспринимать как уравнение (которое обозначается знаком =), а с | + | функции можно воспринимать как уравнение (которое обозначается знаком =), а с другой — оно родственно назначению имени некоторому |
выражению (то есть :). То есть определение функции можно в какой-то | выражению (то есть :). То есть определение функции можно в какой-то | ||
− | мере считать симбиозом этих двух | + | мере считать симбиозом этих двух выражений — и оттого вполне логично, что оно обозначается обоими их символами. (В продолжение этой |
аналогии могу добавить, что в Maxima есть и расширенные варианты | аналогии могу добавить, что в Maxima есть и расширенные варианты | ||
операторов присвоения и назначения функции, обозначаемые соответственно через :: и ::=.) | операторов присвоения и назначения функции, обозначаемые соответственно через :: и ::=.) | ||
− | + | [[Изображение:Img 82 107 4.png|center]] | |
Думаю, основы работы с функциями самоочевидны по аналогии с | Думаю, основы работы с функциями самоочевидны по аналогии с | ||
Строка 93: | Строка 92: | ||
А сейчас я расскажу о том, что было обещано в прошлый раз: о возможностях управлять процессом вычислений вводимых вами выражений. В | А сейчас я расскажу о том, что было обещано в прошлый раз: о возможностях управлять процессом вычислений вводимых вами выражений. В | ||
прошлый раз, о чём я уже вспоминал, было упомянуто только одно такое | прошлый раз, о чём я уже вспоминал, было упомянуто только одно такое | ||
− | + | средство — блокировка вычислений. Здесь всё достаточно просто и дополнительно стоит остановиться только на одном моменте. Если апострофом | |
− | предварён вызов функции (встроенной ли, | + | предварён вызов функции (встроенной ли, пользовательской — несущественно), то блокируется вычисление самой функции, но не её аргументов. |
Если же поставить апостроф перед выражением, заключённым в скобки, | Если же поставить апостроф перед выражением, заключённым в скобки, | ||
− | то невычисленными останется всё это выражение целиком, | + | то невычисленными останется всё это выражение целиком, то есть и все входящие в него функции, и все аргументы этих функций. Например: |
− | + | [[Изображение:Img 82 109 1.png|center]] | |
В противовес блокировке вычислений, можно также принудительно | В противовес блокировке вычислений, можно также принудительно | ||
− | вычислить любое | + | вычислить любое выражение — для этого тоже существует оператор, |
состоящий из двух апострофов: | состоящий из двух апострофов: | ||
+ | [[Изображение:Img 82 109 2.png|center]] | ||
− | + | В терминологии Maxima невычисленная форма выражения называется «noun form», вычисленная — «verb form». Сохраняя лингвистические параллели, на русский я бы это перевёл как «несовершённая форма» и «совершённая форма». | |
− | В терминологии Maxima невычисленная форма выражения называется «noun form», | + | |
Если говорить о ячейках ввода-вывода, то значение ячейки ввода в | Если говорить о ячейках ввода-вывода, то значение ячейки ввода в | ||
− | Maxima закономерно сохраняется до его вычисления ( | + | Maxima закономерно сохраняется до его вычисления (то есть в несовершённой форме), а значение ячейки вывода — после (то есть в совершённой); |
− | другими словами, тут сохраняется естественный порядок «ввод | + | другими словами, тут сохраняется естественный порядок «ввод -> |
− | вычисление | + | вычисление -> вывод». |
− | + | [[Изображение:Img 82 109 3.png|center]] | |
Как видите, операторы вычисления и блокировки вычислений имеют накопительный эффект. О другой стороне этого эффекта мы поговорим чуть ниже. | Как видите, операторы вычисления и блокировки вычислений имеют накопительный эффект. О другой стороне этого эффекта мы поговорим чуть ниже. | ||
Строка 117: | Строка 116: | ||
к функции ev(выражение). Сама функция ev предоставляет гораздо | к функции ev(выражение). Сама функция ev предоставляет гораздо | ||
более широкие возможности, нежели простое принудительное вычисление заданного выражения: она может принимать произвольное число | более широкие возможности, нежели простое принудительное вычисление заданного выражения: она может принимать произвольное число | ||
− | аргументов, первый из | + | аргументов, первый из которых — вычисляемое выражение, а остальные |
− | + | — специальные опции, которые как раз и влияют на то, как именно будет | |
− | производиться вычисление. Точно так же, как двойной апостроф | + | производиться вычисление. Точно так же, как двойной апостроф - |
сокращение для ev без дополнительных опций, есть ещё более упрощённая запись функции ev с опциями: в этом случае вместо имени функции | сокращение для ev без дополнительных опций, есть ещё более упрощённая запись функции ev с опциями: в этом случае вместо имени функции | ||
− | и скобок вообще ничего писать не нужно; | + | и скобок вообще ничего писать не нужно; то есть «ev(выражение, опц1,опц2, …)» можно записать просто как «выражение, опц1, опц2, |
− | + | …». | |
− | Первая из таких опций связана с автоупрощением. Глобально автоупрощение регулируется переключателем simp (от «simplification» | + | Первая из таких опций связана с автоупрощением. Глобально автоупрощение регулируется переключателем simp (от «simplification» - |
упрощение), и по умолчанию оно включено; в любой момент его можно | упрощение), и по умолчанию оно включено; в любой момент его можно | ||
выключить, установив значение переключателя в false. Опция функции | выключить, установив значение переключателя в false. Опция функции | ||
ev, одноимённая этому переключателю, позволяет включить упрощение | ev, одноимённая этому переключателю, позволяет включить упрощение | ||
− | для данного конкретного | + | для данного конкретного вычисления — вне зависимости от того, включено или выключено оно глобально: |
− | + | [[Изображение:Img 82 110 1.png|center]] | |
Тут нужно отметить ещё, что вызов kill(all) не восстанавливает | Тут нужно отметить ещё, что вызов kill(all) не восстанавливает | ||
− | умолчательные значения переключателей; | + | умолчательные значения переключателей; то есть если мы, к примеру, |
изменили значение переключателя simp, как в примере выше, то для | изменили значение переключателя simp, как в примере выше, то для | ||
того, чтобы вернуться к изначальному порядку вещей, установленному | того, чтобы вернуться к изначальному порядку вещей, установленному | ||
Строка 139: | Строка 138: | ||
Опция diff принудительно раскрывает все производные и полные | Опция diff принудительно раскрывает все производные и полные | ||
− | дифференциалы; а опция derivlist(x, y, | + | дифференциалы; а опция derivlist(x, y, …, v) — производные относительно переменных, заданных в качестве её аргументов, а также полные |
дифференциалы (так как они не зависят ни от каких переменных): | дифференциалы (так как они не зависят ни от каких переменных): | ||
− | + | [[Изображение:Img 82 110 2.png|center]] | |
Как видите, если из нескольких переменных из diff в derivlist() | Как видите, если из нескольких переменных из diff в derivlist() | ||
− | заданы не все, то раскрывается производная только по заданным переменным; это и понятно, так как выражения diff(f, x, 1, y, 1), diff(diff(f,x), y) и diff(diff(f, y), x) математически эквивалентны [по крайней | + | заданы не все, то раскрывается производная только по заданным переменным; это и понятно, так как выражения diff(f, x, 1, y, 1), diff(diff(f, x), y) и diff(diff(f, y), x) математически эквивалентны [по крайней |
− | мере, для «хороших» функций, | + | мере, для «хороших» функций, — прим.ред]. Если же аргумент опции |
derivlist() вообще не является переменной дифференцирования, он | derivlist() вообще не является переменной дифференцирования, он | ||
просто игнорируется. | просто игнорируется. | ||
− | Опция nouns раскрывает вообще все несовершённые | + | Опция nouns раскрывает вообще все несовершённые формы — и |
производные в том числе: | производные в том числе: | ||
− | + | [[Изображение:Img 82 110 3.png|center]] | |
Опция float преобразовывает все рациональные числа в конечную | Опция float преобразовывает все рациональные числа в конечную | ||
десятичную запись; опция numer включает опцию float и, кроме того, | десятичную запись; опция numer включает опцию float и, кроме того, | ||
приводит к десятичному виду многие математические функции от числовых аргументов: | приводит к десятичному виду многие математические функции от числовых аргументов: | ||
+ | [[Изображение:Img 82 110 4.png|center]] | ||
− | + | Опция noeval блокирует сам этап вычисления как таковой; то есть её | |
− | Опция noeval блокирует сам этап вычисления как таковой; | + | |
можно использовать для того, чтобы применить к выражению другие | можно использовать для того, чтобы применить к выражению другие | ||
опции функции ev, не перевычисляя его. При этом опять-таки нужно | опции функции ev, не перевычисляя его. При этом опять-таки нужно | ||
понимать разницу между вычислением и упрощением: | понимать разницу между вычислением и упрощением: | ||
− | + | [[Изображение:Img 82 110 5.png|center]] | |
Таким образом, мы можем принудительно упростить выражение, не | Таким образом, мы можем принудительно упростить выражение, не | ||
перевычисляя его. | перевычисляя его. | ||
− | Опция | + | Опция eval — напротив, проводит дополнительно ещё один процесс |
вычисления. Здесь стоит поговорить подробнее о накопительном | вычисления. Здесь стоит поговорить подробнее о накопительном | ||
эффекте вычисления, который я уже демонстрировал выше. Так как в | эффекте вычисления, который я уже демонстрировал выше. Так как в | ||
Строка 175: | Строка 174: | ||
значений» может продолжаться сколь угодно глубоко. Один вызов функции ev (без опции eval) опускается по этой цепочке в глубину на один | значений» может продолжаться сколь угодно глубоко. Один вызов функции ev (без опции eval) опускается по этой цепочке в глубину на один | ||
уровень: | уровень: | ||
− | + | [[Изображение:Img 82 110 6.png|center]] | |
Напомню, что здесь ev(y), eval является сокращённой записью от | Напомню, что здесь ev(y), eval является сокращённой записью от | ||
ev(ev(y), eval), таким образом вычисление в этом выражении проводится трижды. Кроме того, хочу обратить ваше внимание на порядок | ev(ev(y), eval), таким образом вычисление в этом выражении проводится трижды. Кроме того, хочу обратить ваше внимание на порядок | ||
назначения выражений символам; здесь существенно, что на момент | назначения выражений символам; здесь существенно, что на момент | ||
− | задания каждого выражения входящий в него символ ещё не был | + | задания каждого выражения входящий в него символ ещё не был определён — иначе в выражение автоматически подставлялся не сам символ, |
− | а его значение. Таким образом, если бы мы произвели эти же назначения в обратном порядке, то значением символа y стало бы xm+ | + | а его значение. Таким образом, если бы мы произвели эти же назначения в обратном порядке, то значением символа y стало бы xm+6 — безо |
всяких принудительных вычислений. | всяких принудительных вычислений. | ||
Строка 189: | Строка 188: | ||
можно использовать и для того, чтобы разблокировать блокировку | можно использовать и для того, чтобы разблокировать блокировку | ||
вычислений любой глубины вложения: | вычислений любой глубины вложения: | ||
− | + | [[Изображение:Img 82 111 1.png|center]] | |
В других ситуациях использовать этот переключатель следует с | В других ситуациях использовать этот переключатель следует с | ||
Строка 199: | Строка 198: | ||
Кроме константных значений есть ещё несколько видов опций. | Кроме константных значений есть ещё несколько видов опций. | ||
− | Первый из | + | Первый из них — это имена специальных функций, которые занимаются |
упрощением или преобразованием математических выражений. Будучи | упрощением или преобразованием математических выражений. Будучи | ||
− | упомянута по имени в качестве опции, такая функция просто применяется к вычисляемому выражению. Например, выражение, fullratsimp | + | упомянута по имени в качестве опции, такая функция просто применяется к вычисляемому выражению. Например, выражение, fullratsimp - |
это то же самое, что и fullratsimp(ev(выражение)). Полный список | это то же самое, что и fullratsimp(ev(выражение)). Полный список | ||
таких функций вы можете найти в ? evfun. | таких функций вы можете найти в ? evfun. | ||
Если в качестве опции ввести имя любой другой функции, не имеющей свойства evfun, то все несовершённые вхождения этой функции | Если в качестве опции ввести имя любой другой функции, не имеющей свойства evfun, то все несовершённые вхождения этой функции | ||
− | будут заменены совершёнными, | + | будут заменены совершёнными, то есть принудительно вычислены. |
{{Врезка | {{Врезка | ||
Строка 218: | Строка 217: | ||
|Ширина=250px}} | |Ширина=250px}} | ||
Также в качестве опции можно задать назначение символа или функции; все такие назначения действуют локально в пределах вычисляемого выражения, и все подстановки производятся параллельно: | Также в качестве опции можно задать назначение символа или функции; все такие назначения действуют локально в пределах вычисляемого выражения, и все подстановки производятся параллельно: | ||
+ | [[Изображение:Img 82 111 2.png|center]] | ||
Опция подстановки символа допустима не только в виде оператора | Опция подстановки символа допустима не только в виде оператора | ||
присвоения, но и в виде равенства; сделано это, в частности, для того, | присвоения, но и в виде равенства; сделано это, в частности, для того, | ||
чтобы в качестве подстановок можно было использовать решения, найденные функцией solve: | чтобы в качестве подстановок можно было использовать решения, найденные функцией solve: | ||
− | + | [[Изображение:Img 82 111 3.png|center]] | |
Вот и всё на сегодня. В следующий раз мы начнём с уже упомянутых вскользь функций по упрощению и преобразованию выражений. | Вот и всё на сегодня. В следующий раз мы начнём с уже упомянутых вскользь функций по упрощению и преобразованию выражений. | ||
Строка 256: | Строка 256: | ||
которых я сейчас и расскажу. | которых я сейчас и расскажу. | ||
+ | [[Изображение:Img 82 108 1.png|thumb|Рисунок 1. Консольная Maxima.]] | ||
Начнём с консольного интерфейса, доступного по команде Maxima; | Начнём с консольного интерфейса, доступного по команде Maxima; | ||
он выполнен в традиционном стиле командной строки: на экране чередуются вводимые вами команды и ответы системы на них (рис. 1). | он выполнен в традиционном стиле командной строки: на экране чередуются вводимые вами команды и ответы системы на них (рис. 1). | ||
Строка 266: | Строка 267: | ||
из графических интерфейсов. Единственный реальный плюс консольного интерфейса – это минимальные требования к ресурсам. В остальном всё, как видите, довольно аскетично. | из графических интерфейсов. Единственный реальный плюс консольного интерфейса – это минимальные требования к ресурсам. В остальном всё, как видите, довольно аскетично. | ||
+ | [[Изображение:Img 82 108 2.png|thumb|left|Рисунок 2. Xmaxima.]] | ||
Самый примитивный из графических интерфейсов, – XMaxima | Самый примитивный из графических интерфейсов, – XMaxima | ||
(рис. 2). На иллюстрации верхняя половина окна – это собственно рабочая область, нижняя – помощь. Кроме этого отдельного окна помощи | (рис. 2). На иллюстрации верхняя половина окна – это собственно рабочая область, нижняя – помощь. Кроме этого отдельного окна помощи | ||
Строка 271: | Строка 273: | ||
если тот запущен в X. Посему и тут долго задерживаться не будем. | если тот запущен в X. Посему и тут долго задерживаться не будем. | ||
+ | [[Изображение:Img 82 108 3.png|thumb|Рисунок 3. Maxima-Emacs.]] | ||
А рассмотрим следующий интерфейс – Maxima-Emacs. Он, как | А рассмотрим следующий интерфейс – Maxima-Emacs. Он, как | ||
нетрудно догадаться, запускает сессию Максимы в буфере широко | нетрудно догадаться, запускает сессию Максимы в буфере широко | ||
Строка 287: | Строка 290: | ||
взаимодействии ещё с одним интерфейсом, о котором чуть ниже. | взаимодействии ещё с одним интерфейсом, о котором чуть ниже. | ||
+ | [[Изображение:Img 82 109 4.png|thumb|left|Рисунок 4. Ячейка Максимы введенная и вычисленная в Emacs-режиме Emaxima.]] | ||
Следующие два интерфейса – EMaxima и iMaxima – также являются режимами редактора Emacs. Первый – скорее не самостоятельный | Следующие два интерфейса – EMaxima и iMaxima – также являются режимами редактора Emacs. Первый – скорее не самостоятельный | ||
режим, а надстройка над режимом LaTeX, которая наверняка понравится тем, кто использует Emacs для редактирования LaTeX-документов. В отличие от режима Maxima, который предназначен для обычного изолированного запуска полноценной Maxima-сессии, здесь речь | режим, а надстройка над режимом LaTeX, которая наверняка понравится тем, кто использует Emacs для редактирования LaTeX-документов. В отличие от режима Maxima, который предназначен для обычного изолированного запуска полноценной Maxima-сессии, здесь речь |
Текущая версия на 13:28, 30 декабря 2008
|
|
|
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
[править] Maxima — функции и операторы
ЧАСТЬ 2 Понять философию сложного пакета — уже половина дела, однако, для того, чтобы уметь читать, надо хотя бы освоить азбуку. Сегодня Тихон Тарнавский расскажет вам об операторах (или функциях?) Maxima.
[править] Операторы Максимы
Продолжаю знакомить вас с возможностями свободной программы символьных вычислений Maxima. Начну в этот раз с краткого рассказа об основных операторах Maxima и некоторых их свойствах.
На самом деле в Максиме нет чёткого разграничения между операторами и функциями. Более того, каждый оператор — это на самом деле функция:
Здесь имена функций-операторов берутся в кавычки лишь потому, что содержат символы, нестандартные для имён функций. Это похоже на работу в командной оболочке Unix, где, если в имя файла входят управляющие символы, вы можете либо взять это имя в кавычки, либо экранировать каждый такой символ обратным слэшем. В Maxima допустимы те же два варианта: например, вместо «+» можно было бы написать \+.
Итак, все встроенные операторы максимы являются функциями; более того, вы можете наделить любую (в том числе свою собственную) функцию определёнными свойствами, которые фактически превратят её в оператор. Подробнее об этом я расскажу в следующих выпусках.
Таким образом, разделение на функции и операторы в Maxima достаточно условно. Посему в этом разделе речь пойдёт не только о некоторых операторах, но и о нескольких функциях, которые по природе своих действий сходны с операторами. Наиболее привычные операторы уже упоминались в предыдущей статье: +, -, *, /, ^ или ** (возведение в степень) и функцию sqrt(x) (квадратный корень). Сегодня мы поговорим ещё о нескольких достаточно распространённых.
Точкой обозначается матричное произведение. В документации утверждается, что сама точка при этом должна быть отделена пробелами от обоих своих операндов — дабы не спутать её с точкой десятичной. На самом деле мне не удалось добиться от Максимы неадекватной реакции и в «беспробельном» варианте; что и логично, так как всё равно эти две разные ипостаси точки можно различить по контексту: ведь цифры именами матриц быть не могут. Так что, думаю, можете смело писать и без пробелов.
В случае, если заданные матрицы не могут быть перемножены из-за несовпадающих размерностей, Maxima выдаст сообщение об ошибке:
Восклицательный знак, стоящий после своего аргумента (то есть постфиксный оператор), традиционно обозначает факториал. Не менее традиционно, двумя восклицательными знаками обозначен полуфакториал [произведение всех четных (для четного операнда) или нечетных чисел, меньших либо равных данному, — прим. ред.]. Функции abs(x) и signum(x) возвращают, как опять же нетрудно догадаться, модуль и знак числа. А функции max(x1,…,xn) и min(x1,…,xn) — соответственно максимальное и минимальное из заданных чисел.
Тут стоит остановиться на нескольких моментах. Во-первых, все функции и операторы Maxima работают не только с действительными, но и комплексными числами. Сами комплексные числа записываются в Максиме в алгебраической форме, с мнимой единицей, обозначенной через %i; то есть в виде a+b*%i, где a и b — соответственно действительная и мнимая части числа.
Так, факториал задан в наиболее общем виде и представляет собой, по сути, гамма-функцию (точнее, x! = gamma(x+1)), то есть определён на множестве всех комплексных чисел, кроме отрицательных целых. При этом факториал от натурального числа (и нуля) автоматически упрощается до натурального же числа:
Точно так же и модуль определён для всех комплексных чисел (напомню, что <math>|a+b*i|=sqrt(a^2+b^2)</math>). Минимум, максимум и знак определены, естественным образом, только для действительных чисел, так как комплексные числа общего вида, как известно, между собой несравнимы.
Второй важный момент: когда некоторая встроенная функция или оператор Maxima не может получить для переданного выражения однозначный результат (ввиду недостаточности данных) — она пытается максимально упростить это выражение. (Для некоторых функций такое автоупрощение регулируется специальными параметрами.) Например, если x не задан:
Подобные упрощения, равно как и «раскрытие» факториалов и арифметических операторов, не считаются вычислениями, а следовательно оператор блокировки вычислений их не предотвращает:
Как вы, вероятно, помните, в прошлый раз кроме упомянутого только что оператора блокировки вычислений мы познакомились с оператором присвоения значений, или, иначе, именования выражений, : . В Maxima существуют и другие операторы именования, из которых нам на данный момент интересен один — оператор задания функции. Обозначается он через :=, и аналогии здесь прослеживаются не с языками Pascal или Algol, как может показаться на первый взгляд, а с другими обозначениями самой Максимы: с одной стороны определение функции можно воспринимать как уравнение (которое обозначается знаком =), а с другой — оно родственно назначению имени некоторому выражению (то есть :). То есть определение функции можно в какой-то мере считать симбиозом этих двух выражений — и оттого вполне логично, что оно обозначается обоими их символами. (В продолжение этой аналогии могу добавить, что в Maxima есть и расширенные варианты операторов присвоения и назначения функции, обозначаемые соответственно через :: и ::=.)
Думаю, основы работы с функциями самоочевидны по аналогии с приведенным примером, а подробнее об этом мы поговорим в следующих выпусках.
[править] Функция вычисления всего
А сейчас я расскажу о том, что было обещано в прошлый раз: о возможностях управлять процессом вычислений вводимых вами выражений. В прошлый раз, о чём я уже вспоминал, было упомянуто только одно такое средство — блокировка вычислений. Здесь всё достаточно просто и дополнительно стоит остановиться только на одном моменте. Если апострофом предварён вызов функции (встроенной ли, пользовательской — несущественно), то блокируется вычисление самой функции, но не её аргументов. Если же поставить апостроф перед выражением, заключённым в скобки, то невычисленными останется всё это выражение целиком, то есть и все входящие в него функции, и все аргументы этих функций. Например:
В противовес блокировке вычислений, можно также принудительно вычислить любое выражение — для этого тоже существует оператор, состоящий из двух апострофов:
В терминологии Maxima невычисленная форма выражения называется «noun form», вычисленная — «verb form». Сохраняя лингвистические параллели, на русский я бы это перевёл как «несовершённая форма» и «совершённая форма».
Если говорить о ячейках ввода-вывода, то значение ячейки ввода в Maxima закономерно сохраняется до его вычисления (то есть в несовершённой форме), а значение ячейки вывода — после (то есть в совершённой); другими словами, тут сохраняется естественный порядок «ввод -> вычисление -> вывод».
Как видите, операторы вычисления и блокировки вычислений имеют накопительный эффект. О другой стороне этого эффекта мы поговорим чуть ниже.
Оператор, обозначенный двумя апострофами, является синонимом к функции ev(выражение). Сама функция ev предоставляет гораздо более широкие возможности, нежели простое принудительное вычисление заданного выражения: она может принимать произвольное число аргументов, первый из которых — вычисляемое выражение, а остальные — специальные опции, которые как раз и влияют на то, как именно будет производиться вычисление. Точно так же, как двойной апостроф - сокращение для ev без дополнительных опций, есть ещё более упрощённая запись функции ev с опциями: в этом случае вместо имени функции и скобок вообще ничего писать не нужно; то есть «ev(выражение, опц1,опц2, …)» можно записать просто как «выражение, опц1, опц2, …».
Первая из таких опций связана с автоупрощением. Глобально автоупрощение регулируется переключателем simp (от «simplification» - упрощение), и по умолчанию оно включено; в любой момент его можно выключить, установив значение переключателя в false. Опция функции ev, одноимённая этому переключателю, позволяет включить упрощение для данного конкретного вычисления — вне зависимости от того, включено или выключено оно глобально:
Тут нужно отметить ещё, что вызов kill(all) не восстанавливает умолчательные значения переключателей; то есть если мы, к примеру, изменили значение переключателя simp, как в примере выше, то для того, чтобы вернуться к изначальному порядку вещей, установленному сразу после запуска Maxima, нам нужно не только сделать kill(all), но и вручную назначить simp:true.
Опция diff принудительно раскрывает все производные и полные дифференциалы; а опция derivlist(x, y, …, v) — производные относительно переменных, заданных в качестве её аргументов, а также полные дифференциалы (так как они не зависят ни от каких переменных):
Как видите, если из нескольких переменных из diff в derivlist() заданы не все, то раскрывается производная только по заданным переменным; это и понятно, так как выражения diff(f, x, 1, y, 1), diff(diff(f, x), y) и diff(diff(f, y), x) математически эквивалентны [по крайней мере, для «хороших» функций, — прим.ред]. Если же аргумент опции derivlist() вообще не является переменной дифференцирования, он просто игнорируется.
Опция nouns раскрывает вообще все несовершённые формы — и производные в том числе:
Опция float преобразовывает все рациональные числа в конечную десятичную запись; опция numer включает опцию float и, кроме того, приводит к десятичному виду многие математические функции от числовых аргументов:
Опция noeval блокирует сам этап вычисления как таковой; то есть её можно использовать для того, чтобы применить к выражению другие опции функции ev, не перевычисляя его. При этом опять-таки нужно понимать разницу между вычислением и упрощением:
Таким образом, мы можем принудительно упростить выражение, не перевычисляя его.
Опция eval — напротив, проводит дополнительно ещё один процесс вычисления. Здесь стоит поговорить подробнее о накопительном эффекте вычисления, который я уже демонстрировал выше. Так как в Максиме значениями символов могут выступать самые разнообразные выражения, то в эти выражения тоже могут входить некоторые символы, которые тоже могут иметь свои значения; и такая цепочка «вложенных значений» может продолжаться сколь угодно глубоко. Один вызов функции ev (без опции eval) опускается по этой цепочке в глубину на один уровень:
Напомню, что здесь ev(y), eval является сокращённой записью от ev(ev(y), eval), таким образом вычисление в этом выражении проводится трижды. Кроме того, хочу обратить ваше внимание на порядок назначения выражений символам; здесь существенно, что на момент задания каждого выражения входящий в него символ ещё не был определён — иначе в выражение автоматически подставлялся не сам символ, а его значение. Таким образом, если бы мы произвели эти же назначения в обратном порядке, то значением символа y стало бы xm+6 — безо всяких принудительных вычислений.
В продолжение разговора о накопительном эффекте и «цепочных» вычислениях придётся кстати переключатель infeval. Он заставляет ev перевычислять выражение до тех пор, пока оно не перестанет изменяться при последующих вычислениях. В частности, этот переключатель можно использовать и для того, чтобы разблокировать блокировку вычислений любой глубины вложения:
В других ситуациях использовать этот переключатель следует с осторожностью: не забывайте, что он может привести к зацикливанию.
О других константных опциях и переключателях функции ev можно узнать из ? ev и ? evflag, а мы наверняка ещё рассмотрим многие из них позже, когда они будут более актуальны в контексте повествования.
Кроме константных значений есть ещё несколько видов опций. Первый из них — это имена специальных функций, которые занимаются упрощением или преобразованием математических выражений. Будучи упомянута по имени в качестве опции, такая функция просто применяется к вычисляемому выражению. Например, выражение, fullratsimp - это то же самое, что и fullratsimp(ev(выражение)). Полный список таких функций вы можете найти в ? evfun.
Если в качестве опции ввести имя любой другой функции, не имеющей свойства evfun, то все несовершённые вхождения этой функции будут заменены совершёнными, то есть принудительно вычислены.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Также в качестве опции можно задать назначение символа или функции; все такие назначения действуют локально в пределах вычисляемого выражения, и все подстановки производятся параллельно:
Опция подстановки символа допустима не только в виде оператора присвоения, но и в виде равенства; сделано это, в частности, для того, чтобы в качестве подстановок можно было использовать решения, найденные функцией solve:
Вот и всё на сегодня. В следующий раз мы начнём с уже упомянутых вскользь функций по упрощению и преобразованию выражений.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить