> F:=NI(expr, х);
>> х0:=0.2;
> to 8 do x0:=F(x0);od;
Здесь итерационная формула имеет (и вполне естественно) уже другой вид, но сходимость к корню также обеспечивается за несколько итерации.
Возможна и иная форма задания итерационной процедуры с применением оператора дифференцирования D и заданием исходной функции также в виде процедуры (файл р9):
> MI:=proc(f::procedure)
> (х->х)-eval(f)/D(eval(f));
> end;
> g:=x->x-cos(x);
> SI:=MI(g);
> x0:=0.1;
> to 6 do x0:=SI(x0) od;
Вообще говоря, в программных процедурах можно использовать любые операторы и функции, присущие Maple-языку, в том числе и те, которые реализуют символьные вычисления. Это открывает широкий простор для разработки новых процедур и функций, обеспечивающих выполнение символьных операций.
10.6.2. Вычисление интеграла по известной формуле
Рассмотрим следующий пример (файл р9):
> Int(e^x*x^n,x)=int(e^x*x^n,x);
Ранние версии системы Maple не брали этот интеграл, поскольку он не имеет аналитического представления через обычные функции. Maple блестяще вычисляет этот «крепкий орешек», но полученное выражение довольно сложно.
Из математики известно, что такой интеграл может быть представлен в следующем виде:
Используя эту формулу, мы можем создать простую процедуру для численного и аналитического вычисления данного интеграла.
> IntExpMonomial:=proc(n::anything,х::name)
local i;
n!*exp(x)*sum(((-1)^(n-i)*х^i)/i!,i=0..n);
end;
local i;
n! × exp(x) × sum((-1)^(n-i)
end proc
Проверим ее в работе:
> IntExpMonomial(3,х);
> IntExpMonomial(5,x);
> IntExpMonomial(n, x);
Результат в аналитическом виде довольно прост для данного интеграла с конкретным значением
> diff(%,х);
Результат дифференцирования выглядит куда сложнее, чем вычисленный интеграл. Однако с помощью функции simplify в Maple 9 он упрощается к подынтегральной функции:
> simplify(%);
Maple 9.5 выдал более замысловатое выражение:
Это говорит о том, что задача вычисления заданного интеграла в аналитической форме действительно решена. А что касается громоздкости результатов, так ведь системы, подобные Maple, для того и созданы, чтобы облегчить нам работу с громоздкими вычислениями — в том числе аналитическими.
10.6.3. Вложенные процедуры и интегрирование по частям
Теперь мы подошли к важному моменту, о котором читатель наверняка уже давно догадался — в составляемых пользователям процедурах можно использовать ранее составленные им (или кем-то еще) другие процедуры! Таким образом, Maple-язык позволяет реализовать процедуры, вложенные друг в друга.