> F:=NI(expr, х);

F:=x→x-½(ln(x²) - .5)х

>> х0:=0.2;

х0:= 2

> to 8 do x0:=F(x0);od;

x0:= .55718875825 x0:= 1.034437603 x0:= 1.258023119 x0:= 1.283760340 x0:= 1.284025389 x0:= 1.284025417 x0:= 1.284025416 x0:= 1.284025417

Здесь итерационная формула имеет (и вполне естественно) уже другой вид, но сходимость к корню также обеспечивается за несколько итерации.

Возможна и иная форма задания итерационной процедуры с применением оператора дифференцирования D и заданием исходной функции также в виде процедуры (файл р9):

> MI:=proc(f::procedure)

> (х->х)-eval(f)/D(eval(f));

> end;

MI := proc(f::procedure) (x→x) -eval(f)/D(eval(f)) end proc

> g:=x->x-cos(x);

g := x→x - cos(x)

> SI:=MI(g);

> x0:=0.1;

x0:=.1

> to 6 do x0:=SI(x0) od;

x0:= .9137633858 x0:= .7446642419 x0:= .7390919660 x0:= .7390851333 x0:= .7390851332 x0:= .7390851332

Вообще говоря, в программных процедурах можно использовать любые операторы и функции, присущие Maple-языку, в том числе и те, которые реализуют символьные вычисления. Это открывает широкий простор для разработки новых процедур и функций, обеспечивающих выполнение символьных операций.

10.6.2. Вычисление интеграла по известной формуле

Рассмотрим следующий пример (файл р9):

> Int(e^x*x^n,x)=int(e^x*x^n,x);

∫exxndх = -(-1)(-n)ln(e)(-1-n)n(-1)nln(е)nnГ(n)(-х ln(е))(-n) - хn(-1) n ln(е)n е(хln(e)) - хn(-1)nln(е) nn(-х ln(е))(-n)Г(n, -x ln(е)))

Ранние версии системы Maple не брали этот интеграл, поскольку он не имеет аналитического представления через обычные функции. Maple блестяще вычисляет этот «крепкий орешек», но полученное выражение довольно сложно.

Из математики известно, что такой интеграл может быть представлен в следующем виде:

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

> IntExpMonomial:=proc(n::anything,х::name)

local i;

n!*exp(x)*sum(((-1)^(n-i)*х^i)/i!,i=0..n);

end;

 IntExpMonomial := proc(n::anything, x::name)

 local i;

  n! × exp(x) × sum((-1)^(n-i) × x^i/i!,i=-..n)

 end proc

Проверим ее в работе:

> IntExpMonomial(3,х);

> IntExpMonomial(5,x);

> IntExpMonomial(n, x);

Результат в аналитическом виде довольно прост для данного интеграла с конкретным значением n. Более того, мы получили несколько иной результат и для n в общем случае. Но точен ли он? Для ответа на этот вопрос продифференцируем полученное выражение:

> diff(%,х);

Результат дифференцирования выглядит куда сложнее, чем вычисленный интеграл. Однако с помощью функции simplify в Maple 9 он упрощается к подынтегральной функции:

> simplify(%);

еx хn

Maple 9.5 выдал более замысловатое выражение:

(-1)n еx (-x)n

Это говорит о том, что задача вычисления заданного интеграла в аналитической форме действительно решена. А что касается громоздкости результатов, так ведь системы, подобные Maple, для того и созданы, чтобы облегчить нам работу с громоздкими вычислениями — в том числе аналитическими.

10.6.3. Вложенные процедуры и интегрирование по частям

Теперь мы подошли к важному моменту, о котором читатель наверняка уже давно догадался — в составляемых пользователям процедурах можно использовать ранее составленные им (или кем-то еще) другие процедуры! Таким образом, Maple-язык позволяет реализовать процедуры, вложенные друг в друга.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату