считать его. Для этого вначале следует командой restart устранить ранее введенные определения процедур:
> restart;
С помощью команды with можно убедиться в том, что этих определений уже нет:
> with(mylib);
Error, (in pacman:-pexports) mylib is not a package
После этого командой read надо загрузить библиотечный файл:
> read(`с:/mylib.n`);
Имя файла надо указывать по правилам, указанным для команды save. Если все выполнено пунктуально, то команда with должна показать наличие в вашей библиотеке списка процедур f1, f2 и f3:
> with(mylib);
[f1, f2, f3]
И, наконец, можно вновь опробовать работу процедур, которые теперь введены из загруженной библиотеки:
> f1(x);
> simplifу(f2(у));
> f3(0);
> f3(1.);
Описанный выше способ создания своей библиотеки вполне устроит большинство пользователей. Однако есть более сложный и более «продвинутый» способ ввода своей библиотеки в состав уже имеющейся. Для реализации этого Maple имеет следующие операции записи в библиотеку процедур s1, s2, … и считывания их из файлов file1, file2, …:
savelib(s1, s2, sn, filename)
readlib(f, file1, file2, ...)
С помощью специального оператора makehelp можно задать стандартное справочное описание новых процедур:
makehelp(n,f,b)
где n — название темы, f — имя текстового файла, содержащего текст справки (файл готовится как документ Maple) и b — имя библиотеки. Системная переменная libname хранит имя директории библиотечных файлов. Для регистрации созданной справки надо исполнить команду вида
libname:=libname, `/mylib`;
С деталями применения этих операторов можно ознакомиться в справочной системе.
К созданию своих библиотечных процедур надо относиться достаточно осторожно. Их применение лишает ваши Maple-программы совместимости со стандартной версий Maple. Если вы используете одну-две процедуры, проще поместить их в те документы, в которых они действительно нужны. Иначе вы будете вынуждены к каждой своей программе прикладывать еще и библиотеку процедур. Она нередко оказывается большей по размеру, чем файл самого документа. Не всегда практично прицеплять маленький файл документа к большой библиотеке, большинство процедур которой, скорее всего, для данного документа попросту не нужны.
Особенно рискованно изменять стандартную библиотеку Maple 9.5/10. Впрочем, идти на это или нет — дело каждого пользователя. Разумеется, если вы готовы создать серьезную библиотеку своих процедур, то ее надо записать, тщательно хранить и подробно документировать.
10.6. Программирование символьных операций
10.6.1. Реализация итераций Ньютона в символьном виде
Найти достаточно простую и наглядную задачу, решение которой отсутствует в системе Maple 9.5/10, не очень просто. Поэтому для демонстрации решения задачи с применением аналитических методов воспользуемся примером, ставшим классическим — реализуем итерационный метод Ньютона при решении нелинейного уравнения вида f(x)=0.
Как известно,
Реализующая его процедура выглядит довольно просто:
> restart:
NI:=proc(expr, х) local iter;
iter:=x-expr/diff(expr,х);
unapply(iter,x)
end;
Для получения итерационной формулы в аналитическом виде здесь используется функция unapply. Теперь, если задать решаемое уравнение, то можно получить искомое аналитическое выражение:
> expr:=sin(х)^2-0.5;
> F:=NI(expr,x);
Далее, задав начальное приближение для х в виде х=х0, можно получить результаты вычислений для ряда итераций:
> х0:=0.2;
> to 8 do х0:=F(х0);od;
Нетрудно заметить, что, испытав скачок в начале решения, значения х довольно быстро сходятся к конечному результату, дающему корень заданной функции. Последние три итерации дают одно и то же значение
Можно попробовать с помощью полученной процедуры получить решение и для другой функции:
> expr:=ln(х^2)-0.5;