Развитие вычислительной техники начиналось с автоматизации выполнения арифметических действий. Вместе с тем известно, что компьютеры могут успешно оперировать математическими символами. Область вычислительной математики, связанная с аналитическими преобразованиями и получившая название компьютерной алгебры, в настоящее время развивается и получает широкое распространение в различных направлениях науки и образования. Основным объектом, над которым производит действие компьютер, является аналитическое (символьное) выражение, организованное и преобразуемое по заданным логическим правилам. Сегодня возможно компьютерное интегрирование и дифференцирование символьных выражений, перестановки и перегруппировки членов, приведение подобных членов, подстановки в выражения с последующим их преобразованием.
Очевидно, что известные системы программирования (Паскаль, СИ, Бейсик и т.п.) мало пригодны для анализа и преобразования символьной информации. Для этих целей созданы и развиваются специальные системы аналитических преобразований, которые можно разделить на универсальные, специализированные и общего назначения. Наибольшей популярностью пользуется универсальная система символьных вычислений REDUCE, автором которой является профессор А.Хиен. Система Reduce написана на языке высокого уровня ЛИСП.
|
|
Язык Reduce, составляющий ядро системы, трансляторы для которого разработаны для всех распространенных типов ЭВМ, предназначен прежде всего для проведения вычислении в аналитическом виде. Язык «знает» все операции алгебры с многочленами, приведением подобных членов, раскрытием скобок; все базовые элементарные функции, в том числе и в комплексной форме, ряд других функции; широкий набор операции над матрицами, включающий как входящие в обычные вузовские программы, так и выходящие за их пределы (например, функции от матриц); очень хорошо дифференцирует и несколько хуже вычисляет первообразные (но все же значительно лучше, чем большинство студентов, изучивших стандартный курс интегрального исчисления); умеет делать и ряд других действий.
Насколько это существенно для решения некоторых задач, показывает следующий пример. В одной из диссертаций по физике магнитных явлений диссертант (дело было в середине 50-х годов) потратил несколько лет на решение в принципе несложной задачи, требовавшей, однако, проведения совершенно фантастического (для человека) количества операторных коммутаций и последующего приведения подобных членов. Каждое отдельное неразрывное преобразование требовало, по-видимому, нескольких месяцев неустанной работы при максимальной аккуратности и напряжении. Поручить же эту работу ЭВМ было невозможно, так как в те времена языков аналитических преобразований в практически пригодном виде не существовало. О независимой проверке работы не приходилось и думать - это потребовало бы от другого человека не менее года работы. Примерно через 15 лет все эти выкладки были проделаны на ЭВМ в системе Reduce за несколько дней; оказалось, что автор диссертации почти все выкладки сделал безошибочно.
|
|
Разумеется, язык «умеет» производить и численные операции, причем его арифметика имеет произвольную точность, не привязанную к способу представления чисел с плавающей запятой в регистрах процессора и ячейках ОЗУ. Получить при вычислении 20 или 50 значащих цифр в результате для Reduce вполне возможно.
В системе Reduce программа записывается и выполняется по предложениям, каждое из которых представляет собой последовательность символов. Предложение завершается одним из символов:; (точка с запятой), п (кружок с черточками). Если предложение оканчивается знаком ";", то результат его выполнения выводится на экран дисплея или печатающее устройство. В случае знака ◘ вывод не происходит.
В системе Reduce каждая переменная имеет имя и значение. Если переменной не присвоено какое-либо значение, то имя переменной является ее значением. В этом заключается одно из принципиальных отличий подобных систем от традиционных языков программирования. Первоначально имя и значение переменной совпадают между собой, и такая переменная называется свободной.
Запуск программы на выполнение в системе осуществляется клавишей <Enter>.
Ниже приведем несколько примеров программ в системе Reduce, которые позволят получить первоначальные представления о системах аналитических преобразований символьной информации.
Пример 1.
А; XI; SS# ABCDIF; <Enter>
Листинг результата программы следующий:
А
XI
ABCDIF
Комментарий: все переменные являются свободными, т.е. их значения совпадают с именами.
Пример 2.
А:=123456789# В:= 123456789123456789#А*В; <Enter>
Листинг результата программы следующий:
Комментарий: переменным А и В присваиваются целочисленные значения и вычисляется их произведение, причем результат вычисления точный без округления.
Пример 3.
A:=S# A; A:=X*Y# A; Q:=X:=Y# Q; X; <Enter>
Листинг результата программы следующий:
S
Х*У
Y
Y
Комментарий: переменной А присваивается сначала значение S, затем - X*Y.
Пример 4.
13; 3+6; 2**64; 11-20; 25/(-125); 2*(3*A-6)/6; <Enter>
Листинг результата программы следующий:
139 18446744073709551616 (-9) (-1)/5А-2
Комментарий: при проведении алгебраических преобразований для записи сложных выражений используют имена переменных и знаки арифметических операций.
Пример5.
I**2; A:=X+I*Y# B:=X-I*Y# A*B; A**2; <Enter>
Листинг результата программы следующий:
-1
X-52-0+Y-52
' 2*I*X*Y + X-52-0-Y-52
Комментарий: для использования комплексных чисел за латинской буквой I закреплено значение мнимой единицы.
Пример 6.
OPERATOR F,W; W(X); F(5*X); (F(X)+A)**2; <Enter>
Листинг результата программы следующий:
W(X) F(5*X) F(X)-52-0 + 2*A*-F(x) + A-52
Комментарий: имена в скобках используют для обозначения операторов или функций, которые описываются предварительно командой OPERATOR.
Пример 7.
DF(X**2,X); DF(Y,Y,2); DF(X**3*Y*82*Z**3,X,3,Y,Z,2); DF(Y,X); <Enter>
Листинг результата программы следующий: 2*Х 0 72*Y*Z О
Комментарий: встроенный оператор DF используется для вычисления частных производных по отношению к одной или нескольким переменным, первым аргументом в скобках является дифференцируемое выражение, далее - аргументы, по которым проводится дифференцирование, и числа, указывающие порядок производной.
Пример 8.
INT(X**2,X); INT(SIN(X),X); <Enter>
Листинг результата программы следующий:
Х-53-0/3 - COS(X)
Комментарий: оператор INT используется для вычисления интегралов, на первом месте стоит интегрируемое алгебраическое выражение, на втором месте указывается переменная интегрирования.
|
|
Мы привели наиболее простые возможности системы Reduce. Подробнее ознакомиться с работой подобных систем читателю рекомендуется по специальным учебным пособиям и монографиям.
Контрольные вопросы
1. В чем основные отличия переменных в традиционных системах программирования от систем аналитических преобразований типа REDUCE?
2. В каких задачах предпочтительнее использовать методы компьютерной алгебры?