Смекни!
smekni.com

Программирование и разработка приложений в Maple (стр. 107 из 135)

7.1. Графическая интерпретация алгебраических выражений и уравнений в среде Maple-языка

Прежде всего, графические средства предоставляют возможность получения предварительных (набросков) графиков, определяемых Maple-выражениями. Такая возможность обеспечивается как на уровне оболочки пакета GUI, так и на уровне средств его языка в виде следующих двух процедур:

smartplot(V1,V2, …, Vn) и smartplot3d(V1,V2, …, Vn)

возвращающих графики зависимостей, определяемых алгебраическими Vj-выражениями либо их множеством, в единой системе декартовых координат размерности 2 и 3 соответственно, как это иллюстрирует следующий простой фрагмент:

> smartplot(x*cos(x), sin(y)*cos(y), x); smartplot3d({y*cos(x), sin(y)*cos(z)}); Первый пример фрагмента иллюстрирует использование smartplot-процедуры для вывода 2D-графиков, определяемых тремя простыми функциями, тогда как второй иллюстрирует создание посредством smartplot3d-процедуры 3D-объекта, составленного из 2 поверхностей, определяемых двумя функциями от двух переменных.

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

Во первых, для многих приложений языка в интерактивном режиме требуется получать быстрое общее графическое представление, пусть не совсем точное (набросок) и хорошо оформленное, для полученного результата в виде алгебраического выражения. Это хорошо отвечает задачам, в частности, исследовательского характера, когда анализ результата определяет путь дальнейшей работы и графическая составляющая играет определенную роль. Например, численное решение многих уравнений часто требует удовлетворительного определения интервала, на котором располагаются нулевые корни, многие физические уравнения предполагают графическую интерпретацию и т.д. Следующий фрагмент иллюстрирует применение smartplot3d-процедуры для получения предварительного графика результата дифференцирования выражения:

> smartplot3d(diff(cos(x)*sin(y) + y*abs(sqrt(y))/cos(y) - sin(x)*cos(x + y), x$2, y$4));

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

Во вторых, применение указанных процедур можно рассматривать как начальный этап подготовки графического объекта, когда его набросок позволяет выбирать более продуманные установки опций для базовых графических plot-функций, рассматриваемых на протяжении остальных разделов главы.

Между тем, использование данных процедур для выражений/уравнений от количества независимых переменных, больше чем размерность без одного, может вызвать ошибочные ситуации. Поэтому для более эффективного использования данных процедур рекомендуется использовать Smart-процедуру, которая обрабатывает основные как особые, так и ошибочные ситуации, возникающие при вызове стандартных процедур smartplot и smartplot3d. Вызов процедуры Smart(args) выводит график одного или более алгебраических выражений или уравнений, определенных фактическими аргументами args. Синтаксис фактических аргументов args полностью соответствует синтаксису аргументов стандартных процедур smartplot и smartplot3d. Нижеследующий фрагмент представляет исходный текст процедуры Smart и пример ее применения.

Smart := proc() local k L Z, , ; if nargs = 0 then RETURN( ) else L Z, := { } { }, end if; for k to nargs do if type(args[ ]k , 'algebraic') then L := {op(L), nops(indets(args[k], 'symbol'))} elif type(args[ ]k , `=`) and type(rhs args[ ]( k ), 'algebraic') and type(lhs args[ ]( k ), 'algebraic') then Z := {op(Z), nops indets(( args[ ]k , 'symbol'))} else ERROR("Among arguments are invalid types <%1>"args, ) end if

end do;

if L minus {0, 1} = { } and Z minus {1, 2} = { } then smartplot args( ) elif L minus {1, 2} = { } and Z minus {2, 3} = { } then smartplot3d args( ) else ERROR ("Among arguments are invalid expressions <%1>"args, ) end if

end proc

> Smart(x^2 + y^2 + z^2 = 20, y^2 + x^2);

Детальнее со smart-механизмом создания графических объектов можно ознакомиться в

[12] или в справке по пакету. В частности, реализованный для smart-графиков механизм «перетаскивания» позволяет удалять из многофункционального графика любую кривую / поверхность, не затрагивая остальных кривых/поверхностей, либо дополнять график новыми кривыми/поверхностями.

7.2. Двухмерное представление функциональных зависимостей и данных в среде Maple-языка

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

Графическое представление функциональных зависимостей. Для представления собственно 2D-функциональных зависимостей Maple-язык располагает базовой графической plot-функцией, имеющей три основных формата кодирования, а именно:

(1) plot(F(x), x=a..b {,y = c..d} {, <Опции>})

(2) plot([F1(x), ..., Fn(x)], x = a..b {, y = c..d}{, <Опции>})

(3) plot([X(t), Y(t), t = a..b] {, <Опции>})

и возвращающей 2D-ГО в виде графика соответственно единственной функции, определенной функциональным F(x)-выражением по ведущей x-переменной, нескольких функций, определенных списком [F1(x), ..., Fn(x)], и параметрически заданной функции, определенных на диапазоне a..b значений x-переменной (t-параметра) в единой системе декартовых (X, Y)-координат. Так как plot-функция возвращает 2D-ГО только с вычисляемыми (X,Y)-точками, то для обеспечения этого требования предполагается, что функциональные зависимости являются действительными. В дальнейшем будем предполагать, что все графические функции, возвращающие графики функциональных зависимостей, требуют действительных значений над областью их определения, в противном случае не выводя отличные от действительных значения F-функций, т.е. выводятся части графика, содержащие только действительные координаты {x,F(x)}. При определении диапазонов изменения значений как ординат, так и абсцисс графика в виде <Id>=a..b, <Id> появляется в качестве названия соответствующей оси координат.

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

В качестве первого фактического аргумента plot-функция допускает использование: (1) действительных функции или выражения от одной ведущей переменной, (2) Maple-процедуры, (3) параметрически определенной функции и (4) списка координат точек. Для случая Maple-процедуры используется в общем случае конструкция следующего вида: plot(Proc, a..b) (Proc – имя процедуры), а для списка координат точек – конструкция вида plot([[x1, y1],...,[xn, yn]]), в которой каждая [xj, yj]-пара определяет отдельную точку, выводимую отдельно либо соединенной с другими точками прямой линией.

В случае определения многофункционального графика, содержащего графики нескольких функциональных зависимостей, определяемых первым аргументом-списком plotфункции, они выводятся в единой координатной сетке с различным цветовым оформлением. Наряду со списком в качестве определителя многофункционального графика может выступать и множество, однако по ряду причин списочная структура предпочтительнее. Для удобства визуальной идентификации отдельных кривых ГО производится их расцветка согласно значения глобальной переменной _COLORRGB, являющейся последовательностью, состоящей из 6 элементов-списков, а именно:

> _COLORRGB; ⇒ [1.0, 0., 0.], [0., 1.0, 0.], [1.0, 1.0, 0.], [0., 0., 1.0], [1.0, 0., 1.0], [0., 1.0, 1.0]

Следовательно, если по plot-функции одновременно выводится n кривых в одном ГО, то цвета (n-6) из них будут повторяться.

Функциональная зависимость, заданная параметрически (формат 3), в качестве первого аргумента plot-функции предполагает также списочную структуру, однако в отличие от списка функций второго формата, данный список имеет отличный набор элементов. Его элементы определяют {X(t),Y(t)}-функции координат точки графика соответственно по {X,Y}-осям и t-параметр, чей диапазон изменения значений кодируется третьим элементом упомянутого списка-аргумента 3-го формата функции. При необходимости одновременного вывода в одном ГО нескольких параметрически определенных функций должен использоваться единый для них параметр, тогда как диапазоны его значений для функций могут различаться. Нижеследующий фрагмент представляет примеры создания ряда графиков на основе plot-функции рассмотренных выше форматов.