Функции для решения задач линейной алгебры в Scilab

Основные функции для работы с матрицами рассмотрены в статье Массивы в Scilab.
Специальные функции для работы с матрицами рассмотрены в статье Специальные матричные функции в Scilab.

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

Характериститики матрицы

Найдём определитель матрицы A: функция det() в Scilab


A = [1 0 3; 2 7 1; 0 4 1];
d = det(A); 

\( \begin{matrix} A = \begin{pmatrix} 1 & 0 & 3 \\ 2 & 7 & 1 \\ 0 & 4 & 1 \end{pmatrix} & d = 27 \end{matrix} \)

Найдём ранг матрицы A: функция rank() в Scilab


A = [1 0 3; 2 7 1; 0 4 1];
r = rank(A); 

\( \begin{matrix} A = \begin{pmatrix} 1 & 0 & 3 \\ 2 & 7 & 1 \\ 0 & 4 & 1 \end{pmatrix} & r = 3 \end{matrix} \)

Найдём норму матрицы: функция norm(A,option) в Scilab

option - число или строка. Принимает значения:
2 - вычисляет 2-ю норму матрицы (её наибольшее сингулярное значение).
1 - вычисляет 1-ю норму матрицы (её наибольшая сумма в столбцах).
'inf' - вычисляет бесконечную норму матрицы (её наибольшая сумма в строках).
'fro' - вычисляет евклидову норму матрицы (корень из суммы квадратов всех элементов матрицы).


A = [1 0 3; 2 7 1; 0 4 1];
  
nrm2 = norm(A, 2);
nrm1 = norm(A, 1);
nrm_inf = norm(A, 'inf');
nrm_fro = norm(A, 'fro');

\( \begin{matrix} A = \begin{pmatrix} 1 & 0 & 3 \\ 2 & 7 & 1 \\ 0 & 4 & 1 \end{pmatrix} & |A|_2 = 8.3940402 & |A|_1 = 11 & |A|_{inf} = 10 & |A|_{fro} = 9 \end{matrix} \)

Найдём число обусловленности матрицы A по 2-й норме: функция сond() в Scilab


A = [1 0 3; 2 7 1; 0 4 1];
с = сond(A); 

\( \begin{matrix} A = \begin{pmatrix} 1 & 0 & 3 \\ 2 & 7 & 1 \\ 0 & 4 & 1 \end{pmatrix} & с = 8.0199286 \end{matrix} \)

Функции для решения систем линейных уравненений

Найдём собственные значения и собственные вектора матрицы A: функция spec() в Scilab


A = [1 2; -1 4];
[V, z] = spec(A); 
  
  
 z  = 

  -0.8944272 + 0.i  -0.7071068 + 0.i
  -0.4472136 + 0.i  -0.7071068 + 0.i
 V  = 

   2. + 0.i   0. + 0.i
   0. + 0.i   3. + 0.i  

Найдём обратную матрицу к A: функция inv() в Scilab


A = [1 0 3; 2 7 1; 0 4 1];
Ai = inv(A);  

\( \begin{matrix} A = \begin{pmatrix} 1 & 0 & 3 \\ 2 & 7 & 1 \\ 0 & 4 & 1 \end{pmatrix}& A^{-1} = \begin{pmatrix} 0.1111111 & 0.4444444 & -0.7777778\\ -0.0740741 & 0.037037 & 0.1851852\\ 0.2962963 & -0.1481481 & 0.2592593 \end{pmatrix} \\ A\cdot A^{-1} = E \end{matrix} \)

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


B = [1 2 3;1 4 5;1 6 7];
Bi = inv(B);  

\( \begin{matrix} B = \begin{pmatrix} 1 & 2 & 3 \\ 1 & 4 & 5 \\ 1 & 6 & 7 \end{pmatrix}& det(B) = 0 \end{matrix} \)

Решаем СЛАУ \( A\cdot x+b=0\): функция linsolve(A,b) в Scilab

1) Решим систему линейных алгебраических уравнений привычного вида:

\( \begin{cases} 2x_1 + x_2 = 1 \\ x_1 - 2x_2 = 3 \end{cases} \)

Для начала её нужно привести к виду, который принимает Scilab - перенести вектор свободных членов влево:

\( \begin{cases} 2x_1 + x_2 -1 = 0 \\ x_1 - 2x_2 - 3 =0 \end{cases} \)

Теперь определим вид матрицы А и вектора b:

\( \begin{matrix} A = \begin{pmatrix} 2 & 1 \\ 1 & -2 \end{pmatrix}& b = \begin{pmatrix} -1 \\ -3 \end{pmatrix} & A\cdot x+b=0 \end{matrix} \)

Зададим матрицу и вектор-столбец в Scilab и решим его силами полученную СЛАУ:


A = [2 1; 1 -2];
b = [-1; -3];  
  
X = linsolve(A, b);  

Получим красивый ответ:

\( X = \begin{pmatrix} 1 \\ -1 \end{pmatrix} \)

2) Если СЛАУ имеет бесконечное число решений, Scilab выведет только одно из них.

Решим систему линейных алгебраических уравнений вида:

\( \begin{cases} x_1 - 3x_2 = 1 \\ 2x_1 - 6x_2 = 2 \end{cases} \)

Зададим матрицу и вектор-столбец в Scilab:


A = [1 -3; 2 -6];
b = [-1; -2];  
  
X = linsolve(A, b);  

Получим одно из возможных решений:

\( X = \begin{pmatrix} 0.1 \\ -0.3 \end{pmatrix} \)

3) Если возникает ошибка Конфликтующие линейные ограничения, значит система не имеет решений.

Решим систему линейных алгебраических уравнений вида:

\( \begin{cases} x_1 - x_2 = 1 \\ 2x_1 - 2x_2 = -1 \end{cases} \)

Зададим матрицу и вектор-столбец в Scilab:


A = [1 -1;2 -2]; 
b = [1;-1];  
  
X = linsolve(A, b);  

Получим ошибку: ВНИМАНИЕ: Конфликтующие линейные ограничения.

Чтобы убедиться, что в матрице системы есть ЛНЗ строки или столбцы, потребуется приведение матрицы к ступенчатому виду.

Приводим систему линейных уравнений к ступенчатому виду: функция rref(A) в Scilab

Приведём матрицу к треугольной форме методом Гаусса:


A = [1 0 3; 2 7 1; 0 4 1];
  
rref(A, b);  

\( \begin{matrix} A = \begin{pmatrix} 1 & 0 & 3 \\ 2 & 7 & 1 \\ 0 & 4 & 1 \end{pmatrix} & \tilde{} & \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} \end{matrix} \)

Функции разложения матрицы

.

Треугольное разложение матрицы \(A = L\cdot U\): функция lu() в Scilab


A = [1 2 3; 2 7 1; 2 4 1];
[L, U] = lu(A)

\(L-\) нижне-треугольная матрица, \(U-\) верхне-треугольная матрица:

\( \begin{matrix} A = \begin{pmatrix} 1 & 2 & 3 \\ 2 & 7 & 1 \\ 2 & 4 & 1 \end{pmatrix}\\ L = \begin{pmatrix} 0.5 & 0.5 & 1\\ 1 & 0 & 0\\ 1 & 1 & 0 \end{pmatrix} & U = \begin{pmatrix} 2. & 7. & 1. \\ 0.& -3. & 0. \\ 0. & 0.& 2.5 \end{pmatrix} \end{matrix} \)

Разложение матрицы на ортогональную и верхне-треугольную \(A = Q\cdot R\): функция qr() в Scilab


A = [1 2 3; 2 7 1; 2 4 1];
[L, U] = lu(A)

\(Q-\) ортогональная матрица, \(U-\) верхне-треугольная матрица:

\( \begin{matrix} A = \begin{pmatrix} 1 & 2 & 3 \\ 2 & 7 & 1 \\ 2 & 4 & 1 \end{pmatrix}\\ Q = \begin{pmatrix} -0.3333333 & 0.2981424 & -0.8944272\\ -0.6666667 & -0.745356 & 0. \\ -0.6666667 & 0.5962848 & 0.4472136 \end{pmatrix} & R = \begin{pmatrix} -3. & -8. & -2.3333333\\ 0. & -2.236068 & 0.745356 \\ 0. & 0. & -2.236068 \end{pmatrix} \end{matrix} \)

Основные функции для работы с матрицами рассмотрены в статье Массивы в Scilab.

Комментарии

Гость
Ответить
Войдите, чтобы оставить комментарий.
Гость
Ответить
Гость
Ответить
Гость
Ответить
Еще нет комментариев, оставьте первый.