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

Программные средства компьютерной математики. Практикум. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
804 Кб
Скачать
h [i,: =j] := 1 / (i + j − 1);
,
C:genmatrix(h,3,3);1

Задание матрицы, элементы которой являются функциями индексов. Можно задать такую матрицу без использования переменных диапазона, с помощью специальной функции 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

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