Роберт Додиер - Коротко о Maxima
Описание файла
PDF-файл из архива "Роберт Додиер - Коротко о Maxima", который расположен в категории "". Всё это находится в предмете "техника эксперимента" из 8 семестр, которые можно найти в файловом архиве МПУ. Не смотря на прямую связь этого архива с МПУ, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "техника эксперимента" в общих файлах.
Просмотр PDF-файла онлайн
Текст из PDF
Коротко о MaximaРоберт Додиер1Что такое Maxima?Maxima — система для работы с выражениями, такими как x + y, sin(a + bπ) и u · v − v · u.Maxima не особо заботится о смысле выражения. Только пользователь решает, какой смысл несетвыражение.Иногда требуется задать значения неизвестных и вычислить выражение — Maxima с радостьюсделает это. Но система с той же радостью отложит присваивание конкретных значений, так что выможете провести с выражением некоторые преобразования, после чего уже определить неизвестные(или не определять их вовсе).Рассмотрим несколько примеров.1. Нужно найти объем шара:(%i1) V: 4/3 * %pi * r^3;(%o1)34 %pi r-------32. Радиус равен 10:(%i2) r: 10;(%o2)3.V10— то же, что и было; Maxima не поменяет V , если это не указать:(%i3) V;(%o3)34 %pi r-------34.
«Maxima, пересчитай, пожалуйста, V »:(%i4) ’’V;(%o4)4000 %pi-------3c 2005 Robert Dodier.c 2007 Алексей Бешенов (al@beshenov.ru), русский перевод.Домашняя страница Maxima: http://maxima.sourceforge.net/ru/.15. Вместо выражения хотелось бы видеть численное значение:(%i5) ’’V, numer;(%o5)24188.79020478639ВыраженияВсё в Maxima является выражениями, в том числе математические выражения, объекты и программные блоки.
Выражение — атом, либо оператор с аргументами.Атом — символ (имя), строка в кавычках, либо число (целое или с плавающей точкой).Все выражения не-атомы представляются в виде op(a1, . . . , an), где op — имя оператора, а a1, . . . , an —его аргументы. Выражения могут отображаться по-разному, но внутреннее представление всегда одинаково. Аргументы выражения могут быть атомами, либо выражениями не-атомами.Математические выражения включают математические операторы, такие как+ − ∗/ <=>либо вычисление функции вроде sin(x), bessel_j(n, x). В таких случаях оператором является функция.Объекты в Maxima — тоже выражения. Список [a1, .
. . , an] — выражение list(a1, . . . , an). Матрица —выражениеmatrix(list(a1,1 , . . . , a1,n ), . . . , list(am,1 , . . . , am,n ))Программными блоками являются выражения. Блок кода block(a1, . . . , an) — выражение с оператором block и аргументами a1, . . . , an. Условная конструкция if a then b elseif c then d — выражениеif (a, b, c, d).
Цикл for a in L do S — выражение, соответствующее do(a, L, S).Функция Maxima op возвращает оператор выражения-не-атома. Функция args возвращает аргументы выражения-не-атома. Функция atom указывает, является ли выражение атомом.Рассмотрим другие примеры.1. Атомы — символы, строки и числа. Вот список с элементами-атомами:(%i2) [a, foo, foo_bar, "Hello, world!", 42, 17.29];(%o2)[a, foo, foo_bar, Hello, world!, 42, 17.29]2. Математические выражения:(%i1) [a + b + c, a * b * c, foo = bar, a*b < c*d];(%o1)[c + b + a, a b c, foo = bar, a b < c d]3. Списки и матрицы.
Элементами списка или матрицы могут быть любые выражения, в том числесписки или матрицы:(%i1) L: [a, b, c, %pi, %e, 1729, 1/(a*d - b*c)];1(%o1)[a, b, c, %pi, %e, 1729, ---------]a d - b c2(%i2) L2: [a, b, [c, %pi, [%e, 1729], 1/(a*d - b*c)]];1(%o2)[a, b, [c, %pi, [%e, 1729], ---------]]a d - b c(%i3) L [7];1(%o3)--------a d - b c(%i4) L2 [3];1(%o4)[c, %pi, [%e, 1729], ---------]a d - b c(%i5) M: matrix ([%pi, 17], [29, %e]);[ %pi 17 ](%o5)[][ 29 %e ](%i6) M2: matrix ([[%pi, 17], a*d - b*c], [matrix ([1, a], [b, 7]), %e]);[ [%pi, 17] a d - b c ][](%o6)[ [ 1 a ]][ []%e][ [ b 7 ]](%i7) M [2][1];(%o7)29(%i8) M2 [2][1];[ 1 a ](%o8)[][ b 7 ]4.
Программные блоки — выражения. x : y означает присваивание y к x; значение выраженияприсваивания — y. block объединяет несколько выражений и последовательно их вычисляет;значение блока соответствует значению его последнего выражения.(%i1) (a: 42) - (b: 17);(%o1)25(%i2) [a, b];(%o2)[42, 17](%i3) block ([a], a: 42, a^2 - 1600) + block ([b], b: 5, %pi^b);5(%o3)%pi + 164(%i4) (if a > 1 then %pi else %e) + (if b < 0 then 1/2 else 1/7);1(%o4)%pi + 75.op возвращает оператор, args возвращает аргументы, atom определяет, является ли выражениеатомом:3(%i1) op (p + q);(%o1)+(%i2) op (p + q > p*q);(%o2)>(%i3) op (sin (p + q));(%o3)sin(%i4) op (foo (p, q));(%o4)foo(%i5) op (foo (p, q) := p - q);(%o5):=(%i6) args (p + q);(%o6)[q, p](%i7) args (p + q > p*q);(%o7)[q + p, p q](%i8) args (sin (p + q));(%o8)[q + p](%i9) args (foo (p, q));(%o9)[p, - q](%i10) args (foo (p, q) := p - q);(%o10)[foo(p, q), p - q](%i11) atom (p);(%o11)true(%i12) atom (p + q);(%o12)false(%i13) atom (sin (p + q));(%o13)false6.
Операторы и аргументы программных блоков. Одинарная кавычка указывает Maxima создатьвыражение, но отложить его вычисление. Мы еще рассмотрим это позже.(%i1)(%o1)(%i2)(%o2)(%i3)(%o3)(%i4)(%o4)(%i5)(%o5)(%i6)(%o6)3op (’(block ([a], a: 42, a^2 - 1600)));blockop (’(if p > q then p else q));ifop (’(for x in L do print (x)));mdoinargs (’(block ([a], a: 42, a^2 - 1600)));2[[a], a : 42, a - 1600]args (’(if p > q then p else q));[p > q, p, true, q]args (’(for x in L do print (x)));[x, L, false, false, false, false, print(x)]ВычислениеЗначение символа — выражение, связанное с этим символом.
Каждый символ имеет значение; еслизначение не задавалось, символ вычисляется сам в себя. Например, x имеет значение x, если символуне присваивалось значение.4Числа и строки совпадают со своими значениями.Выражение-не-атом вычисляется приблизительно таким образом:1. Вычисляется каждый аргумент оператора.2.
Если оператор связан с вызовом функции, то значение, возвращенное функцией, является значением выражения.Вычисление может проходить по-разному. Некоторые изменения уменьшают объем вычислений:1. Некоторые функции не вычисляют свои аргументы или часть из них, либо меняют ход вычисления аргументов.2. Одиночная кавычка 0 предотвращает вычисление:— 0a вычисляется как a.
Все другие значения a игнорируются.— 0f (a1, . . . , an) вычисляется в f (ev(a1), . . . , ev(an)). Таким образом, вычисляются аргументы,но f не вызывается.— 0(. . .) предотвращает вычисление любых выражений внутри (. . .).Некоторые изменения увеличивают объем вычислений:1. Две одиночные кавычки 00a вызывают дополнительное вычисление в момент обработки a.2.
ev(a) вызывает дополнительное вычисление a при каждом вычислении ev(a).3. Запись apply(f, [a1, . . . , an]) вызывает вычисление аргументов a1, . . . , an, даже если f ставит перед ними одиночные кавычки.4. define соответствует определению функции вроде :=, но вычисляет тело функции, в то времякак := откладывает вычисление.Рассмотрим, как вычисляются некоторые выражения.1.
Символ вычисляется сам в себя, если ему не присваивалось значение:(%i1) block (a: 1, b: 2, e: 5);(%o1)5(%i2) [a, b, c, d, e];(%o2)[1, 2, c, d, 5]2. Аргументы операторов вычисляются обычным путем (если вычисление не отложено тем илииным образом):(%i1)(%o1)(%i2)(%o2)(%i3)(%o3)(%i4)(%o4)block (x: %pi, y: %e);sin (x + y);x > y;x!;%e- sin(%e)%pi > %e%pi!53. Если оператор связан с вызовом функции, то значение, возвращенное функцией, является значением выражения (если вычисление не отложено); иначе вычисление дает другое выражение стем же оператором:(%i1)(%o1)(%i2)(%o2)(%i3)(%o3)(%i4)(%o4)foo (p, q) := p - q;foo(p, q) := p - qp: %phi;%phifoo (p, q);%phi - qbar (p, q);bar(%phi, q)4.
Некоторые функции откладывают вычисление аргументов, например, save, :=, kill:(%i1)(%o1)(%i2)(%o2)(%i3)(%o3)(%i4)(%o4)(%i5)(%o5)(%i6)(%o6)(%i7)(%o7)block (a: 1, b: %pi, c: x + y);y + x[a, b, c];[1, %pi, y + x]save ("tmp.save", a, b, c);tmp.savef (a) := a^b;bf(a) := af (7);%pi7kill (a, b, c);done[a, b, c];[a, b, c]5. Одиночная кавычка предотвращает вычисление, даже если оно должно производиться:(%i1)(%o1)(%i2)(%o2)(%i3)(%o3)(%i4)(%o4)(%i5)(%o5)(%i6)(%o6)foo (x, y) := y - x;foo(x, y) := y - xblock (a: %e, b: 17);17foo (a, b);17 - %efoo (’a, ’b);b - a’foo (a, b);foo(%e, 17)’(foo (a, b));foo(a, b)6.
Две одиночные кавычки вызывают дополнительное вычисление во время обработки выражения:6(%i1) diff (sin (x), x);(%o1)cos(x)(%i2) foo (x) := diff (sin (x), x);(%o2)foo(x) := diff(sin(x), x)(%i3) foo (x) := ’’(diff (sin (x), x));(%o3)foo(x) := cos(x)7.всякий раз вызывает дополнительное вычисление (сравните это с поведением для двух кавычек):ev(%i1)(%o1)(%i2)(%o2)(%i3)(%o3)(%i4)(%o4)(%i5)(%o5)(%i6)(%o6)8.9.block (xx: yy, yy: zz);[xx, yy];foo (x) := ’’x;foo (xx);bar (x) := ev (x);bar (xx);zz[yy, zz]foo(x) := xyybar(x) := ev(x)zzapplyвызывает вычисление аргументов, даже если перед ними стоят кавычки:(%i1)(%o1)(%i2)(%o2)(%i3)(%o3)(%i4)(%o4)(%i5)(%o5)(%i6)(%o6)(%i7)(%o7)block (a: aa, b: bb, c: cc);ccblock (aa: 11, bb: 22, cc: 33);33[a, b, c, aa, bb, cc];[aa, bb, cc, 11, 22, 33]apply (kill, [a, b, c]);done[a, b, c, aa, bb, cc];[aa, bb, cc, aa, bb, cc]kill (a, b, c);done[a, b, c, aa, bb, cc];[a, b, c, aa, bb, cc]defineвычисляет тело определения функции:(%i1) integrate (sin (a*x), x, 0, %pi);1 cos(%pi a)(%o1)- - ---------aa(%i2) foo (x) := integrate (sin (a*x), x, 0, %pi);7(%o2)foo(x) := integrate(sin(a x), x, 0, %pi)(%i3) define (foo (x), integrate (sin (a*x), x, 0, %pi));1 cos(%pi a)(%o3)foo(x) := - - ---------aa4УпрощениеПосле вычисления выражения Maxima пытается найти эквивалентное ему «более простое», для чегоприменяется ряд правил, связанных с условным понятием простоты.
Так, 1+1 упрощается до 2, x+x —до 2x, а sin(%pi) — до 0.Однако многие известные тождества не применяются автоматически. Например, не используютсяформулы двойного угла для тригонометрических функций и не производится приведение дробей видаa/b + c/b → (a + c)/b. Для применения тождеств существуют отдельные функции.Упрощение всегда применяется, если не было явно отложено, даже в том случае, когда выражениене вычисляется.tellsimpafter вводит пользовательские правила упрощения.Рассмотрим несколько примеров.1. Знак кавычки откладывает вычисление, но не упрощение; если для глобального флага simpустановлено false, то упрощение не производится, но производится вычисление:(%i1) ’[1 + 1, x + x, x * x, sin (%pi)];2(%o1)[2, 2 x, x , 0](%i2) simp: false$(%i3) block ([x: 1], x + x);(%o3)1 + 12.
Некоторые тождества не применяются автоматически. expand, ratsimp, trigexpand, demoivre —примеры функций, применяющих тождества:(%i1) (a + b)^2;(%o1)(%i2) expand (%);(%o2)(%i3) a/b + c/b;(%o3)(%i4) ratsimp (%);(%o4)(%i5) sin (2*x);(%o5)(b + a)222b + 2 a b + ac a- + b bc + a----bsin(2 x)8(%i6) trigexpand (%);(%o6)(%i7) a * exp (b * %i);(%o7)(%i8) demoivre (%);(%o8)52 cos(x) sin(x)%i ba %ea (%i sin(b) + cos(b))apply, map и lambda1.создает и вычисляет выражение.