Назад к материалам

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

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

Функции наиболее часто применяемые для решения СЛАУ.

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

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

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

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

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

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

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

Найдём норму матрицы: функция 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');

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

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

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

Найдём собственные значения и собственные вектора матрицы 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);  

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Зададим матрицу и вектор-столбец в 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);  

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

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

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

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

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

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

ортогональная матрица, верхне-треугольная матрица:

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