Чтение онлайн

ЖАНРЫ

Maple 9.5/10 в математике, физике и образовании

Дьяконов Владимир Павлович

Шрифт:

> has(2*sin(x), `/`);

false

> has(2*sin(x),3-1);

true

Следует отметить, что соответствие подобъекта выражения указанному подобъекту понимается в математическом смысле. Так, в последнем примере подобъект «3-1», если понимать его буквально, в выражении 2*sin(x) не содержится, но Maple-язык учитывает соответствие 3-1=2, и потому функция has в последнем примере возвращает true.

Функция has может использоваться для выявления той или иной математической операции, оператора или функции. Однако надо соблюдать определенные правила, поскольку выражение, анализируемое функцией has

оценивается и исполняется. Внимательно проанализируете приведенные ниже примеры:

> has(2*sin(2),sin);

true

> has(2*sin(2),'sin');

true

> has(2*sin(2.), 'sin');

false

Здесь надо учесть, что выражение 2*sin(2) после оценки и исполнения не меняется, поскольку Maple, при целочисленном аргументе функции синуса, не вычисляет ее и вычисленное выражение совпадает с исходным и содержит функцию синуса. Однако sin(2.) уже вычисляется и становится числом. Именно поэтому в последнем примере функция sin уже не обнаруживается. Подобное имеет место и в ряде других примеров с функцией интегрирования:

> has('int(х^2,х)',int);

true

> has(int(х^2,х),int);

false

> int(х^2,х);

> has(int(х^2,х), х^3/3);
rue

Столь же поучителен пример с идентификацией функции интегрирования. Так, has(int(х^2, х), int); дает false, поскольку интеграл оценивается и вычисляется, что ведет к подмене выражения на х^3/3 уже не содержащего признаков интегрирования. Это и поясняют два последних примера, в которых вычислено значение интеграла и функция has дает значение true для значения интеграла. В тоже время заключение int(x^2,x) в апострофы позволяет найти имя функции интегрирования int, поскольку исходное выражение в этом случае представлено в неисполняемой форме и содержит обращение к этой функции.

Еще одна иногда полезная функция контроля выражений depends(f,x) возвращает true, если х входит в f и false в противном случае. При этом надо также помнить, что функция (выражение) оценивается и исполняется. Следующие примеры хорошо иллюстрируют сказанное:

> depends(2+2*sin(x),х);

true

> depends(int(х^2,х),х);

true

> depends(int(х^2,х=0..1), х)

false

В последнем примере вычисленное выражение это уже просто число, в нем х не содержится, а потому и получено значение false.

3.6. Работа с подстановками

3.6.1. Функциональные преобразования подвыражений

Нередко бывает необходимо заменить некоторое подвыражение в заданном выражении на функцию от этого подвыражения, т.е. осуществить подстановку. Средства для обеспечения подстановок есть во всех СКМ. Так, для этого в Maple 9.5 можно воспользоваться функцией applyop:

• applyop(f, i, е) — применяет функцию f к i-му подвыражению выражения е;

• applyop(f, i, е…, xk,…) — применяет функцию f к i-му подвыражению выражения е с передачей необязательных дополнительных аргументов xk.

Ниже даны примеры применения этой функции (здесь и далее см. файл subs):

> restart;applyop(sin,2,a+x);

a + sin(x)

> applyop(f,1,g,2,a+b);

f(g, 2, a + b)

> applyop(f,{2,3},a+x+b);

a+f(x)+f(b)

> applyop(f,{1,2},x/y+z);

> р:=у^2-2*у-3;

p:= y²-2y -3

> applyop (f, 2,p);

p:= y² -2y -3

> applyop{f,[2, 3 ], p);

y²+f(-2y)-3

> applyop(f,{[2,1],3},p);

y² + f(-2y) + f(-3)

> applyop(abs,{[2,1],3},p);

y²+2y+3

3.6.2.

Функциональные преобразования элементов списков

Еще две функции, реализующие операции подстановки, указаны ниже:

map(fcn, expr, arg2, ..., argn)

map2(fcn, arg1, expr, arg3,..., argn)

Здесь fcn — процедура или имя, expr — любое выражение, argi — необязательные дополнительные аргументы для fcn.

Первая из этих функций позволяет приложить fcn к операндам выражения expr. Приведенные ниже примеры иллюстрируют использование функции map:

> f:=х->х^2;

f: = х→х²

> map(f, [1,2,3]);

[1, 4, 9]

> map(f,[x,y,z]);

[x², y², z²]

> map(х->х^n, [1,2,3]);

[1, 2n, 3n]

> L:=[1,2,3,4];

L:=[1, 2, 3, 4]

> map(proc(x,y) x*y+1 end,[1, 2, 3, 4], 2);

[3, 5, 7, 9]

> map(int,L,x);

[x, 2x, 3x, 4x]

> map(F, [1, 2, 3], x, y, z);

[F(3, x, y, z), F(3, x, y, z), F(3, x, у, z)]

Из этих примеров нетрудно заметить, что если второй параметр функции map — список, то функция (первый параметр) прикладывается к каждому элементу списка, так что возвращается также список. Из последнего примера видно, что если за вторым параметром идет перечисление аргументов, то они включаются в список параметров функции.

Функции map2 отличается иным расположением параметров. Ее действие наглядно поясняют следующие примеры:

> map2(w, g, {а,b,с});

{w(g, a), w(g, b), w(g, с)}

> map2(op,1,[a+b+i,c+d+k, e+f+j]);

[а, с, е]

> map2(ор,3,[a+b+i,c+d+k,e+f+j]);

[i, k, j]

> map2(diff,[sin(х),cos(х),x^n],х);

При решении некоторых задач оптимизации возникает необходимость в создании выражений с множителями Лагранжа. Для этого можно использовать список из трех элементов выражения, заключенный в угловые скобки:

Поделиться с друзьями: