считать его. Для этого вначале следует командой 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);

sin(x) +cos(x)

> simplifу(f2(у));

1

> f3(0);

1

> f3(1.);

.8414709848

Описанный выше способ создания своей библиотеки вполне устроит большинство пользователей. Однако есть более сложный и более «продвинутый» способ ввода своей библиотеки в состав уже имеющейся. Для реализации этого 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.

Как известно, метод Ньютона сводится к итерационным вычислениям по следующей формуле (файл р9):

xi+1 = xi +f(xi)/f'(xi).

Реализующая его процедура выглядит довольно просто:

> restart:

NI:=proc(expr, х) local iter;

iter:=x-expr/diff(expr,х);

unapply(iter,x)

end;

NI := proc(expr, x) local iter, iter:= x - expr/diff(expr, x); unapply(iter, x) end proc

Для получения итерационной формулы в аналитическом виде здесь используется функция unapply. Теперь, если задать решаемое уравнение, то можно получить искомое аналитическое выражение:

> expr:=sin(х)^2-0.5;

expr := sin(x)² - .5

> F:=NI(expr,x);

Далее, задав начальное приближение для х в виде х=х0, можно получить результаты вычислений для ряда итераций:

> х0:=0.2;

х0:= .2

> to 8 do х0:=F(х0);od;

х0:= 1.382611210 х0:= .117460944 х0:= 2.206529505 х0:= 2.360830634 х0:= 2.356194357 х0:= 2.356194490 х0:= 2.356194490 х0:= 2.356194490

Нетрудно заметить, что, испытав скачок в начале решения, значения х довольно быстро сходятся к конечному результату, дающему корень заданной функции. Последние три итерации дают одно и то же значение х. Заметим, что этот метод дает только одно решение, даже если корней несколько. Вычислить другие корни в таком случае можно, изменив начальное условие.

Можно попробовать с помощью полученной процедуры получить решение и для другой функции:

> expr:=ln(х^2)-0.5;

expr: = ln(x² ) - .5
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

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