Для иллюстрации применения
где
Вначале подготовим процедуру IntExpMonomialR, реализующую вычисление уже рассмотренного ранее интеграла, но рекурсивным способом (файл р9):
> IntExpMonomialR:=proc(n::nonnegint,х::name)
local i;
if n=0 then RETURN(exp(x)) fi;
х^n*ехр(x)-n*IntExpMonomialR(n-1, x);
end;
local i;
if n = 0 then RETURN(exp(x)) end if;
x^
end proc
Проверим ее в работе:
> IntExpMonomialR(4, х);
> collect(%,exp(х));
Теперь составим процедуру для вычисления по частям нашего интеграла:
> IntExpPolynomial:=proc(р::polynom,x::name) local i, result;
### WARNING: degree(0,x) now returns -infinity
result:=add(coeff(p,x,i)*IntExpMonomialR(i,x),i=0..degree(p, x));
collect(result,exp(x));
end;
local i,
end proc
В этой процедуре имеется обращение к ранее составленной процедуре IntExpMonomialR. Обратите внимание на то, что в процедуре введено предупреждение об определенных проблемах, связанных с использованием функции degree (сообщение начинается с символов ###). Тем не менее, процедура работает, в чем убеждают, по крайней мере, следующие примеры:
> р:=(х^2+1)*(1-3*х);
> expand(р);
> int(р*ехр(х),х);
> IntExpPolynomial(р,х);
> IntExpPolynomial(р,х);
10.7. Дополнительные возможности Maple-языка
10.7.1. Переназначение определений
В большинстве случаев Maple-язык использует достаточно длинные идентификаторы для своих определений, например функций. Однако с помощью функции alias можно изменить любое определение на другое, если оно кажется пользователю более удобным. Функция alias записывается в виде
alias(e1, е2, ..., eN)
где е1, е2, …, eN — ноль или более равенств.
Эта функция возвращает список переназначений и осуществляет сами переназначения. Например, для замены имени функции BesselJ на более короткое имя BJ достаточно параметром функции alias записать BJ=BesselJ:
> alias(ВJ=BesselJ);
> [BJ(0,1.),BesselJ(0,1.)];
Можно также переназначить функцию пользователя:
> alias(Fx=F(x));
> diff(F(x),x);
> int(F(x),x=a..b);
Для отмены переназначения, например BJ, используется та же функция alias с повтором переназначения:
> alias(BJ=BJ);
> BJ(0,1.);
Обратите внимание на то, что BJ исчезло из списка переназначений и функция BJ(0,1.) уже не вычисляется, поскольку ее больше нет.
10.7.2. Модули
name := module()
export eseq; local lseq; global gseq;