Программные средства компьютерной математики. Практикум. Учебное пособие
.pdf
Задание матрицы, элементы которой являются функциями индексов. Можно задать такую матрицу без использования переменных диапазона, с помощью специальной функции matrix(4,5,f), описав заранее функцию f.
Например: (%i14)
(%o14)
(%i5)
(C)
2.Основные операторы и функции для работы с массивами
Косновным матричным операциям можно отнести:
-арифметические – поэлементное сложение ( + ), вычитание ( - ), матричное умножение (*), которые вводятся с помощью клавиш;
-специфические – транспонирование, вычисление обратной матрицы, определителя, векторного произведения (только для трехкомпонентных векторов), суммы элементов вектора.
|
Пример: |
|
|
(%i22) |
A: matrix( |
||
|
[1,4,3], |
|
|
|
[4,5,6], |
|
|
|
[7,10,9] |
6 |
|
|
4 |
5 |
|
(A) |
);1 |
4 |
3 |
|
7 |
10 |
9 |
(%o23) |
1 |
4 |
7 |
(%i23) |
4 |
5 |
10 |
transpose(A); |
|||
(%i24) |
3 |
6 |
9 |
invert(A); |
|||
21
(%o24) |
|
|
|
|
|
|
||||||
|
||||||||||||
24 |
|
|
|
|
|
|
|
|
|
|
||
(%i28) |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|||
determinant(A); |
||||||||||||
(%o28) |
|
|
|
|
||||||||
(%i29) |
A.C; |
|
|
|
|
|||||||
(%o29) |
4 |
|
|
|
|
|
||||||
|
|
|
|
|||||||||
|
15 |
|
|
|
|
|
|
|||||
|
|
|
|
|
||||||||
Некоторые матричные операции заданы в MathCAD в виде функций (для их вставки следует выбрать команду меню Insert
→Function→Vector and Matrix).
Рассмотрим некоторые из них:
·rank(M); – возвращает ранг матрицы M;
·mattrace(M) – возвращает след (сумму диагональных элементов) матрицы M;
·norme(M) – возвращает евклидову норму матрицыM (корень из суммы квадратов всех элементов).
3. Объединение матриц и выделение подматрицы
В wxMaxima можно присоединять матрицы СПРАВА с помощью функции addcol (аргументами может быть любое количество матриц с одинаковым количеством строк) и СНИЗУ с помощью функции addrow (аргументами должны быть матрицы с одинаковым количеством столбцов).
Например:
(%i16) b:addrow(C,[10,20,30],[1,2,3]);
22
(b) |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
20 |
|
|
|||||||||
|
|
10 |
30 |
|||||||||
(%i17) |
1 |
2 |
|
3 |
||||||||
addcol(C,[1, ,1]); |
||||||||||||
|
|
|
|
|
|
|
|
|
|
1 |
||
|
|
|
|
|
|
|
|
|
||||
|
1 |
|
|
|
|
|
|
|||||
(%o17) |
|
|
|
|
|
|
|
1 |
||||
|
|
|
|
|
|
|
1 |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Функция submatrix возвращает новую матрицу, состоящую из подматрицы заданной. Синтаксис вызова:
submatrix (i_1, ..., i_m, M, j_1, ..., j_n), submatrix (i_1, ..., i_m, M),
submatrix (M, j_1, ..., j_n).
Подматрица строится следующим образом: из матрицы M
удаляются строки i_1,...,i_m и j_1,...,j_n.
Например:
(%i14) |
h [i, j] := 1 / (i + j − 1); |
||||||||
(%i19) |
, |
: = |
|
|
|
|
|
||
(%o14) |
C:genmatrix(h,3,3); |
||||||||
(C) |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
||||
(%i20) |
submatrix(3,%,3); |
||||||||
|
|
|
|
|
|
|
|||
(%o20) |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
23
4. Собственные вектора и собственные числа
Для вычисления собственных чисел и собственных векторов матрицы обычно используют специальные :функции eigenvalues и eigenvectors.
Функция eigenvalues вычисляет собственные значения матрицы аналитически, если это возможно. Для нахождения корней характеристического полинома используется функцияsolve. Результат - возвращаемый eigenvalues - список, содержащий два подсписка. Первый содержит собственные значения, а второй — их кратности.
Функция eigenvectors аналитически вычисляет собственные значения и собственные вектора матрицы, если это возможно. Она возвращает список, первый элемент которого — список собственных чисел (аналогично "eigenvalues"), а далее идут собственные векторы, каждый из которых представлен как список своих проекций.
Например: |
|
|
|
|
|
|
|
|
|
|
|
|
||||||
(%i34) |
|
|
[−4,11,1],[1,1,1] |
|
|
|
|
|
|
|
|
|
||||||
|
|
eigenvalues(A); |
|
|
|
|
|
|
|
|
|
|||||||
(%o34) |
|
|
|
|
|
|
|
|
|
|
|
|
|
, − |
|
отличается, [1,1,1] , [1, −4,1]от |
функции |
|
Функция−4,11,1],uniteigenvectors[1,1,1] , 1, − |
|
|
||||||||||||||||
(%i35) |
[ |
|
eigenvectors(A); |
|
|
|
|
|
|
|
|
|
||||||
(%o35) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
eigenvectors тем, что возвращает нормированные на единицу соб- |
||||||||||||||||||
ственные векторы: |
|
|
|
|
|
|
|
|
|
|
|
|
||||||
(%i38) |
|
|
uniteigenvectors(A) ; |
|
|
|
|
|
|
|||||||||
(%o38) |
√ |
|
, √ |
|
, √ |
|
, |
•√ |
|
, − |
|
|
|
, |
·√ |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
||||||||||||
Задания
1. Задать матрицу A нужного размера, элементы которой являются заданными функциями индексов:
·найти сумму диагональных элементов матрицы А;
·транспонировать матрицу A;
24
·добавить к матрицеА столбцы или строки так, чтобы она стала квадратной, назвать полученную матрицу B;
·найти определитель матрицы B и обратную ей матрицу (если определитель окажется равным нулю, измените какойнибудь элемент матрицы так, чтобы матрица B стала обратимой);
·найти ранг матрицы В;
·выделить из матрицыB подматрицу C, содержащую нижние 3 строки и правые 2 столбца матрицы B;
·вырезать из матрицы C среднюю строку.
1)4×3, Аi.j=i - j;
2)3×5, Аi.j=i2 - j2;
3)4×5, Аi.j=i + 1/j;
4)5×4, Аi.j=i2/j2;
5)3×4, Аi.j=i + j2;
6)5×3, Аi.j=i + j;
7)4×6, Аi.j=i∙j;
8)5×6, Аi.j=i2 + j2;
9)6×4, Аi.j=i2 – j;
10)4×5, Аi.j=i + j2 ;
11)4×6, Аi.j=i2 – j;
12)4×3, Аi.j=i + 1/j;
13)3×4, Аi.j=i∙j;
14)6×4, Аi.j=i – j;
15)3×5, Аi.j=i2/j2;
16)5×3, Аi.j=i2 + j2;
17)5×4, Аi.j=i + j;
18)5×6, Аi.j=i2 - j2.
2. Задать с клавиатуры матрицы A, B и C заданной размерности. Склеить эти 3 матрицы в одну так, чтобы она получилась квадратной. Найти собственные векторы и собственные значения полученной матрицы:
1), 7), 13) 3×4, 3×2, 3×6; 2), 8), 14) 5×2, 5×4, 1×6; 3), 9), 15) 6×2, 1×2, 7×5; 4), 10), 16) 5×3, 5×4, 2×7;
25
5), 11) ,17) 2×4, 4×4, 6×2; 6), 12), 18) 4×3 2×3, 6×3.
Практическая работа № 4. Решение уравнений и систем уравнений
Цель работы: изучить способы решения линейных и нелинейных уравнений, а также систем уравнений.
Теоретические сведения
1. Численный поиск корня уравнения
Для решения уравнения с одним неизвестным в пакете Maxima предусмотрена функция findroot. Синтаксис вызова:
findroot(expr,x,a,b), findroot(f,a,b).
Поиск корня функции f или выражения expr относительно переменной x осуществляется в пределахa ≤ x ≤ b. Для поиска корней используется метод деления пополам или, если исследуемая функция достаточно гладкая, метод линейной интерполяции.
Для задания отрезка локализации корня удобно сначала по-
|
( ) = ln − |
+ 2 |
|
|
строить график функции, задающей уравнение. Например, най- |
||||
дем корни |
уравнения |
|
. Для этого построим график |
|
функции |
|
|
|
: |
(%i58) |
plot2d([log(x)ln =−x+2],−2[x,−1,5]); |
|||
(%i55) find_root(log(x)−x+2,x,2,4);
26
(%i59) |
3.146193220620582 |
||
|
log( ) − |
+ 2 |
|
(%o55) |
f:log(x)−x+2; |
||
(%o60) |
3.146193220620582 |
||
(f) |
|
|
|
(%i60) |
find |
root(f,2,4); |
|
Основная функция пакетаnewton1 предназначена для решения уравнений методом Ньютона. Синтаксис вызова:
newton (expr, x, x_0, eps).
Данная функция возвращает приближенное решение уравнения expr = 0 методом Ньютона, рассматривая expr как функцию одной переменной, x. Поиск начинается с x = x_0 и производится, пока не будет достигнуто условие abs (expr)<eps. Функция newton допускает наличие неопределенных переменных в выражении expr, при этом выполнение условияabs (expr)<eps, оценивается как истинное или ложное. Таким образом, нет необходимости оценивать expr только как число. Для использования пакета необходимо загрузить его командойload(newton1). Примеры использования функции: −5.41newton.0 . 0: 1.
(%i61) load (newton1);
(%o61)
(%o62)
(%i62) newton(log(x)3.149938393803694−x+2,x,2,1/100);
2. Нахождение корней полиномов
Все корни полинома(действительные и комплексные)
можно найти при помощи функции allroots(eqn) , аргументом ко- |
||||||||
+ |
|
является |
выражение |
|
+ 2 |
− 1 = 0 |
|
|
торой |
|
полинома |
+ |
+ |
решение |
|||
|
. |
Например, |
для уравнения |
|
||||
|
|
+ |
||||||
имеет вид: |
|
|
|
|
|
|
||
(%o32) |
|
= −1.618033988749896 |
|
|
|
|
|
|
(%i32) |
|
allroots(x^ |
+2·x^2−1); |
|
|
|
|
|
Коэффициенты полинома и корни могут быть и комплекс- |
||||||||
ными. Например, для уравнения |
+ 1 = 0: |
|
|
|
||||
27
(%o33) |
[ |
= 1.0 , |
= −1.0 ] |
|
|
|
|
|||||
(%i33) |
|
|
allroots(x^2+ ); |
|
|
|
|
|||||
3. |
Нахождение корней уравнений аналитически(путем |
|
||||||||||
символьных преобразований) |
|
|
|
|
||||||||
Для вычисления корней единичных полиномиальных урав- |
|
|||||||||||
нений используется функция realroots. Варианты синтаксиса: |
|
|||||||||||
realroots (expr, bound); |
|
|
|
|
||||||||
realroots (eqn, bound); |
|
|
|
|
||||||||
realroots (expr); |
|
|
|
|
|
|
|
|||||
realroots (eqn). |
|
|
|
|
|
|
|
|||||
Функция находит все корни выражения expr=0 или уравне- |
|
|||||||||||
(%i29) |
[ |
= −1] |
|
|
|
|
|
|
|
|||
ния eqn: |
|
|
|
|
|
|
|
|
|
|
|
|
(%i28) |
|
realroots(x^3+1); |
|
|
|
|
||||||
(%o28) |
|
|
|
− |
|
|
−1 |
|
|
|
|
|
|
|
eqn:(x^2−x)/(x^2 x+1)−(x^2−x+2)/(x^2−x−2)−1; |
|
|||||||||
(eqn) |
|
|
|
|
|
|
|
|
|
|
|
|
[ |
= 1, = 0] |
|
|
|
|
|
|
|||||
(%i31) |
|
|
|
|
|
|
||||||
|
realroots(eqn); |
|
|
|
+ 0.5, |
= 0.5 − |
|
|||||
(%o32) |
[ |
= 0.8660254037844386 |
|
|||||||||
(%o31) |
|
−0.8660254037844386 , |
= −1.0] |
|
|
|||||||
(%i32) |
|
|
allroots(x^3+1); |
|
|
|
|
|||||
4. |
Численный |
|
поиск |
решения |
системы |
уравнений |
||||||
и неравенства
Решение алгебраических уравнений и их систем осуществляется при помощи функции solve, в качестве параметров в первых квадратных скобках указывается список уравнений через запятую, во-вторых - список переменных, через запятую (либо несколько упрощённые формы записи):
solve (expr, x) solve (expr)
solve ([eqn_1, ..., eqn_n], [x_1, ..., x_n]).
Например:
(%i52) solve([x·y/(x+y)=a,x·z/(x+z)=b,y·z/(y+z)=c], [x,y,z]);
28
(%o52) |
= · |
· · |
· |
) , |
= |
|
·( |
· |
· |
· |
· |
|
|
(%o53) |
·( |
|
|
|
) |
|
|
· % , = −25 , . |
|||||
= −√2 · % , |
= −25 , |
|
|
= √2 |
|||||||||
(%i53) |
solve([x^2−y=23, x^ |
·y=50],[x,y]); |
|||||||||||
|
|
[ |
|
= 5, |
= |
|
2], [ |
= −5, |
= 2] |
||||
5. Решение систем линейных уравнений
а) Численный метод. Функция linsolve([expr_1, expr_2, ..., expr_m], [x_1, x_2,...,x_n]) решает список одновременных линейных уравнений [expr_1, expr_2, ..., expr_m] относительно списка переменных [x_1,...,x_n]. Выражения [expr_1 ,... , expr_m] могут быть полиномами указанных переменных и представляться в виде уравнений.
Например:
Решить системы линейных уравнений
(%i57) |
ex1:x+y+z+t=6; ex2:2·x−2·y+z+3·t=2; |
|||||||||||||
(ex2) |
+ + |
+ |
= 6 |
|
|
|
|
|
||||||
(ex3) |
ex3:3·x−y 2·z−t=8; |
|
= 2 |
|
||||||||||
− 2 · |
|
+2 · |
|
|
+ 3 · |
|
|
|||||||
(%o57) |
linsolve([ex1,ex ,ex3],[x,y,z,t]); |
|
||||||||||||
2 · |
|
− |
|
+ 3 · |
|
|
− = 8 |
|
||||||
(ex1) |
|
= |
|
|
|
|
, |
|
= |
|
|
|
, = % 1, = 0 |
|
|
3 · |
|
|
·% |
|
|
% |
|||||||
|
|
|
|
|
|
|
|
|
|
|||||
(ex2) |
|
− 4 · + 2 · |
= 1 |
|
|
|||||||||
(%i63) |
ex1:2·x−4·y+3·z=1; ex2:x−2·y+4·z=3; |
|||||||||||||
(ex3) |
4 · |
|
− 2 · + |
|
|
= 3 |
|
|
|
|
||||
(%i64) |
ex3:3·x−y+5·z=2; |
|
|
|
|
|
||||||||
5 · |
|
− |
|
+ 3 · |
|
|
= 2 |
|
|
|
|
|||
(ex1) |
[ |
= −1, |
= 0, |
|
= 1] |
|
|
|||||||
(%o64) |
|
|
|
|||||||||||
|
linsolve([ex1,ex2,ex3],[x,y,z]); |
|||||||||||||
29
б) Матричный метод. Пусть дано матричное уравнение A·X = B, где A - квадратная матрица размерности n; B - матрица размерности n × k; X - неизвестная матрица размерности n × k. Пусть A - невырожденная матрица (т.е. det(A) ≠ 0, тогда существует единственное решение этого уравнения. Решение можно найти по формуле X = A−1B
(%i65) |
A: matrix( |
|
|
(A) |
[2,−4,3], |
3 |
|
2 |
−4 |
||
|
[1,−2,4], |
4 |
|
|
1 |
−2 |
|
|
[3,−1,5]); |
5 |
|
(%i66) |
3 |
−1 |
|
B: matrix( |
|
||
|
[1], |
|
|
|
[3], |
|
|
|
[2] |
|
|
|
3 |
|
|
(B) |
);1 |
|
|
|
2 |
|
|
(X) |
−1 |
|
|
(%i67) |
0 |
|
|
X:invert(A).B; |
|||
в) |
1 |
|
|
|
Метод Крамера: |
||
(%i65) |
|
A: matrix( |
|
|
[2,−4,3], |
|
|
(A) |
[1,−2,4], |
|
|
);2 −4 3 |
|||
|
[3,−1,5] |
4 |
|
|
1 |
−2 |
|
(%i68) |
3− |
−1 |
5 |
|
A1: matrix( |
||
|
[1, |
4,3], |
|
|
[3,−2,4], |
|
|
30
