способами, в том числе из меню — на рис. 1.4 сверху видно раскрывающееся меню системы (для позиции View — вид).

1.2.4. Понятие о символьных (аналитических) вычислениях

Символьные операции — это то, что кардинально отличает системы компьютерной алгебры (СКА) от систем для выполнения численных расчетов. При символьных операциях, называемых также аналитическими, задания на вычисление задаются в виде символьных (формульных) выражений и результаты вычислений также получаются в символьном виде. Численные результаты при этом являются частными случаями результатов символьных вычислений.

К примеру, попытка вычислить в общем виде выражение sin(x)²+cos(x)²=1 с помощью численных математических систем или программ на обычных языках программирования к успеху не приведет. Вместо ожидаемого результата появится сообщение об ошибке вида: «Переменная х не определена!».

СКА не только не боятся применения неопределенных переменных, но и предпочитают работать с ними. Зададим, к примеру, в Maple 9.5 квадратное уравнение, присвоив его выражение переменной eq (файл solve):

> eq:=a*x^2+b*x+c=0;

eq:= ах² + bx + с = 0

Проверим статус переменной х.

> х;

x

Переменная просто повторена в выводе, что и указывает на то, что она неопределенная. Теперь попробуем решить уравнение, используя функцию solve:

> solve(eq,x);

Получено хорошо известное решение для квадратного уравнения. А теперь попробуем найти аналитическое решение для других переменных a, b и с:

> solve(eq,а);

> solve(eq,b);

> solve(eq,с);

-ax² - bx

Решение прошло успешно — во всех случаях пoлvчeны аналитические выражения для решения. Они более тривиальные, чем решение eq относительно х.

Не следует считать решения в аналитическом виде ограничением СКА. Большинство СКА, в том числе и Maple 9.5/10 легко решают подавляющее большинство задач и в численном виде и являются универсальными СКМ. Так, определив переменные а, b и с, присвоением им некоторых значений

> а:=2:b:=3:с:=4:

получим решение в численном виде:

> solve(eq,х);

Оно получено в виде комплексно-сопряженных чисел, в них I это мнимая единица, т. е. √- 1.

1.2.5. Данные о скорости вычислений в Maple 9.5

В последних реализациях Maple много внимания было уделено повышению скорости вычислений. Система Maple 8, к примеру, вычисляла факториал максимально возможного числа 32000, затрачивая на это (на ПК с процессором Pentium III 600 МГц) 2,784 с [22]. A Maple 9.5 на современном ПК с процессором Pentium 4 Hyper Threading 2,6 ГГц справляется с этим в более чем в двадцать раз быстрее (файл bench):

> restart: t := time(): 32000!: TIME-time()-t;

TIME = 0.125

Разумеется, выигрыш в скорости в данном случае обусловлен как применением более скоростного компьютера, так и системы Maple 9.5. К примеру, на том же компьютере Maple 8 выдала результат за 0,583 с, a Maple 7 — 0,610 с. Таким образом, скорость вычисления у Maple 9.5 в данном случае (при равных аппаратных возможностях) оказалась выше более чем вдвое. Любопытно, что при повторном выполнении этой команды время выполнения было показано нулевым, что свидетельствует об эффективном кэшировании программных кодов.

Обратите внимание на примененный полезный прием оценки скорости вычислений с помощью функции 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 затрачивает чуть меньше трех сотых секунды на каждое вычисление интеграла:

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

0

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

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