Функции для решения задач линейной алгебры в 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.
Комментарии