Инструментальные средства математического моделирования. Учебное пособие
.pdf
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
