Доверяй, но проверяй


Согласно известному афоризму Н. Вирта, каждая программа содержит по крайней мере одну ошибку. К сожалениею, разработчикам Maple не удалось ни опровергнуть это утверждение, ни ограничиться одной ошибкой.

Мы не будем останавливаться на тех ошибках, которые осложняют жизнь пользователя, но не имеют прямого отношения к математике. Мы также не будем рассматривать ситуации, в которых Maple не может найти правильный ответ и поэтому отказывется преобразовывать исходное выражение (упрощать, интегрировать, находим корни и т.д.). Мы лишь приведем примеры явных ляпов, когда Maple возвращает неверный результат.

 


Линейная алгебра

> restart: with(linalg):

Warning, new definition for norm
Warning, new definition for trace

> A:=matrix([[sqrt(2), sqrt(3), sqrt(6)], [2, sqrt(6), 2*sqrt(3)], [sqrt(6), 3, 3*sqrt(2)]]);

A := matrix([[sqrt(2), sqrt(3), sqrt(6)], [2, sqrt(...

> det(A),simplify(det(A));rank(A);

12*sqrt(6)-12*sqrt(3)*sqrt(2), 0

3

Мы видим, что Maple "не заметил", что опредилитель матрицы A равен нулю, до тех пор, пока мы явно не потребовали упростить полученное выражение. Такая "невнимательность" программы привела к тому, что в качестве ранга матрицы A она вернула 3, хотя все три строки A очевидно пропорциональны.

> simplify(charpoly(A,t));eigenvalues(A);eigenvectors(A);

t^3-4*t^2*sqrt(2)-sqrt(3)*sqrt(2)*t^2

4*sqrt(2)+sqrt(3)*sqrt(2), 0, 0

Error, (in evala) reducible RootOf detected.  Substitutions are, {RootOf(_Z^2-6) = RootOf(_Z^2-3)*RootOf(_Z^2-2), RootOf(_Z^2-6) = -RootOf(_Z^2-3)*RootOf(_Z^2-2)}

Корректно посчитав характеристический многочлен и собственные значения злополучной матрицы, Maple не смог, однако, найти ее собственные векторы. Обнаружив, что в поле Q( sqrt(2) , sqrt(3) ) многочлен x2 - 6 перестал быть неприводимым Maple не смог сделать выбор между альтернативами sqrt(6) = sqrt(2)*sqrt(3) и sqrt(6) = -sqrt(2)*sqrt(3.)

 


Аналитическая геометрия на плоскости

Для нахождени касательных к окружности в пакете geomerty имеется процедура TangentLine . Однако, в случае когда точка, в которой ищутся касательные лежит на окружности, возвращаемый ей результат может выглядеть довольно странно:

> restart: with(geometry):

> TangentLine(t,point(A,3,4),circle(c,(x-6)^2+y^2=25,[x,y])):

> draw([A(color=black),t,c],view=[-6..12,-6..6],printtext=true);

[Maple Plot]

Отметим, что входящая в состав пакета geometry процедура tangentpc , предназначенная специально для нахождения касательной в точке, лежащей на окружности, в описанной выше ситуации вернет правильный результат.

 


Решение уравнений и неравентств

> a:={log[1/2](sqrt(x+2)-x+4)>=-1+log[1/2](3)};

> solve(a);

a := {-1-ln(3)/ln(2) <= -ln(sqrt(x+2)-x+4)/ln(2)}

{-1 < x, x < 7}

При решении вышеприведенного неравенства Maple потерял корень

x = -2.


Волгоградский государственный педагогический университет
Кафедра алгебры, геометрии и информатики