Купить Matlab  |  Mathematica  |  Mathcad  |  Maple  |  Statistica  |  Другие пакеты Поиск по сайту
Internet-класс  |  Примеры  |  Методики  |  Форум  |  Download
https://hub.exponenta.ru/


Программирование в среде Maple


В начало книги

 

Предметный указатель

Пакет Domains. Интерактивное использование пакета Domains
К предыдущему разделуК следующему разделу

Для удобства интерактивного использования команд пакета Domains используется команда evaldomains [D](expr). evaldomains обеспечивает Maple -подобный пользовательский интерфейс, компоновку данных и проверку типов аргументов Domains -функций. Она вычисляет выражение Maple в домене D и возвращает выражение Maple . Приведем примеры.

Используем введенный нами выше домен С полиномов от одной переменной. Введем два случайных полинома a1 и a2.

> a1:=C[Random]();a2:=C[Random]();

[Maple Math]

[Maple Math]

Так выглядит операция перемножения полиномов в Domains - синтаксисе

> C[Output](C[`*`](a1,a2));

[Maple Math]

Использование знакомого Maple синтаксиса для той же операции при помощи evaldomains

> evaldomains[C](a1*a2);

[Maple Math]

Если необходимо вычислить несколько выражений в одном и том же домене удобно создать домен-вычислитель с использованием команды создания псевдонимов alias :
alias (dup = evaldomains[домен]):

Так как выражение направляемое на evaldomains вначале обрабатывается синтаксическим анализатором Maple , пользователь не должен забывать о встроенных упрощениях, перегруппировке операндов и вычислении функций верхнего уровня этим анализатором. Например, следующее выражение всегда приводится к 0.
evaldomains[C] (C[Random]() - C[Random]());

[Maple Math]

Если домен имеет некоммутативное умножение или сложение должна быть использована & -версия оператора с целью предотвращения перегруппировки операндов. Например, используя введенный нами выше домен M3 квадратных матриц 3*3, введем псевдоним


alias (m = evaldomains[M3]);

[Maple Math]

> A := m (Random());

[Maple Math]

> m (A &* (A + 1));

[Maple Math]
[Maple Math] [Maple Math]
[Maple Math]

8.3.4 Примеры использования пакета Domains

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

> with(Domains);

----------------------- Domains version 1.0 ----------------------

Initially defined domains are Z and Q the integers and rationals

Abbreviations, e.g. DUP for DenseUnivariatePolynomial, also made

[Maple Math]

Области Z (целых чисел) и Q (рациональных чисел) были определены. Давайте проделаем несколько вычислений

> Z[Gcd](8,12);

[Maple Math]

> Q[`+`](1/2,1/3,1/4);

[Maple Math]

Что за объекты Z и Q? Z и Q являются таблицами Maple

> type(Z,table);

[Maple Math]

Они содержат операции (Maple процедуры) для вычислений в Z и Q Какие операции доступны?

> show(Z,operations);

 

Signatures for constructor Z

note: operations prefixed by -- are not available

 

* : (Z,Z*) -> Z

* : (Integer,Z) -> Z

+ : (Z,Z*) -> Z

- : (Z,Z) -> Z

- : Z -> Z

0 : Z

1 : Z

< : (Z,Z) -> Boolean

<= : (Z,Z) -> Boolean

<> : (Z,Z) -> Boolean

= : (Z,Z) -> Boolean

> : (Z,Z) -> Boolean

>= : (Z,Z) -> Boolean

Abs : Z -> Z

Characteristic : Integer

Coerce : Integer -> Z

Div : (Z,Z) -> Union(Z,FAIL)

EuclideanNorm : Z -> Integer

Factor : Z -> [Z,[[Z,Integer]*]]

Gcd : Z* -> Z

Gcdex : (Z,Z,Name,Name) -> Z

Gcdex : (Z,Z,Name) -> Z

Input : Expression -> Union(Z,FAIL)

Inv : Z -> Union(Z,FAIL)

Lcm : Z* -> Z

Max : (Z,Z*) -> Z

Min : (Z,Z*) -> Z

Modp : (Z,Z) -> Z

Mods : (Z,Z) -> Z

ModularHomomorphism : () -> (Z -> Z,Z)

Normal : Z -> Z

Output : Z -> Expression

Powmod : (Z,Integer,Z) -> Z

Prime : Z -> Boolean

Quo : (Z,Z,Name) -> Z

Quo : (Z,Z) -> Z

Random : () -> Z

RelativelyPrime : (Z,Z) -> Boolean

Rem : (Z,Z,Name) -> Z

Rem : (Z,Z) -> Z

Sign : Z -> UNION(1,-1,0)

SmallerEuclideanNorm : (Z,Z) -> Boolean

Sqrfree : Z -> [Z,[[Z,Integer]*]]

Type : Expression -> Boolean

Unit : Z -> Z

UnitNormal : Z -> [Z,Z,Z]

Zero : Z -> Boolean

^ : (Z,Integer) -> Z

 

Давайте выполним некоторые операции в Q[x], то есть в области полиномов от одной переменной над Q. Вначале нужно создать область Q[x], давайте назовем ее C

> C := DenseUnivariatePolynomial(Q,x):

Имя DenseUnivaritePolynomial указывает, что используемая структура данных является плотной. Давайте введем полином

> m := C[Input](x^4-10*x^2+1);

[Maple Math]

Теперь выведем полином m

> C[Output](m);

[Maple Math]

Можно вычислить степень полинома.

> C[Degree](m);

[Maple Math]

Квдрат полинома

> C[`^`](m,2);

[Maple Math]

Можно вывести случайный полином.

> a := C[Random]();

[Maple Math]

Каждый домен пакета Domains имеет функцию Random , которая возвращает случайно сгенерированный элемент из домена, который можно использовать для написания примеров. !

> C[Output](a);

[Maple Math]

Domains может также оперировать с матрицами и другими объектами. Давайте вычислим обратную матрицу к 3на 3 матрице Гильберта. Вначеле мы должны создать матричный домен

> M := SquareMatrix(3,Q):
A := M[Input]([[1,1/2,1/3],[1/2,1/3,1/4],[1/3,1/4,1/5]]);

[Maple Math]

> M[Det](A);

[Maple Math]

> M[Inv](A);

[Maple Math]

Давайте теперь вычислим матрицы полиномов в Q[x]. Будем использовать матрицы 2 на 2, чтобы примеры не получились очень громоздкими.

> M := SquareMatrix(2,C):
A := M[Input]([[x,x^2],[1-x^2,1+x^2]]);

[Maple Math]

Вычислим определитель матрицы

> C[Output]( M[Det](A) ); # Compute and output det(A)

[Maple Math]

Вычислим квадрат матрицы

> M[Output]( M[Inv](A));

Error, (in notImplemented) operation is not implemented

Все в порядке, нельзя вычислить обратную матрицу от матрицы полиномов, так как результат в общем случае - рациональная функция (не полином).

Теперь давайте продемонстрируем мощность пакета Domains выполняя некоторые матричные задачи с матрицами на различных областях , на этот раз с алгебраическими числами. Например, предположим мы хотим вычислить корни полинома

m = x^4-10*x^2+1 . В Maple обычно используется функция RootOf следующим образом

> alias(alpha=RootOf(x^4-10*x^2+1=0,x)):
simplify(1/alpha);

[Maple Math]

Работая в среде Domains , мы должны создать простое алгебраическое расширение (Simple Algebraic Extension - SAE), используя полином m как минимальный многочлен (minimal polynomial). Итак

> F := SAE(C,m):
a := F[Input](x);

[Maple Math]

> ai := F[Inv](a);

[Maple Math]

> F[Output](ai);

[Maple Math]

Domains обобщается очень естественно для вычислений над F

> M := SquareMatrix(2,F):
A := M[Input]([[1,x],[x^3,x^2]]);

[Maple Math]

> F[Output]( M[Det](A) );

[Maple Math]

> M[Output]( M[Inv](A) );

[Maple Math]

В наших следующих примерах приводятся вычисления со степенными рядами от одной переменной. Вначале давайте создадим домен отложенных степенных рядов от x над Q.

> PS := LazyUnivariatePowerSeries(Q,x):
show(PS,operations);

 

Signatures for constructor PS

note: operations prefixed by -- are not available

 

* : (Integer,PS) -> PS

* : (PS,PS*) -> PS

+ : (PS,PS*) -> PS

- : (PS,PS) -> PS

- : PS -> PS

/ : (PS,PS) -> PS

/ : (PS,Integer) -> PS

0 : PS

1 : PS

<> : (PS,PS) -> Boolean

= : (PS,PS) -> Boolean

-- AbsoluteDegree : Integer

Characteristic : Integer

Coeff : (PS,Integer) -> Q

CoefficientRing : Ring

Coerce : Integer -> PS

Constant : Q -> PS

Cos : PS -> Union(PS,FAIL)

Cosh : PS -> Union(PS,FAIL)

Diff : PS -> PS

Div : (PS,PS) -> Union(PS,FAIL)

EuclideanNorm : PS -> Integer

Exp : PS -> Union(PS,FAIL)

Factor : PS -> [PS,[[PS,Integer]*]]

Gcd : PS* -> PS

Gcdex : (PS,PS,Name) -> PS

Gcdex : (PS,PS,Name,Name) -> PS

Input : Expression -> Union(PS,FAIL)

Integrate : PS -> Union(PS,FAIL)

Inv : PS -> PS

Lcm : PS* -> PS

Ln : PS -> Union(PS,FAIL)

Log : PS -> Union(PS,FAIL)

Lorder : PS -> Integer

Monomial : Integer -> PS

Monomial : () -> PS

Normal : PS -> PS

Output : PS -> Expression

Powmod : (PS,Integer,PS) -> PS

Prime : PS -> Boolean

Quo : (PS,PS) -> PS

Quo : (PS,PS,Name) -> PS

R* : (Q,PS) -> PS

R/ : (PS,Q) -> PS

Random : () -> PS

RelativelyPrime : (PS,PS) -> Boolean

Rem : (PS,PS) -> PS

Rem : (PS,PS,Name) -> PS

Series : [[Q,Integer]] -> PS

Shift : (PS,Integer) -> PS

Sin : PS -> Union(PS,FAIL)

Sinh : PS -> Union(PS,FAIL)

SmallerEuclideanNorm : (PS,PS) -> Boolean

Sqrfree : PS -> [PS,[[PS,Integer]*]]

Tan : PS -> Union(PS,FAIL)

Tanh : PS -> Union(PS,FAIL)

Type : Expression -> Boolean

Unit : PS -> PS

UnitNormal : PS -> [PS,PS,PS]

Variable : Name

^ : (PS,Rational) -> PS

^ : (PS,Integer) -> PS

^ : (PS,PS) -> PS

order : PS -> Integer

Давайте вычислим степенной ряд exp(x)

> a := PS[Input](x);

[Maple Math]

> e := PS[Exp](a);

[Maple Math]

> PS[`^`](e,3); # exp(x)^3

[Maple Math]

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

> PS[Output](e,10);

[Maple Math]

Далее вычислим полиномы Лежандра по их производящей функции:

1/sqrt(1-2*x*t+t^2) = sum( L[n](x)*t^k, k=0.. )
Вначеле создадим домен LUPS == LazyUnivariatePowerSeries.

> P := LUPS(LUPS(Q,x),t):

Вводим выражение

> p := P[Input](1-2*x*t+t^2);

[Maple Math]

Теперь находим разложение в ряд по t величины p^(-1/2)

> P[`^`](p, -1/2);

[Maple Math]

Сравним полученную формулу с формулами для полиномов Лежандра, имеющихся в Maple

> seq(orthopoly[P](i,x), i=0..5);

[Maple Math]

В начало страницы К предыдущему разделуК следующему разделу

Предметный указатель

| На первую страницу | Поиск | Купить Matlab

Исправляем ошибки: Нашли опечатку? Выделите ее мышкой и нажмите Ctrl+Enter


Copyright © 1993-2024. Компания Softline. Все права защищены.

Дата последнего обновления информации на сайте: 04.03.17
Сайт начал работу 01.09.00