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

Инструментальные средства математического моделирования. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
870 Кб
Скачать

8.1.Решение систем линейных уравнений

>restart: with(LinearAlgebra):

>M:=Matrix(1..3,1..3,(i,j)->(i-j/2)^j,datatype=float, storage=sparse);

.500000000000000000 0. –.125000000000000000

1.500000000000000000 1. .125000000000000000

2.500000000000000000 4. 3.375000000000000000

> f:=Vector(3,(i)->(-2)^i,datatype=float);

–2. f:= 4.

8.

> RSLT:=LinearSolve(M,f,method=’none’);

RSLT:=

–8.75000000000000000

19.5000000000000000

 

19.

В случае неединственного решения системы с вырожденной

расширенной матрицей Cможно задать имя свободной переменной free=’x’ :

> C:=<<2,0,2,1>|<5,1,3,4>|<13,5,5,10>|<35,19,9,22>|<1 5,-1,13,14>>;

 

2

5

13

35

15

C:=

0

1

5

19

–1

 

2

3

5

9

13

14 10 22 14

Тогда решение находится через свободную переменную:

> RES:=LinearSolve(C, free=’x’);

61

8. Технологии решения задач линейной алгебры в среде Maple V

–2–6x4 RES:= 9+11–2–6xx4

x4

4

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

>restart: with(LinearAlgebra):

>G:=<<2.8,3.8,-3.2>|<2.5,-2.8, 3.3>|<5.6,7.6,-6.4>>; f:=<4.5,7.1,6.3>;

2.8 2.5 5.6 G:= 3.8 –2.8 7.6 –3.2 3.3 –6.4

4.5 f:= 7.1 6.3

Сформируем M – расширенную матрицу системы

> M:=<<2.8,3.8,-3.2>|<2.5,-2.8, 3.3>|<5.6,7.6,- 6.4>|<4.5,7.1,6.3>>;

G:=

2.8

2.5

5.6

4.5

3.8

–2.8

7.6

7.1

 

–3.2

3.3

–6.4

6.3

62

8.1. Решение систем линейных уравнений

Вычислим Dt – определитель основной матрицы G системы,

ее ранг R и ранг RkM расширенной матрицы M:

> Dt:=Determinant(G); R:=Rank(G); RkM:=Rank(M);

Dt:=0.

R:=2

RkM:=3

Откуда видно, что на основании теоремы Кронекера-Капелли (R<RkM) рассматриваемая система несовместна. Несмотря на это, продолжим формальное применение команд среды для получения решения системы

> rez:=LinearSolve(G,f);

2.79898457117914360 1016 res:= –.160322952710495958 –1.39949228558957180 1016

Проверим степень удовлетворения полученного формального решения, определяемого вектором rez, исходной системе, вычислив невязку

> Delta:=Multiply(G,rez)-f;

–4.50000000000000000 res:= –7.09999999999999964 –6.29999999999999982

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

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

63

8. Технологии решения задач линейной алгебры в среде Maple V

Замечание 2. Вызвать справку демонстрационных примеров в среде Maple позволяет команда example с аргументом, являю-

щимся объектом справки, например:

> example(LinearSolve);

8.2. Манипуляции с векторами

Задатьвектордлиныnможноспомощьюфункцииvectorпакета linalg: vector([x1, ..., xn]), или vector(n, [x1, ..., xn]), или vector(n), или vector(n, f).

Здесь параметры: x1,...,xn – элементы вектора алгебраического типа; n – размерность вектора; f – функция для создания элементов вектора.

Вызов функции vector([x1, ..., xn]) или vector(n, [x1, ..., xn])

создают вектор (массив размерности 1) длины n с данными элементами.

Вызов функции vector(n) создает вектор длины n с неопределенными элементами.

Вызов функции vector(n, f) создает вектор длины n, элементы которого вычисляются как значения функции в точках 1,2,..,n.

Эквивалент vector(1..n, [f(1), f(2), ..., f(n)]).

Приведем примеры использования данной функции

>with(linalg):

>vector( [1,-2,3,5] );

[1,–2,3,5]

> vector(3);

[?1,?2,?3]

> vector(3,1);

[1,1,1]

> f := x -> x^2-1: v := vector(3, f);

[0,3,8]

> v[2];

3

64

8.2. Манипуляции с векторами

Размерность вектора возвращается с помощью команды vectdim

vectdim(v) или vectdim(L), где параметры v – вектор, L – спи-

сок. Примеры

>with(linalg):

>v:= vector([x,y,z]);

ν:=[x,y,z]

> vectdim(v);

3

> vectdim( [-1,4,2,-3] );

4

> u:= vector(3);

u:=array(1…3, )

> vectdim(u);

3

Скалярное произведение вектора находится с помощью функ-

ции dotprod: dotprod(u,v) или dotprod(u,v,‘orthogonal’). Параме-

тры u, v – списки или векторы одинаковой размерности.

Программа позволяет вычислять скалярное произведение векторов с комплексными элементами. Если функция содержит

только два параметра, то скалярное произведение вычисляется

n

по формуле u [j] · v [j], где v [j] сопряжено v [j].

j = 1

• Если третий аргумент 'orthogonal’ присутствует, то скалярное

n

произведение вычисляется по формуле u [j] · v [j].

j = 1

Если координаты вектора действительны, то обе формулы эквивалентны.

Примеры использования данной процедуры

>with(linalg):

>u:= vector( [x,y,z] );

65

8. Технологии решения задач линейной алгебры в среде Maple V

u:=[x,y,z]

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

ν:=[1,2,3]

> dotprod(u,v);

x + 2y + 3z

> a:=[1,-i]; b:=[i,1];

a:=[1,–i]

b:=[i,1]

> dotprod(a,b);

i – i

> dotprod(a,b,‘orthogonal’);

0

Угол между векторами вычисляется с помощью функции angle(u, v).

Здесь u,v – n–размерные векторы.

Программа angle(u, v) вычисляет угол theta между n-размер-

ными векторами u и v по формуле cos(theta) = u.v / (|u| |v|).

Примеры использования данной процедуры

>with(linalg):

>angle(vector([1,2,-2]), vector([2,1,2]));

12π

> angle(array([1,1]), array([1,0]));

14π

> angle(vector([1,0]), vector([3,0]));

1 arccos 3√9

Векторное произведение векторов определяется с помощью функции crossprod(u, v), где u, v – списки или векторы, состоящие из трех элементов.

66

8.3. Основные операторы дифференциальной геометрии

Эта функция вычисляет вектор по двум заданным векторам по формулам ([u[2]*v[3]-u[3]*v[2], u[3]*v[1]-u[1]*v[3], u[1]*v[2]- u[2]*v[1]]).

Примеры применения функции crossprod( u, v).

>with(linalg):

>v1:= vector([3,-2,1]);

ν1:=[3,–2,1]

> v2:= vector([1,3,-1]);

ν2:=[1,3,–1]

> crossprod(v1,v2);

[–1,4,11]

8.3. Основные операторы дифференциальной геометрии

Особого интереса заслуживают команды вычисления различных дифференциальных операторов, таких как градиент, дивергенция, ротор и др. Градиент выражения вычисляется с помощью функции grad(expr, v), или grad( expr, v, co), параметры которых expr – скалярное выражение, v – вектор или список переменных, co – опция, используемая при вычислении градиента в ортогональной криволинейной системе координат.

Функция grad вычисляет вектор-градиент выражения по фор-

муле vector( [diff(expr, v[1]), diff(expr, v[2]), ...] ) и засылает ре-

зультат в v.

Если выражение expr зависит от трех переменных, то размерность вектора-градиента равна 3.

Если присутствует третий аргумент co функции grad, то градиент вычисляется в ортогональной криволинейной системе координат.

Примеры использования функции

>with(linalg):

>grad(4*y^2 – 5*x*z^2, vector([x,y,z]));

[–5 z2,8y,–10xz]

> f:= r^2*cos(2*theta)*z^4: v:= [r,theta,z]: grad(f,v,coords=cylindrical);

67

8. Технологии решения задач линейной алгебры в среде Maple V

[2 r cos(2θ) z4,–2 r sin(2θ) z4,4 r2 cos(2θ) z3]

> g:=r^2*sin(theta)*cos(phi): v:=[r,theta,phi]: grad(g, v, coords=spherical);

[2 r sin(θ) cos(φ), r cos (θ) cos(φ), r sin(φ) ]

Потенциал векторного поля вычисляется с помощью процедуры potential(f,var,’V’). Здесь параметры f – векторное поле, var – список переменных, ‘V’ – имя, в которое потенциал засылается. Функция potential определяет, является ли данное векторное поле потенциальным.

Функция potential выводит true, если поле f имеет скалярный потенциал, и false, если скалярный потенциал не существует.

Если скалярный потенциал существует, то он засылается в V. Потенциал находится из условия grad V = f.

Приведем примеры применения функции

>with(linalg):

>f:= [3*y^3 + 8*x*y^2, 9*x*y^2 + 8*x^2*y];

f = [3y3 + 8xy2, 9xy2 + 8x2y]

> potential(f,[x,y],’V’);

true

> V;

3y3x + 4x2y2

> g:=[3*x^2,3*y^2,3*z^2];

g := [3x2, 3y2, 3z2]

> potential(g,[x,y,z],’P’); true

> P;

x3 + y3 + z3

Ротор вектора вычисляется с помощью функции curl(f, v), или curl(f, v, co).

Здесь f – трехмерная вектор-функция трех переменных, v – список или вектор трех переменных, co – опция, используемая

68

8.3. Основные операторы дифференциальной геометрии

для вычисления ротора в ортогональной криволинейной системе координат.

Приведем примеры применения функции

>with(linalg):

>f:=[x^2-y*z,2*x*z-y,x*y*z]: v:=[x,y,z]: curl(f,v);

[xz–2x, y–yz, 3z]

> g:=[r*cos(theta),z*sin(theta),z]:v:=[r,theta,z]: curl(g,v,coords=cylindrical);

sin(θ), 0, 2sin(θ) + r sin(θ) r

Операция дивергенции осуществляется с помощью функции diverge(f, v), или diverge(f, v, co) с параметрами f, v – векторы или списки выражений одной и той же длины, coопция, используемая для вычисления дивергенции в ортогональной криволинейной системе координат.

Примеры применения рассматриваемой функции:

>with(linalg):

>f:=vector([x*y, z*y^2, x*z]): v:= vector([x,y,z]): diverge(f,v);

y + 2yz + x

> h:=vector([r*cos(theta),z*sin(theta),z^2]): v:=vector([r,theta,z]): diverge(h,v,coords=cylindrical);

2rcos(θ) + zcos(θ) + 2zr

r

> i:=vector([r,sin(theta)*r,cos(phi)*r]): v:=vector([r,theta,phi]): diverge(i,v,coords=spherical);

3sin(θ) + 2sin(θ)cos(θ) – sin(φ)

sin(θ)

69

8. Технологии решения задач линейной алгебры в среде Maple V

8.4. Манипуляции с матрицами

Способы задания матриц в среде Maple были рассмотрены в подразделе 8.1.

8.4.1. Простейшие команды для работы с матрицами

Рассмотрим простейшие команды для работы с матрицами coll, row, coldim, rowdim, rank.

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

манды row( A, i), или row( A, i.. k) (col( A, i), или col( A, i.. k)), где

A – матрица, параметры i,k – заданные номера строк (столбцов). Команды coldim(А), rowdim(А) определяют размерность столбцов или строк матрицы А. Матрица А является параметром функ-

ций.

Функция rank(А) вычисляет ранг матрицы А, приводя матрицу с помощью метода исключений Гаусса к верхнетреугольному виду. Ранг матрицы – число ненулевых строк в преобразованной матрице.

Приведем примеры применения описанных команд

>with(linalg):

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

A:=

1

2

3

4

5

6

7

8

 

9

1

2

3

> row(A,2);

[5,6,7,8]

> col(A,2..3);

[2,6,1], [3,7,2]

> rowdim(A);

3

> coldim(A);

4

> rank(A);

3

70

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]