Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка Maple, Стребуляев

.pdf
Скачиваний:
309
Добавлен:
27.03.2015
Размер:
1.24 Mб
Скачать

 

0.5000000000

 

2

PR :=

( 2 R cos(u ) 3 R2 cos(u )2 ) R sin(u) cos(u ) du 0.

 

 

 

 

 

 

0

Ищем радиусы предельных циклов

> h:=R*alpha/2-(3*delta*R^3)/8;

 

1

3

h :=

 

R

 

R3

2

 

 

8

> solve(h,R);

0,

2 3

,

2

3

3

 

3

 

 

 

>mu:=0.01:alpha:=0;beta:=0.5;delta:=0.3;sys;

:= 0

:= 0.5

:= 0.3

{ddt y(t ) x(t ) 0.01 (1.0 x(t ) 0.9 x(t )2 ) y(t ), ddt x(t ) y(t )}

>phaseportrait(sys,[x(t),y(t)],t=-6..6, [[x(0)=0.3,y(0)=0.3], [x(0)=1,y(0)=1]],stepsize=0.1,scene=[x(t),y(t)] ,method=classical[foreuler],linecolor=[black,bl ue]);

1.10. Операции с векторами и матрицами

91

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

Способы задания векторов:

>restart;with(linalg):with(LinearAlgebra):

>v[1]:=array(1..3,[-3,0,4]);

v1 := [-3, 0, 4]

> v[2]:=array(1..3,[1,2,7]);

v2 := [1, 2, 7]

> v[3]:=array(1..3,[3,4,-8]);

v3 := [3, 4, -8]

> u[1]:=<3|-2|0>;

u1 := [3, -2, 0]

> u[2]:=<13|-22|0.1>;

u2 := [13, -22, 0.1]

> u[3]:=<23|-29|54>;

u3 := [23, -29, 54]

> s[1]:=vector[row]([-3,0,4]);

s1 := [-3, 0, 4]

> s[2]:=vector[row]([1,2,7]);

s2 := [1, 2, 7]

> s[3]:=vector[row]([3,4,-8]);

92

s3 := [3, 4, -8]

> alpha[1]:=vector(3,[-3,0,4]);

1 := [-3, 0, 4]

> alpha[2]:=vector(3,[1,2,7]);

2 := [1, 2, 7]

> alpha[3]:=vector(3,[3,4,-8]);

3 := [3, 4, -8]

Операции с векторами:

># Скалярное произведение векторов;

>dotprod(v[1],v[2]);

25

> dotprod(s[1],s[2]);

25

> dotprod(alpha[1],alpha[2]);

25

># Векторное произведение векторов;

>crossprod(v[1],v[2]);

[-8, 25, -6]

>crossprod(s[1],s[2]);

[-8, 25, -6]

>crossprod(alpha[1],alpha[2]);

[-8, 25, -6]

># Смешанное произведение векторов;

>dotprod(crossprod(alpha[1],alpha[2]),alpha[3]);

124

># Угол между векторами;

>angle(alpha[1],alpha[2]);

 

25

54

arccos

 

 

 

 

 

 

54

 

 

 

 

 

> evalf(%);

0.8224691544

93

> norm(alpha[1],3); evalf(%);# Норма трехмерного

вектора;

91(1/3)

4.497941445

> normalize(alpha[1]);# Нормировать вектор;

-53, 0, 45

> Basis([u[1],u[2],u[3]]);# Нахождение базиса век-

торов, задаваемых только как u[i] (пакет LinearAlgebra);

[[3, -2, 0], [13, -22, 0.1], [23, -29, 54]]

>GramSchmidt([u[1],u[2],u[3]]); # Ортогонализация системы векторов векторов, задаваемых только как u[i] (пакет LinearAlgebra);

[[3, -2, 0], [-6.15384616000000052, -9.23076922999999994, 0.100000000000000004 ],

[0.269465600000000192, 0.404198399999998515, 53.8931211840000018 ]]

>convert(alpha[1],list[1]);# Преобразование вектора в список;

[-3, 0, 4]

Способы задания матриц:

> restart: with(linalg):

Warning, the protected names norm and trace have been redefined and unprotected

> C:=matrix(3,3);

C := array(1 .. 3, 1 .. 3, [ ])

> C1:=array(1..3,1..3);

C1 := array(1 .. 3, 1 .. 3, [ ])

> A:=matrix(3,3,[1,2,-5,2,8,0,-4,-3,-7]);

1

2

-5

 

2

8

 

A :=

0

 

 

-3

 

-4

-7

 

 

 

 

> B:=matrix(3,3,[1,2,-5,7,6,-8,3,4,-9]);

94

1

2

-5

 

6

 

B := 7

-8

 

4

 

3

-9

 

 

 

> C2:=matrix(2,3,[1,2,3,4]);

C2

1

2

3

 

:=

C2

 

C2

 

 

4

2, 2

 

 

 

 

2, 3

> C3:=array(1..3,1..3,[[1,2,-5],[2,8,0],[-4,-3,-

7]]);

 

1

2

-5

C3

 

2

8

 

:=

0

 

 

 

-3

 

 

-4

-7

 

 

 

 

 

> C4:=array(1..3,1..3,[[1,2,-5],[7,6,-8],[3,4,-

9]]);

 

1

2

-5

C4

 

6

 

:= 7

-8

 

 

4

 

 

3

-9

 

 

 

 

Операции над матрицами:

> rowdim(A); # Число строк матрицы;

3

> coldim(A); # Число столбцов матрицы;

3

> evalm(C3+C4);# Сложение (вычитание) матриц;

2

4

-10

 

9

14

 

 

-8

 

 

1

 

-1

-16

 

 

 

 

> matadd(C3,C4);# Сложение матриц;

2

4

-10

 

9

14

 

 

-8

 

 

1

 

-1

-16

 

 

 

 

> multiply(C3,C4);#Перемножение матриц;

 

0

-6

24

 

58

52

 

 

-74

 

 

-54

 

-46

107

 

 

 

 

> evalm(C3&*C4);#Перемножение матриц;

 

0

-6

24

 

58

52

 

 

-74

 

 

-54

 

-46

107

 

 

 

 

95

> evalm(2*C3); # Умножение матрицы на число;

2

4

-10

 

4

16

 

 

0

 

 

-6

 

-8

-14

 

 

 

 

> evalm(2+C4);# Сложение матрицы с числом, умножен-

ным на единичную матрицу;

3

2

-5

 

8

 

7

-8

 

4

 

3

-7

 

 

 

> evalm(C3^3);# Возведение матрицы в степень;

 

-29

224

-335

 

194

610

 

 

-20

 

 

-259

 

-280

-573

 

 

 

 

> evalm(A^(-1));# Нахождение обратной матрицы;

 

28

-29

 

-20

 

 

 

 

 

 

 

 

 

 

79

158

79

 

 

 

 

 

 

 

 

 

 

 

 

 

-7

 

27

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

79

158

79

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-13

5

 

 

-2

 

 

 

 

 

 

 

79

158

79

 

 

 

> inverse(A); # Нахождение обратной матрицы;

 

28

-29

 

-20

 

 

 

 

 

 

 

 

 

 

79

158

79

 

 

 

 

 

 

 

 

 

 

 

 

 

-7

 

27

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

79

158

79

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-13

5

 

 

-2

 

 

 

 

 

 

 

79

158

79

 

 

 

> C:=A^3+4*A+5;# Матрица - функция от матрицы;

C := A3 4 A 5

> evalm(C);

 

-20

232

-355

 

202

647

 

 

-20

 

 

-271

 

-296

-596

 

 

 

 

> evalm(A^0);

1

> transpose(A);# Нахождение транспонированной мат-

рицы;

1

2

-4

 

2

8

 

 

-3

 

 

0

 

-5

-7

 

 

 

 

96

> det(A);#Нахождение определителя матрицы;

-158

> rank(A);# Нахождение ранга матрицы;

3

> trace(A);# Нахождение следа матрицы;

2

> norm(B);# Норма матрицы;

21

>kernel(B); # Ядро матрицы;

{}

Спектральный анализ матрицы:

> evalf(eigenvalues(B,C)); # Собственные числа мат-

рицы;

0.00885552382 0.36 10-9 I, -0.1647751158 0.91858429 10-11 I,

0.00035980130 0.3891858429 10-9 I

> evalm(C);

 

-20

232

-355

 

202

647

 

 

-20

 

 

-271

 

-296

-596

 

 

 

 

> evalf(eigenvectors(B)); # собственные числа + их

кратности + собственные вектора;

[4.142790972 0.1 10-8 I, 1.,

{[0.338459235 0.1074774346 10-8 I, 3.031853317 0.6310807598 10-9 I, 1. ]}], [ -5.897200018 0.2660254040 10-9 I, 1.,

{[0.638960942 0.3163025798 10-9 I, 0.296479288 0.3687332859 10-9 I, 1. ]}], [

-0.245590958 0.1466025404 10-8 I, 1.,

{[-2.448008414 0.1681121105 10-9 I, 4.024608571 0.1754222681 10-9 I, 1. ]}]

>evalf(eigenvals(B,C));

0.00885552382 0.36 10-9 I, -0.1647751158 0.91858429 10-11 I,

0.00035980130 0.3891858429 10-9 I

> evalm(C);

 

-20

232

-355

 

202

647

 

 

-20

 

 

-271

 

-296

-596

 

 

 

 

97

>charpoly(A,lambda); # Характеристический многочлен матрицы ;

3 2 2 79 158

>charmat(A,lambda); # Характеристическая матрица ;

1

-2

5

 

 

 

 

 

 

 

-2

8

0

 

 

 

 

4

3

 

 

 

7

 

 

 

 

>minpoly(A,lambda); # Минимальный многочлен (делитель) матрицы;

3 2 2 79 158

>jordan(A);# Жорданова форма матрицы;

2

0

0

 

 

 

 

 

 

79

0

 

0

 

 

 

 

 

 

0

79

 

0

 

> gausselim(A); # Приведение матрицы к треугольному

виду методом Гаусса;

1

2

-5

 

 

 

 

 

 

0

4

10

 

 

 

 

 

 

-79

0 0

2

>gaussjord(A); # Приведение матрицы к треугольному виду методом Гаусса - Жордана;

1

0

0

 

0

1

 

 

0

 

0

0

 

 

1

 

 

 

 

> definite(B,'positive_def'); # Определение положи-

тельной определенности матрицы (да - true,нет - false);

false

Символьные операции с матрицами: > restart: with(linalg):

Warning, the protected names norm and trace have been redefined and unprotected

> M1:=array(1..2,1..2,[[a1,b1],[c1,d1]]);

M1

a1

b1

:=

 

 

 

 

 

c1

d1

> M2:=array(1..2,1..2,[[a2,b2],[c2,d2]]);

98

M2

a2

b2

:=

 

 

 

 

 

c2

d2

> evalm(M1+M2);

 

 

 

 

a1 a2

 

b1 b2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c1 c2

 

d1 d2

 

 

 

 

 

 

> evalm(M1/M2);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a1 d2

 

 

b1 c2

 

 

 

 

 

a1 b2

 

 

 

b1 a2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a2 d2 b2 c2

 

a2 d2 b2 c2

 

a2 d2 b2 c2

 

 

 

 

a2 d2 b2 c2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c1 d2

 

 

d1 c2

 

 

 

 

 

c1 b2

 

 

 

 

d1 a2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a2 d2 b2 c2

 

 

a2 d2 b2 c2

 

a2 d2 b2 c2

 

a2 d2 b2 c2

 

 

 

 

 

> evalm(M1^2);

 

 

a12 b1 c1

 

a1 b1 b1 d1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c1

 

 

b1 c1 d1

2

 

 

 

 

 

 

 

 

c1 a1 d1

 

 

 

 

 

 

 

 

> evalm(sin(M1));

sin(a1)

 

sin(b1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sin(c1)

 

sin(d1 )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

> evalm(M1+z);

 

 

a1 z

 

b1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d1 z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

> M3:=array(1..2,1..2,[[x,x^2],[x^3,x^4]]);

 

 

 

 

 

M3

:=

x

x2

 

 

 

 

 

 

 

 

 

 

 

3

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

x

 

 

 

 

 

 

 

> map(diff,M3,x);# Функция map - применяет заданную

операцию к каждому элементу матрицы;

 

1

 

2 x

 

 

2

 

 

 

 

 

3

3 x

 

4 x

> map(int,%,x);

x

x2

 

 

 

 

 

 

 

 

3

4

 

 

x

 

x

 

> map(sin,M3);

sin(x)

sin(x2 )

 

 

 

 

 

 

 

 

sin(x

3

)

sin(x

4

 

 

 

 

)

 

 

 

 

 

 

># Генерация функциональной матрицы;

>f[1]:=(i,j)->x^i+y^j;

f1 := (i, j) xi yj

99

> AA:=matrix(2,3,f[1]);

x y

x y2

x y3

AA :=

2

2

2

2

 

 

3

x y

x y

x y

>restart:

>A:=Matrix(3,3,[[omega,2,3],[4,5,6],[7,8,9]],readonly=true);

 

2

3

 

4

5

 

A :=

6

 

7

8

 

 

9

 

 

 

 

>omega:=1:

>as:=Matrix(3,3,readonly=false);

0

0

0

 

0

0

 

as :=

0

 

0

0

 

 

0

 

 

 

 

> as:=A;

1

2

3

 

4

5

 

as :=

6

 

7

8

 

 

9

 

 

 

 

>omega:=2:

>print(as);

2

2

3

 

 

 

 

 

4

5

 

 

6

 

7

8

 

 

9

>restart:

>a:=(omega)->matrix(2,2,[[12,omega],[43,566]]);

a := matrix(2, 2, [[12, ], [43, 566]])

> a(23);

12

23

 

 

43

566

 

 

Решение систем линейных уравнений С*X=B: > restart:with(linalg):

Warning, the protected names norm and trace have been redefined and unprotected

100