Maple 9.5/10 в математике, физике и образовании (Дьяконов) - страница 14

Обратите внимание на примененный полезный прием оценки скорости вычислений с помощью функции time() без аргумента. Можно подыскать и куда более эффектные частные примеры. Например, сумма 100000 членов 1/k^2 в Maple 8 вычислялась на ПК автора с процессором Pentium 4 НТ 2,6 ГГц за время около 256 с:

>> t := time():add(1/k^2, k=1..100000): TIME=time()-t;

TIME = 255.688

А в Maple 9.5 тот же пример дал время меньше 7 с:

>> t := time() :add(1/k^2, k=1..100000): TIME=time()-t;

TIME = 6.500

В данном случае резкое ускорение вычислений обусловлено применением новой библиотеки целочисленной арифметики — GNU Multiple Precision (GMP).

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

>> 200!+123456789;

031904170324062351700858796178922222789623703897374720 \
000000000000000000000000000000000000000123456789

>> %-200!;

123456789

Но Maple 9.5 идет еще дальше — почти мгновенно (особенно при повторе примера) система вычисляет факториал 100000:

>> t : = time():bigFactorial := 100000!:TIME=time()-t;

TIME = .609

>> t := time():bigFactorial := 100000!:TIME=time()-t;

TIME = 0

Заметно повышена и скорость многих сложных вычислений. Например, на вычисление внушительного определенного интеграла

>> Int( х^n*ехр(-х^n) + Sum( cos(k*x)/k, k=1..n), х=0..1);


в стократно повторяющемся цикле, Maple 9.5 затрачивает чуть меньше трех сотых секунды на каждое вычисление интеграла:

>> t := time():

>for i from 1 to 100 do

> evalf(Int(х^i*ехр(-x^i) + add(cos(k*x)/k, k=0..i), x=0..1)):

>end do:

>TIME=time()-t;

TIME = 2.922

В следующем примере вычисляется время, которое нужно для создания большой матрицы случайных чисел с помощью пакета расширения LinearAlgebra:

>> М := LinearAlgebra:-RandomMatrix(500);


>> timeconsumed = time(type(M, 'Matrix'(algebraic)));

time_consumed = 0.031

Повышение скорости вычислений обеспечено усовершенствованием алгоритмов численных вычислений (например, GNU) и применением подпрограмм национальной группы алгоритмов NAG — общепризнанных в области быстрых вычислений при решении задач линейной алгебры. Кстати, выше была приведена первая программа на Maple-языке программирования, использующая конструкцию цикла.

Читатели книги [23], описывающей предшествующую реализацию Maple 9, обратят внимание на то, что данные по скорости выполнения операций у Maple 9.5 лишь немного отличаются от приведенных для Maple 9, причем в ту или иную сторону. Это позволяет считать их практически равноценными.