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


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


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

 

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

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

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

> restart;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 (рациональных чисел). Давайте проделаем несколько вычислений. Найдем наибольший общий делитель чисел 345 и 60.

> Z[Gcd](345,60);

[Maple Math]

Перемножим несколько рациональных чисел

> Q[`*`](3/2,7/3,12/5);

[Maple Math]

Можно проверить являются ли Z и Q таблицами Maple

> type(Q,table);

[Maple Math]

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

> show(Q,operations);


Signatures for constructor Q
note: operations prefixed by -- are not available

* : (Q,Q*) -> Q
* : (Integer,Q) -> Q
+ : (Q,Q*) -> Q
- : Q -> Q
- : (Q,Q) -> Q
/ : (Q,Q) -> Q
/ : (Q,Integer) -> Q
0 : Q
1 : Q
< : (Q,Q) -> Boolean
<= : (Q,Q) -> Boolean
<> : (Q,Q) -> Boolean
= : (Q,Q) -> Boolean
> : (Q,Q) -> Boolean
>= : (Q,Q) -> Boolean
AbsoluteDegree : Integer
BaseDomain : IntegralDomain
Characteristic : Integer
Coerce : Integer -> Q
Denom : Q -> G
Div : (Q,Q) -> Union(Q,FAIL)
EuclideanNorm : Q -> Integer
Factor : Q -> [Q,[[Q,Integer]*]]
Gcd : Q* -> Q
Gcdex : (Q,Q,Name,Name) -> Q
Gcdex : (Q,Q,Name) -> Q
Input : Expression -> Union(Q,FAIL)
Inv : Q -> Union(Q,FAIL)
Lcm : Q* -> Q
Max : (Q,Q*) -> Q
Min : (Q,Q*) -> Q
ModularHomomorphism : () -> (Q -> Union(Integer,FAIL),Integer)
Normal : Q -> Q
Numer : Q -> G
Output : Q -> Expression
Powmod : (Q,Integer,Q) -> Q
Prime : Q -> Boolean
Quo : (Q,Q) -> Q
Quo : (Q,Q,Name) -> Q
Random : () -> Q
RelativelyPrime : (Q,Q) -> Boolean
Rem : (Q,Q,Name) -> Q
Rem : (Q,Q) -> Q
Sign : Q -> UNION(1,-1,0)
Slash : (G,G) -> Q
SmallerEuclideanNorm : (Q,Q) -> Boolean
Sqrfree : Q -> [Q,[[Q,Integer]*]]
Type : Expression -> Boolean
Unit : Q -> Q
UnitNormal : Q -> [Q,Q,Q]
Zero : Q -> Boolean
^ : (Q,Integer) -> Q

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

> C := DenseUnivariatePolynomial(Q,x):

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

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

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

> a := C[Random]();

[Maple Math]

 

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

> C[Output](a);

[Maple Math]

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

> C[Degree](a);

[Maple Math]

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

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

[Maple Math]

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

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

[Maple Math]

> M3[Det](A);

[Maple Math]

> M3[Inv](A);

[Maple Math]

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

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

[Maple Math]

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

> C[Output]( M2[Det](A) );

[Maple Math]

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

> M2[Output](M2[`^`](A,2));

[Maple Math]

Вычислим обратную матрицу

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

Error, (in notImplemented) operation is not implemented

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

В следующих примерах приводятся вычисления со степенными рядами от одной переменной. Вначале создадим домен обрезанных степенных рядов от 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 : () -> PS
Monomial : Integer -> PS
Normal : PS -> PS
Output : PS -> Expression
Powmod : (PS,Integer,PS) -> PS
Prime : PS -> Boolean
Quo : (PS,PS,Name) -> PS
Quo : (PS,PS) -> PS
R* : (Q,PS) -> PS
R/ : (PS,Q) -> PS
Random : () -> PS
RelativelyPrime : (PS,PS) -> Boolean
Rem : (PS,PS,Name) -> PS
Rem : (PS,PS) -> 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,Integer) -> PS
^ : (PS,Rational) -> PS
^ : (PS,PS) -> PS
order : PS -> Integer

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

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

[Maple Math]

> s := PS[Sin](a);

[Maple Math]

> s1:=PS[`Diff`](s,x); # sin(x)^(1/2)

[Maple Math]

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

> PS[Output](s1,10);

[Maple Math]

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

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

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

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

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

[Maple Math]

> p2:=P[Input](1-t*x);

[Maple Math]

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

> P[`/`](p2, p1);

[Maple Math] [Maple Math]

Сравним полученную формулу с формулами для полиномов Чебышева, имеющихся в Maple

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

[Maple Math]

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

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

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

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


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

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