Роберт Додиер - Коротко о Maxima, страница 2
Описание файла
PDF-файл из архива "Роберт Додиер - Коротко о Maxima", который расположен в категории "". Всё это находится в предмете "техника эксперимента" из 8 семестр, которые можно найти в файловом архиве МПУ. Не смотря на прямую связь этого архива с МПУ, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "техника эксперимента" в общих файлах.
Просмотр PDF-файла онлайн
Текст 2 страницы из PDF
Аргументы выражения всегда вычисляются (даже еслибы они не вычислялись при других обстоятельствах):apply(%i1) apply (sin, [x * %pi]);(%o1)sin(%pi x)(%i2) L: [a, b, c, x, y, z];(%o2)[a, b, c, x, y, z](%i3) apply ("+", L);(%o3)z + y + x + c + b + a2.создает и вычисляет выражение для каждого элемента списка аргументов. Аргументы выражения всегда вычисляются (даже, если бы они не вычислялись при других обстоятельствах).В качестве результата возвращается список:map(%i1) map (foo, [x, y, z]);(%o1)[foo(x), foo(y), foo(z)](%i2) map ("+", [1, 2, 3], [a, b, c]);(%o2)[a + 1, b + 2, c + 3](%i3) map (atom, [a, b, c, a + b, a + b + c]);(%o3)[true, true, true, false, false]3.создает лямбда-выражение (безымянную функцию). Лямбда-выражение может использоваться в некоторых случаях как обычная функция.
lambda не вычисляет тело функции:lambda(%i1)(%o1)(%i2)(%o2)(%i3)(%o3)(%i4)(%o4)6f: lambda ([x, y], (x + y)*(x - y));lambda([x, y], (x + y) (x - y))f (a, b);(a - b) (b + a)apply (f, [p, q]);(p - q) (q + p)map (f, [1, 2, 3], [a, b, c]);[(1 - a) (a + 1), (2 - b) (b + 2), (3 - c) (c + 3)]Встроенные типы объектовОбъект представляется в виде выражения. Как и другие выражения, объект содержит оператор и егоаргументы.Основные встроенные типы объектов — списки, матрицы и множества.96.1Списки1. Список задается в виде [a, b, c].2.
В списке L L[i] — i-й элемент. L[1] — первый элемент.3. map(f , L) применяет f к каждому элементу L.4. apply(” + ”, L) — сумма всех элементов L.5. for x in L do expr вычисляет expr для каждого элемента L.6. length(L) — число элементов L.6.2Матрицы1. Матрица задается в виде matrix(L1, . . . , Ln), где L1, . . . , Ln — списки элементов строк.2. Если M — матрица, то M [i, j] или M [i][j] — ее (i, j)-й элемент. M [1, 1] — элемент в верхнем левомуглу.3. Оператор .
представляет некоммутативное умножение. M.L, L.M и M.N — некоммутативныепроизведения, где L — список, а M и N — матрицы.4. transpose(M ) — транспонированная матрица M T .5. eigenvalues(M ) возвращает собственные значения M .6. eigenvectors(M ) возвращает собственные векторы M .7. length(M ) возвращает число строк M .8. length(transpose(M )) возвращает число столбцов M .6.3Множества1. Maxima работает с явно заданными конечными множествами. Множества — не то же самое, чтои списки, и преобразование множества в список и наоборот должно производиться в явном виде.2.
Множество задается в виде set(a, b, c, . . .), где a, b, c, . . . — его элементы.3. union(A, B) — объединение множеств A и B .4. intersection(A, B) — пересечение множеств A и B .5. cardinality(A) — число элементов множества A.7Типичные задачи7.1Определение функции1. Функция определяется оператором :=, при этом вычисление тела функции откладывается.В примере ниже diff пересчитывается при каждом вызове функции. Аргумент подставляетсявместо x, и вычисляется результирующее выражение. Когда аргумент представляет собой нечтоотличное от символа, происходит ошибка: для foo(1) Maxima пытается вычислить diff (sin(1)2, 1).10(%i1) foo (x) := diff (sin(x)^2, x);2(%o1)foo(x) := diff(sin (x), x)(%i2) foo (u);(%o2)2 cos(u) sin(u)(%i3) foo (1);Non-variable 2nd argument to diff:1#0: foo(x=1)-- an error.2.определяет функцию и вычисляет ее тело.В следующем примере diff вычисляется единожды (при определении), поэтому foo(1) не вызывает ошибки:define(%i1) define (foo (x), diff (sin(x)^2, x));(%o1)foo(x) := 2 cos(x) sin(x)(%i2) foo (u);(%o2)2 cos(u) sin(u)(%i3) foo (1);(%o3)2 cos(1) sin(1)7.2Решение уравнений(%i1) eq_1: a * x + b * y + z = %pi;(%o1)z + b y + a x = %pi(%i2) eq_2: z - 5*y + x = 0;(%o2)z - 5 y + x = 0(%i3) s: solve ([eq_1, eq_2], [x, z]);(b + 5) y - %pi(b + 5 a) y - %pi(%o3) [[x = - ---------------, z = -----------------]]a - 1a - 1(%i4) length (s);(%o4)1(%i5) [subst (s[1], eq_1), subst (s[1], eq_2)];(b + 5 a) y - %pi a ((b + 5) y - %pi)(%o5) [----------------- - ------------------- + b y = %pi,a - 1a - 1(b + 5 a) y - %pi (b + 5) y - %pi----------------- - --------------- - 5 y = 0]a - 1a - 1(%i6) ratsimp (%);(%o6)[%pi = %pi, 0 = 0]7.3Интегрирование и дифференцированиеintegrateвычисляет определенные и неопределенные интегралы:11(%i1) integrate (1/(1 + x), x, 0, 1);(%o1)log(2)(%i2) integrate (exp(-u) * sin(u), u, 0, inf);1(%o2)2(%i3) assume (a > 0);(%o3)[a > 0](%i4) integrate (1/(1 + x), x, 0, a);(%o4)log(a + 1)(%i5) integrate (exp(-a*u) * sin(a*u), u, 0, inf);1(%o5)--2 a(%i6) integrate (exp (sin (t)), t, 0, %pi);%pi/[sin(t)(%o6)I%edt]/0(%i7) ’integrate (exp(-u) * sin(u), u, 0, inf);inf/[- u(%o7)I%esin(u) du]/0diffвычисляет производные и дифференциалы:(%i1)(%o1)(%i2)(%o2)(%i3)(%o3)(%i4)diff (sin (y*x));x cos(x y) del(y) + y cos(x y) del(x)diff (sin (y*x), x);y cos(x y)diff (sin (y*x), y);x cos(x y)diff (sin (y*x), x, 2);2(%o4)- y sin(x y)(%i5) ’diff (sin (y*x), x, 2);2d(%o5)--- (sin(x y))2dx127.4Построение графиковplot2dстроит двумерные графики:(%i1) plot2d (exp(-u) * sin(u), [u, 0, 2*%pi]);(%o1)(%i2) plot2d ([exp(-u), exp(-u) * sin(u)], [u, 0, 2*%pi]);(%o2)(%i3) xx: makelist (i/2.5, i, 1, 10);(%o3) [0.4, 0.8, 1.2, 1.6, 2.0, 2.4, 2.8, 3.2, 3.6, 4.0](%i4) yy: map (lambda ([x], exp(-x) * sin(x)), xx);(%o4) [0.261034921143457, 0.322328869227062, .2807247779692679,.2018104299334517, .1230600248057767, .0612766372619573,.0203706503896865, - .0023794587414574, - .0120913057698414,- 0.013861321214153](%i5) plot2d ([discrete, xx, yy]);(%o5)(%i6) plot2d ([discrete, xx, yy], [gnuplot_curve_styles, ["with points"]]);(%o6)См.
также plot3d.7.5saveСохранение и загрузка файловзаписывает выражения в файл:(%i1) a: foo - bar;(%o1)(%i2) b: foo^2 * bar;foo - bar2(%o2)bar foo(%i3) save ("my.session", a, b);(%o3)my.session(%i4) save ("my.session", all);(%o4)my.sessionloadсчитывает выражения из файла.(%i1) load ("my.session");(%o4)my.session(%i5) a;(%o5)foo - bar(%i6) b;2(%o6)bar fooСм.
также stringout и batch.138Программирование под MaximaСуществует одно пространство имен, содержащее все символы Maxima. Другое пространство именсоздать нельзя.Все переменные глобальны, если не определены локально — в функциях, лямбда-выражениях иблоках.Значением переменной считается то, что было присвоено в последний раз, в явном виде, либочерез присваивание значения локальной переменной в блоке, функции или лямбда-выражении. Этаконцепция известна как динамическая область видимости.Если переменная является локальной внутри функции, лямбда-выражения или блока, ее значениелокально, но остальные свойства (заданные declare) глобальны. Функция local делает переменнуюлокальной в отношении всех свойств.По умолчанию, определение функции глобально, даже если оно содержится внутри функции, лямбдавыражения или блока.
local(f ), f (x) := . . . создает локальное определение функции.trace(foo) указывает Maxima печатать сообщение при входе в функцию foo и выходе из нее.Рассмотрим некоторые примеры программирования под Maxima.1. Все переменные глобальны, если не определены локально — в функциях, лямбда-выражениях иблоках:(%i1)(%o1)(%i2)(%o2)(%i3)(%o3)(%i4)(%o4)(%i5)(%o5)(%i6)(%o6)(x: 42, y: 1729, z: foo*bar);bar foof (x, y) := x*y*z;f(x, y) := x y zf (aa, bb);aa bar bb foolambda ([x, z], (x - z)/y);x - zlambda([x, z], -----)yapply (%, [uu, vv]);uu - vv------1729block ([y, z], y: 65536, [x, y, z]);[42, 65536, z]2. Значением переменной считается то, что было присвоено в последний раз, в явном виде, либочерез присваивание значения локальной переменной:(%i1)(%o1)(%i2)(%o2)(%i3)(%o3)(%i4)(%o4)foo (y) := x - y;x: 1729;foo (%pi);foo(y) := x - y17291729 - %pibar (x) := foo (%e);bar(x) := foo(%e)14(%i5) bar (42);(%o5)942 - %eLisp и MaximaЗаписьexpr вычисляет expr в интерпретаторе Lisp.
Эта запись распознается в строке ввода ифайлах, обрабатываемых batch, но не load.Символ foo в Maxima соответствует символу $foo в Lisp, а символ Lisp foo соответсвует символуMaxima ?foo.(defun $foo (a) (. . .)) задает функцию Lisp foo, вычисляющую свои аргументы. Из Maximaфункция вызывается записью foo(a).(defmspec $foo (e) (.
. .)) задает функцию Lisp foo, откладывающую вычисление аргументов.Из Maxima функция вызывается записью foo(a). Аргументами $foo являются (cdr e), а (caar e) всегдасовпадает с $foo.Запись (mfuncall 0$foo a1 . . . an) вызывает из Lisp функцию foo, определенную в Maxima.Обратимся к Lisp из Maxima и наоборот.1. Записьexpr вычисляет expr в интерпретаторе Lisp::lisp:lisp:lisp:lisp(%i1) (aa + bb)^2;2(bb + aa)(%o1)(%i2) :lisp $%((MEXPT SIMP) ((MPLUS SIMP) $AA $BB) 2)2.:lisp(defun $foo (a) (. . .))задает функцию Lisp foo, вычисляющую свои аргументы:(%i1) :lisp (defun $foo (a b) ‘((mplus) ((mtimes) ,a ,b) $%pi))$FOO(%i1) (p: x + y, q: x - y);(%o1)x - y(%i2) foo (p, q);(%o2)(x - y) (y + x) + %pi3.:lispтов:(defmspec $foo (e) (.
. .))задает функцию Lisp foo, откладывающую вычисление аргумен-(%i1) :lisp (defmspec $bar (e) (let ((a (cdr e))) ‘((mplus) ((mtimes) ,@a) $%pi)))#<CLOSURE LAMBDA (E) (LET ((A (CDR E))) ‘((MPLUS) ((MTIMES) ,@A) $%PI))>(%i1) bar (p, q);(%o1)p q + %pi(%i2) bar (’’p, ’’q);(%o2)p q + %pi4.
Запись (mfuncall 0$foo a1 . . . an) вызывает из Lisp функцию foo, определенную в Maxima:15(%i1) blurf (x) := x^2;2(%o1)blurf(x) := x(%i2) :lisp (displa (mfuncall ’$blurf ’((mplus) $grotz $mumble)))2(mumble + grotz)NIL16.