Компания ALT Linux
Опубликован: 12.03.2015 | Доступ: свободный | Студентов: 582 / 64 | Длительность: 20:55:00
Лекция 5:

Задачи линейной алгебры

5.9 Задачи линейной алгебры в символьных вычислениях

Основы работы с символьными переменными в Octave описаны в п. 2.7. Рассмотрим работу с матрицами, заданными в символьных переменных и выражениях. Для определения символьной матрицы служит функция ex_matrix(число строк, число столбцов, элементы матрицы).

Например:

					
>>> symbols
>>> a = sym( "a" ); % Определение символьных переменных
>>> b = sym( "b" );
>>> c = sym( "c" );
>>> d = sym( "d" );
>>> Matr=ex_matrix( 1, 3, a, b, c ) % Матрица строка
Matr = [ [ a, b, c ] ]
>>> Matr=ex_matrix( 4, 1, a, b, c, d ) % Матрица столбец
Matr = [ [ a ], [ b ], [ c ], [ d ] ]
>>> Matr=ex_matrix( 2, 2, a, b, c, d ) % Матрица 2 на 2
Matr = [ [ a, b ], [ c, d ] ]
>>> Matr=ex_matrix( 3, 3, a, 0, b, c, 1, 1, d, 0, 2 ) % Матрица 3 на 3
Matr = [ [ a, 0.0, b ], [ c, 1.0, 1.0 ], [ d, 0.0, 2.0 ] ]

Над символьными матрицами определены операции сложения, вычитания, умножения.

Пример 5.18. Выполнить действия над матрицами (листинг 5.19).

	
>>> symbols
>>> a = sym ( "a" ); % Определение символьных переменных
>>> b = sym ( "b" );
>>> c = sym ( "c" );
>>> d = sym ( "d" );
% Определение матриц
>>> A=ex_matrix ( 2, 2, a, b, c, d )
A = [ [ a, b ], [ c, d ] ]
>>> B=ex_matrix ( 2, 2, d, b, c, a )
B = [ [ d, b ], [ c, a ] ]
>>> C=A+B
C = [ [ d+a, 2 * b ], [ 2 * c, d+a ] ]
>>> D=A _ B
D = [[ -d+a, 0 ], [ 0, d-a ] ]
>>> C_D
ans = [ [ - ( d -a ) * ( d+a ), 2 * ( d -a ) * b ], [ - 2 * ( d -a ) * c, ( d-a ) * ( d+a ) ] ]
Листинг 5.19. Действия над символьными матрицами (пример 5.18).

К сожалению над символьными матрицами не определены операции вычисления определителя и обратной матрицы.

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

Пример 5.19. Решить систему линейных алгебраических уравнений \left\{\begin{aligned} ax+by&=c\\x+y&=d\end{aligned}\right. относительно переменных x и y (листинг 5.20).

	
>>> x = sym( "x" );
>>> y = sym( "y" );
>>> a = sym( "a" );
>>> b = sym( "b" );
>>> c = sym( "c" );
>>> d = sym( "d" );
>>> sols = symlsolve({ a * x+b * y==c, x+y==d },{ x, y })
sols =
(
		[ 1 ] = -(a-b ) ^(-1) * ( d *b-c )
		[ 2 ] = -(a-b ) ^( -1) * ( c-d*a )
)
Листинг 5.20. Решение СЛАУ в символьном виде (пример 5.19).

Пример 5.20. Решить систему линейных алгебраических уравнений (листинг 5.21)

\left\{
									\begin{array}{rcrcrcr}
									x_1&+&2x_2&+&5x_3&=&-9\\
									x_1&-&x_2&+&3x_3&=&2\\
									3x_1&-&6x_2&-&x_3&=&25.
									\end{array}
									\right.
	
>>> x1 = sym( "x1" );
>>> x2 = sym( "x2" );
>>> x3 = sym( "x3" );
>>> sols = symlsolve({ x1+2*x2+5*x3==-9,x1-x2+3*x3==2,3* x1 -6*x2
	-x3==25},{x1, x2, x3 })
sols =
(
	[ 1 ] =2.0
	[ 2 ] = -3.0
	[ 3 ] = -1.0
)
Листинг 5.21. Решение СЛАУ используя symlsolve (пример 5.20).
Алексей Игнатьев
Алексей Игнатьев

Возможна ли разработка приложения на Octave с GUI?

Евгений Ветчанин
Евгений Ветчанин

Добрый день. Я самостоятельно изучил курс "Введение в Octave" и хочу получить сертификат. Что нужно сднлать для этого? Нужно ли записаться на персональное обучение с тьютором или достаточно перевести деньги?