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

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

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

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

8.4.2.Алгебраические операции с матрицами

Рассмотрим применение функций matadd, delcols, delrows, addcol, addrow.

Команды matadd( A, B) или matadd( A, B, c1, c2) вычисляют сумму матриц (векторов) A и B одинаковой размерности. Опции c1, c2 – скалярные параметры, позволяющие находить линейную комбинацию c1*A + c2*B.

Функции delrows(A, k m), delcols(A, k m) возвращают подматри-

цу матрицы A, убирая строки, столбцы матрицы. Диапазон строк (столбцов), которые необходимо убрать, задается номерами r.. s Функции addrow( A, r1, r2, m), addcol( A, с1, с2, m) – формируют в строке (столбце) r2 матрицы линейную комбинацию строк (столбцов) r2+ m* r1. Параметрами являются: матрица А, r1, r2 – номера строк, c1, c2 – номера столбцов, m – скалярное выражение.

Рассмотрим примеры использования функций, описанных выше

>restart: with(linalg):

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

10 3

A:= 2 5 4

76 8

>C:= array( 1..3,1..3, [[1,2,3], [2,3,4], [3,4,5]]);

12 3

C:= 2 3 4

34 5

>B := array(1..3,1..3, identity);

B:= array(identity, 1..3,1..3, )

> matadd(A, B, 1, 5);

60 3

2 10 4

76 13

> delrows(C, 2..3);

[1,2,3]

71

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

>delcols(A, 1..1);

03

54

68

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

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

> u := vector(3, [-4,2,5]); u:= [–4,2,5]

> matadd(v, u, -2, 1);

[–2,–4,9]

> matadd(transpose(u), transpose(v));

transpose[–5,5,3])

> addrow(C,1,2,10);

1

2

3

12

23

34

3

4

5

> addcol(C,1,2,-x);

 

 

 

 

1

x + 2 3

 

 

 

2

–2x + 3

4

 

 

3

–3x + 4

5

Рассмотрим операции, связанные с операцией произведения multiply, scalarmul.

Команда multiply(A, B, ...) перемножает заданные матрицы. Параметрами команды являются матрицы A, B, …, размерности которых позволяют их перемножать (число столбцов первой матрицы должно совпадать с числом строк второй и т. д.). Вызов функции multiply(A, v), где A – матрица, а v – вектор, позволяет умножать матрицу на вектор. Следует иметь в виду, что число столбцов матрицы должно совпадать с числом элементов вектора.

Функция scalarmul(A, expr) возвращает матрицу, умноженную на заданное скалярное выражение. Параметры функции: A – матрица или вектор, expr – скалярное выражение.

Рассмотрим несколько примеров.

72

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

> restart:with(linalg):

> A := array( [[1,2],[3,4],[-1,0]] );

1 2 A:= 3 4 –1 0

> B := array( [[0,1],[1,0]] );

B:=

0

1

 

1

0

> C := array( [[-1,2],[-1,1]] );

C:=

–1

2

 

–1

1

> multiply(A, B, C);

–3

5

 

 

–7

11

 

1

–1

> scalarmul(A,3);

3

6

 

 

9

12

 

–3

0

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

[–2,–4,–6,–8]

> v:=vector(4,[2,x,6,-3]);

v:= [2,x,6,–3]

> scalarmul(v, x);

[2x,x2,6x,–3x]

> v:=vector([5,4]): multiply(A, v);

[13,31,–5]

> multiply(v, transpose(v));

25 20

20 16

73

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

8.4.3.Операции транспонирования и обращения матриц

Проиллюстрируем применение функций transpose, det, minor, inverse. Функция transpose(А) – вычисляет транспонированную матрицу (меняет элементы aij на aji). Если эта операция производится над вектором, то вектор-столбец превращается в векторстроку и наоборот.

Функция det(А) (det(А, sparse)) вычисляет определитель квадратной матрицы А.

Подпрограмма minor( A, i, j) находит минор элемента матрицы aij, получающийся вычеркиванием i-ой строки и j-ого столбца

Функция inverse(А) находит обратную матрицу, где А – заданная квадратная матрица. В случае если матрица вырожденная, то программа показывает ошибку.

Примеры

>restart: with(linalg):

>A := matrix(3,3, [-21,-9,11,8,3,-4,2,1,-1]);

A:=

–21

–9 11

8

3

–4

 

2

1

–1

> transpose(A);

 

 

 

 

–21

8

2

 

 

–9

3

1

 

11

–4 –1

>

det(A);

>

1

minor(A,2,1);

–9 11

1–1

> inverse(A);

12 3

0

–1

4

2

3

9

74

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

>B:=matrix(2,2);

B:=array(1..2,1..2, )

> det(B);

B1,1 B2,2B1,2 B2,1

8.4.4. Собственные числа и векторы матриц

Во многих случаях необходимо знать собственные числа и собственные векторы матрицы. Здесь полезны процедуры charmat, charpoly, eigenvals, eigenvectors, eigenvects.

Функция charmat(A, lambda) создает характеристическую матрицу λЕ – А, где А –заданная квадратная матрица, Е – единичная матрица, lambda – имя или алгебраическое выражение.

Функция charpoly(A, lambda) вычисляет характеристический полином матрицы λЕ – А (определитель характеристической матрицы)

Подпрограмма eigenvalues(А) и ее варианты eigenvalues(А, С), eigenvalues(А, ‘implicit’), eigenvalues(А, ‘radical’) вычисляют собственные числа заданной квадратной матрицы А. Если задана опция implicit, то используется программа среды Maple для нахождения корней алгебраических уравнений, если задано radical, то корни ищутся в радикалах.

Вызов функции eigenvalues(А, С) позволяет решать более общую задачу – находить корни уравнения λС – А =0.

Функция eigenvectors(А) (eigenvectors(А, ‘radical’) eigenvectors(А, ‘implicit’)) находит собственные числа и собственные векторы заданной квадратной матрицы А, то есть для каждого собственного числа λ решается линейная система (λЕ – А)X=0.

Если задана опция radical, Maple старается аналитически найти собственные числа и векторы (если степень полинома небольшая). Если задана опция implicit, Maple выражает собственные числа и собственные векторы через алгебраические выражения, используя программу поиска корней. Это всегда можно сделать. Если опция не задана, то по умолчанию используется опция radical. Приведем примеры применения данных функций.

>restart: with(linalg):

>A := matrix(3,3,[5,-3,2,6,-4,4,4,-4,5]);

75

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

A:=

 

5

–3

2

 

 

6

–4

4

 

 

 

 

4

–4

5

 

> charmat(A,lambda);

 

 

 

 

 

λ– 5

 

3

–2

 

 

 

 

–6

 

λ+4

–4

 

 

–4

 

4

λ–5

> charpoly(A,x);

x3–6x2+11x–6

> eigenvalues(A);

1,2,3

> eigenvectors(A);

[1,1,{[1,2,1]},[2,1,{[1,1,0]}],[3,1,{[1,2,2]}]

> eigenvalues(A, ‘implicit’);

1,2,3

> B:=matrix(3,3, [1,2,3,1,2,3,2,5,6]);

12 3

 

 

 

 

B:=

1

 

2

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

5

 

6

 

 

 

 

 

 

 

 

 

> eigenvalues(B);

 

 

9

 

 

 

1

 

 

 

 

9

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0,

 

+

93,

– 

 

93

 

 

 

 

 

2

 

2

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

2

 

 

 

 

 

> eigenvalues(B, ‘implicit’);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0, RootOf(–3–9_Z+_Z2)

> eigenvectors(B);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

1,

 

 

1

 

 

 

1

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

93,

 

1,1,

 

 

+

93

 

 

2

 

2

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

76

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

Контрольные вопросы

1.Способы задания матриц и векторов с помощью функций пакета.

2.Опишите применение функций matrix, vector, submatrix, BlockDiagonal, blockmatrix.

3.Назовите параметры функций angle, dotprod, crossprod.

4.Приведите пример использования команды grad

5.Опишите функции curl, diverge.

6.Функции transpose, det, minor, inverse.

7.Функции eigenvals, eigenvectors.

8.Функции ffgausselim, gausselim.

77

9. Решение задач линейного программирования

9.1. Постановка задачи

Задача линейного программирования в общей форме имеет вид:

n

f(x1, x1,.., xn) = cj xj  max; x = (x1, x1,.., xn)TG

j = 1

(9.1)

n

G = x Rn |aj xj bj , xj≥ 0 ; i = 1,m

j = 1

где f(x) – линейная целевая функция, G – область допустимых решений. Коэффициенты cj, bj, aij – известны.

Более кратко общая ЗЛП (1) может иметь векторное представление:

f(x) = cx max; xG = {x Rn |Ax b, x ≥ 0}

(9.2)

c = {cj}, A = {aij}, b = {bi}; i = 1,m; j = 1,n

Многие известные методы решения ЗЛП используют так называемую каноническую (или стандартную) форму, которая в матричном виде представима как

f(x) = cx max; xG = {x Rn |Ax = b, x ≥ 0}

(9.3)

c = {cj}, A = {aij}, b = {bi}; i = 1,m; j = 1,n

Замечание 1. Будем в дальнейшем предполагать, что система ограничений в (9.3) линейно независима (rangA=m) и их количество меньше, чем размерность задачи, т. е. m<n. Случай m=n не представляет интереса, поскольку система ограничений однозначно разрешима (rangA=m=n) либо несовместна (rangA<m=n) и задача оптимизации (9.3) теряет смысл.

Замечание 2. Доказано, что возможны случаи при решении ЗЛП (9.1)–(9.3):

78

9.1. Постановка задачи

Задача разрешима:

Оптимальное решение единственно;

Оптимальное решение не единственно.

Задача не разрешима:

Целевая функция на G не ограничена сверху;

G – пустое, т. е. система ограничений несовместна.

Для решения задач линейного программирования симплексметодом и сопутствующих вспомогательных манипуляций с линейными формами предназначен пакет расширения simplex, список объектов которого вызывается командой with(simplex), основными из которых являются собственно команды оптимизации maximize и minimize, нотация обращения к которым следую-

щая: maximize(f, C) maximize(f, C, vartype), maximize(f, C, vartype, ‘NewC’,‘transform’).Здесьf –линейнаяформа,задающаяцелевую функцию задачи (9.1); C – множество или список линейных соотношений, представленных в форме условия типа равенства и (или) неравенства, определяющих область G систем ограничений (9.1).

Остальные параметры этих функций являются необязательными, опционно задаваемыми. Так, параметр vartype может принимать значение NONNEGATIVE (задавая условие неотрицательности допустимых решений), или – UNRESTRICTED (снимая условия неотрицательности допустимых решений); NewC, transform – вспомогательные параметры строкового типа (например, первый из них в форме множества или списка возвращает альтернативную форму записи системы ограничений С).

9.2. Особенности применения пакета simplex

Основными командами пакета являются maximize и minimize, возвращающие оптимальные решения на максимум или минимум задачи линейного программирования. Структура обращения к ним следующая [7]:

maximize ( f, C), или maximize ( f , C, vartype), или

maximize ( f , C, vartype, ‘NewC’, ‘transform’), а используемые параметры и опции: f – линейная оптимизируемая функция; C – множество или список линейных условий; vartype – опция, принимающая значение NONNEGATIVE, указывающая на неотрицательность переменных, или – UNRESTRICTED, снимающая ограничения на знак переменных; NewC – опция типа множества

79

9. Решение задач линейного программирования

или списка, возвращающая линейные условия рассматриваемой задачи, представленные в альтернативной форме. Обращение к функции minimize аналогично.

Рассмотрим особенности их применения для решения задач линейного программирования. Например:

I . Задача (9.1) разрешима:

>restart: with(simplex):

>maximize(x+2*y, {x+3*y <= 3, 2*x+y <= 2});

y = 

4

, x = 

3

 

 

 

 

5

5

 

> minimize( x+2*y, {x+ 3*y >= 3, 2*x + y >= 4});

y = 

2

, x = 

9

 

 

 

 

5

5

 

>fun:=(x,y,z)->x+2*y–z:

>cnds:={x+3*y+2*z<=3,2*x+y+3*z<=5,-3*x+4*y+5*z<=4}:

>rez:=maximize(fun(x,y,z),cnds union{x>=0,y>=0,z>=0}); fopt=value(fun(rez[2],rez[3], rez[1]));

12 1 res:= z = 0, x =  5, y = 5

14 fopt = x + 2y – z =   5

> maximize( x+2*y, {4*x+ 2*y <= 5, 3*x + y >= 6});

x = 

7

, y = 

–9

 

 

2

5

> maximize( x+2*y, {4*x+ 2*y <= 5, 3*x + y >= 6});

x = 

7

, y = 

–9

 

 

2

5

80

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