Прочитал статью Great «Логарифмируем, интегрируем, корень извлекаем!» (МК № 16 (187)), посвященную вычислительному пакету DERIVE 5 (http://www.derive.com). Мне в свою очередь хотелось бы сказать несколько замечаний по этому поводу. Прошу вставить сокращения «ИМХО» по своему вкусу: все дальнейшее это только мое мнение. А мнится мне следующее.
1. Уже DERIVE 3.11 для ДОСа мог решить все школьные задачи и большинство задач по математике для первого курса университетов дифуры и т. п. Он действительно загружается с дискеты и работает на 486 компьютере.
2. Встроенный язык, к сожалению, не muLisp, на котором все и было написано. Но язык, несомненно, из семейства функциональных. Чтобы дорасти до лиспа, в версии 3.11 не хватало одной конструкции. Не будем уточнять какой. Наверное, все-таки quote.
При переходе на Виндовс система приобрела вес и потеряла мобильность. Были устранены одни недостатки и внесены новые, выявлением которых занимается в частности DUG (Derive Users Group). Язык, наконец-то, получил недостающие конструкции и много других в придачу, что сделало его полноправным диалектом лиспа. Но таким, у которого eval выполняет аналитические преобразования (см. ниже).
По поводу языка и лиспа: лучше сравнивать DERIVE с трехуровневой системой языка REDUCE, и конечный пользователь имеет доступ ко всем уровням, вплоть до RLISPа, на котором REDUCE написана. Насколько известно, DERIVE по такому пути не пошел.
3. Совсем не согласен с сопоставлением DERIVE и других пакетов. Сразу выкидываем MathCAD в нем стоит аналитический движок Maple, то есть это одно и то же. MathLab всегда развивалась как система именно «численных» расчетов, в отличие от DERIVE.
DERIVE, начиная с muMath, всегда был системой аналитических преобразований (то есть компьютерной алгебры), он ею и остался. Причем, если Maple делает упор на раздельности различных преобразований, полагая (и вполне резонно), что пока еще пользователь-математик лучше его может решить, какие преобразования и как проводить, то DERIVE большинство преобразований делает сам. Последнее удобно, когда важно быстро получить результат. Или если пользователь недостаточно знаком с нужными математическими преобразованиями.
Как это выглядит на практике. Вы берете задачу, подходите к Maple, и тут выясняется, что нужно загружать некие пакеты для решения вашей конкретной задачи, даже если это всего лишь, к примеру, работа с матрицами. Эти пакеты могут иметь свои «синтаксические» особенности и т. д. Если задача действительно сложна, то делать ничего не остается Maple обычно мощнее DERIVE.
В DERIVE вы просто записываете уравнения и... Если задача ему по зубам, то получаете ответ. Если нет, то запихиваете уже набранное условие в Maple, отличия минимальны и... Если задача действительно сложна, то вы опять ничего не получаете. Придется программировать, а если учесть, что языки REDUCE, MAPLE, DERIVE схожи, то у вас несколько вариантов. Не самый худший из них переформулировка задачи в численном виде и программирование на вашем любимом языке, например, на прологе.
В качестве нерешаемой задачи рассмотрите такую. У вас есть система от K целочисленных неизвестных, каждая из которых принимает значения из множества {i| i in N, i<=K}, причем значения разных переменных различны. Параметры выбираете сами. Чтобы решить вашу систему в рассматриваемых пакетах, добавьте к ней уравнения на суммы степеней неизвестных в нужном количестве. Придется рассмотреть простой пример:
x+y=4,
всего переменных три: x, y, z. Они принимают значения из множества {1,2,3}, и значения всех переменных разные.
Добавляем уравнения:
{x+y=4
{x+y+z=6
{x^2+y^2+z^2=14
и решаем полученную систему. И не надо теперь делать никаких предположений о x, y, z! Результаты:
DERIVE 3.11 решений не нашел;
DERIVE 5.02 нашел оба решения;
MAPLE 6.02 нашел оба решения.
Не встречал еще системы компьютерной алгебры, которая решала бы подобные уравнения с 5-ью и более переменными. Но в последнее время наметился прогресс.
DERIVE содержит средства, позволяющие проводить решения уравнений вручную. Эти средства редко описываются, но они есть и давно. Их наличие означает, что DERIVE может служить и для «обучения» математике:
(2*x+17=3)-3
Это, понятно, означает вычитание 3 из обеих частей равенства. Аналогично можно было сделать -17, а затем все поделить на 2.
Большинство пакетов, написанных на DERIVE и свободно доступных в Интернете, имеют учебную направленность. Хотя есть и исключения.
Что в результате? Сильное утверждение «все» школьные расчеты и расчеты на первом курсе вуза DERIVE может выполнить сам, и он дешевле обойдется пользователю, чем другие из упоминавшихся пакетов (в смысле потерь нервов). Упомяну еще о калькуляторах (TI-9x), включающих DERIVE. Они полностью совместимы с упомянутым пакетом, даже могут загружать программы с компьютера. Приходите на контрольную с калькулятором, и он «все решает сам»!
А если вам до зарезу нужно что-то посчитать с очень большим количеством знаков, и у вас нет UBASICа, берите DERIVE. Простота и интуитивная понятность его не дадут вам отклониться от изучения своей задачи и перейти к изучению DERIVE.
4. Литературы по DERIVE на русском языке очень много, разной по качеству как содержания, так и печати. На украинском знаю только одну книгу, достаточно старую, но ее более чем достаточно для школы, которой она и предназначена.