Библиотека программных процедур для методического обеспечения курса высшей алгебры в системе компьютерной математики "Maple"

ВЕСТНИК ТГГПУ. 2011. №1

УДК 512.5; 519.6;519.8; 372.851; 378.02

БИБЛИОТЕКА ПРОГРАММНЫХ ПРОЦЕДУР ДЛЯ МЕТОДИЧЕСКОГО ОБЕСПЕЧЕНИЯ КУРСА ВЫСШЕЙ АЛГЕБРЫ В СИСТЕМЕ КОМПЬЮТЕРНОЙ МАТЕМАТИКИ "MAPLE"

© Ю.Г.Игнатьев, А.Р.Самигуллина

В статье описана библиотека программных процедур для методического обеспечения курса высшей алгебры в пакете компьютерной математики "Maple".

Ключевые слова: линейная алгебра, системы компьютерной математики, алгоритмы, библиотеки программных процедур.

1. Введение

Учебный модуль высшей алгебры является составной и базовой частью курса высшей математики для нематематических факультетов. Основная цель этого модуля - изучение теории линейных алгебраических уравнений, необходимой как в других модулях курса высшей математики и предметах естественнонаучного цикла, так и имеющей самостоятельную ценность для решения многочисленных прикладных задач. Кроме того, в этот модуль включается изучение основ матричного исчисления и теории определителей, необходимых для изучения теории систем линейных алгебраических уравнений (СЛАУ), а также имеющих многочисленные приложения в других модулях курса высшей математики и, следовательно, обладающих самостоятельной ценностью. Поэтому информатизация этого модуля имеет большое значение для изучения курса высшей математики.

В работе А.Р.Самигуллиной были рассмотрены основные принципы математического и компьютерного моделирования объектов линейной алгебры и аналитической геометрии в системе компьютерной математики (СКМ) Maple [1]. В частности, в указанной работе была представлена программа автоматизированного решения системы линейных алгебраических уравнений в СКМ Maple с выводом решений в стандартной для Российской системы образования форме. Однако описанная программная процедура обладает существенным недостатком: при наличии нулевых коэффициентов перед неизвестными эти переменные не считываются и соответствующие нули не попадают в расширенную матрицу системы. Кроме того, встроенные программные процедуры Maple не содержат программы нахождения фундаментальных решений СЛАУ, имеющих большую ценность в многочисленных приложениях и составляющих основу математической культуры.

Решение указанных двух задач программными способами в СКМ Maple потребовало значительного усложнения программных процедур. Здесь следует отметить общее правило создания программных продуктов: чем менее профессиональным является пользователь программного продукта, тем большая степень программного сервиса требуется от этого продукта, а значит, и более сложные соответствующие программные процедуры. В данной статье мы укажем пути решения этих задач и опишем библиотеку соответствующих программных процедур Algebra .

2. Программные процедуры нахождения общего решения систем линейных алгебраических уравнений Рассмотрим систему алгебраических линейных уравнений из m уравнений относительно n неизвестных:

АХ = В = bk;

i=1

где А - основная матрица системы, В - матрица-столбец свободных членов, X - матрица-столбец неизвестных:

( а ии а > U\n ( X: '

а , . V ml .. а mn у ; в = b m ; X = X ) n .

Пользователь (студент-нематематик) вводит указанную систему в Maple не в матричной, а в стандартной форме упорядоченного списка уравнений:

Sys := [a1* x + a2 * y +----+ an * и = b1,

ß* x + ß2 * У + -" + ßn * и = Ьг,

..., Д * x + S2* y + — + Sn * и = bm ], где ai,ß,...,St,bj - коэффициенты уравнений (1),

т.е. конкретные числа, а x,у,..., и - имена переменных, которые в конкретном задании могут быть произвольными. Поэтому первой задачей является компьютерное распознавание системы

(3) и приведение ее к стандартному виду (1), а также нахождение расширенной матрицы системы:

Í

A =

а,-

а,.

а,.

а , а 2

V ml m 2

а b

mn m J

\

2.1. Распознавание системы линейных алгебраических уравнений

Для распознавания системы (3) библиотека Algebra имеет программную процедуру Alge-bra[InfoEq], которая предоставляет информацию об одиночном линейном уравнении в виде упорядоченного списка, первый элемент которого есть упорядоченный список имен переменных уравнения, второй элемент - упорядоченный список коэффициентов при этих переменных, третий элемент - правую часть уравнения:

> Algebra[InfoEq]:=proc(Eq) local n,i,xxx: n:=Algebra[number_members](Eq):

xxx: =(i)->Algebra[coef_var] (Eq,i): [[seq(xxx(i)[2],i=1..n)],[seq(xxx(i)[1 ],i=1..n)], rhs(Eq)]:end proc:

Здесь использована процедура number coef которая находит коэффициент у i-той переменной, причем если коэффициент равен 1, т.е. множитель перед переменной отсутствует, то результат действия программы будет "1", в других ненулевых случаях результат равен "2": >Algebra[number_coef]: =(Eq,i)-> nops([op([op(lhs(Eq))])][i]):

Пример:

>Algebra[number_coef](3*x+2*y+z=23,3);

1

Покажем пример распознавания одиночного линейного алгебраического уравнения с помощью созданной процедуры

> Algebra[InfoEq](3*x+2*y+z=23);

[[x, y, z ], [3,2,1],23]

Далее, процедура associate находит объединение подмножеств х, представленных в виде неупорядоченного списка неупорядоченных списков:

x = {{a _1,...,a _ r},{b _1,b _2,...,b _ s},

..., {c _1,..., c _ m}.

При этом результат записывается в виде упо-рядочного списка:

> Algebra[associate]:=proc(x) local elem,u: u:=x[1]: for elem in x do u:=u union elem: end do :[op(u)]: end proc :

Пример:

> Algebra [associate]([{x,y,z},{y,u,z},{y,t,w}, {r,u,s}]);

[r, u, y, z, X, t, w, s ]

2.2. Приведение СЛАУ к стандартному виду

Процедура StandartSys выводит СЛАУ в стандартном виде с унифицированными именами переменных Х{, где i = 1...nnn:

>Algebra[StandartSys]:=proc(Eqs)local

nn,Eq,i,vars,Vars,

nnn,k,SB,EQS:

nn:=nops(Eqs):Eq:=(i)->Eqs[i]: vars:=(i)->{op(Algebra[InfoEqJ(Eq(i))[l ])}: Vars:=Algebra[associate]({seq(vars(i),i=l..nn)}

):

nnn:=nops(Vars):SB:={seq(Vars[k]=X[k],k=1..

nnn)}:

EQS:=subs(SB,Eqs):EQS:end proc:

Пример:

>Algebra[StandartSys]([x+2*y-z=5,x+y-3*z=7,5*x-3 *y+2*z=9,x+y+z=1 J);

[X1 + 2X2 - X3 = 5, X1 + X2 - 3X3 = 7,

5X1 - 3X2 + 2X3 = 9, X1 + X2 + X3 = 1].

2.3. Программа нахождения основной и расширенной матрицы системы

Процедура Algebra[MatrSys] создает упорядоченный список, состоящий из двух матриц -основной матрицы системы, A, и расширенной,

A:

>Algebra[MatrSys]:=proc(Eqs)local

nn,Eq,i,vars,

Vars,nnn,k,SB,EQS,aa,bb,AA,AB: nn:=nops(Eqs): Eq:=(i)->Eqs[iJ: vars:=(i)->{op(Algebra[InfoEq](Eq(i))[1 ])}: Vars:=Algebra[associate] ({seq(vars(i),i=1..nn)}): nnn:=nops(Vars):SB:={seq(Vars[k]=X[k],k=1.. nnn)}:

EQS:=subs(SB,Eqs):aa:=(i,k)->coeff(lhs(EQS[i]),X[kJ): bb:=(i)-

>rhs(EQS[i]):AA:=convert([seq([seq(aa(i,k), k=1..nnn)],i=1..nn)],Matrix):

AB:=convert([seq([seq(aa(i,k),k=1..nnn),bb(i)J, i=1..nn)],Matrix):[AA,AB]:end proc:

Пример:

> Algebra[MatrSys]([x+2*y-z=5, y-3*z=7,5*x-3*y+2*z=9]);

l 2 -l" "l 2 -l 5

0 l -3 ? 0 l -3 7

5 -3 2 5 -3 2 9

2.4. Программа нахождения общего решения в стандартном виде

Программная процедура Algebra[SolLinGen] находит общее решение системы линейных алгебраических уравнений, причем значению параметра t=matr соответствует вывод решения системы в матричном виде, в котором произвольные константы выводятся в формате St, где i - номер строки, содержащей только эту константу с коэффициентом 1. В случае если система не совместна, то вместо решения команда выводит сообщение о несовместности. При любом другом значении параметра t , например, 123, -решение выводится в списочном виде: x=x1,

у=у1,---:

> Algebra[SolLinGen]:=proc(Eqs,t) local nn,Eq,i,vars,Vars,nnn,k,SB,

EQS,aa,bb,AA,AB,r1,r2,BB,SSS,C,RRR:

nn:=nops(Eqs):Eq:=(i)->Eqs[i]:

vars:=(i)->{op(Algebra[InfoEq](Eq(i))[1])}:

Vars:=Algebra[associate]({seq(vars(i),i=1..nn)}):

nnn:=nops(Vars):SB:={seq(Vars[k]=X[k],k=1..

nnn)}:

EQS:=subs(SB,Eqs):aa:=(i,k)->coeff(lhs(EQS[i]),X[k]): bb:=(i)-

>rhs(EQS[i]):AA:=convert([seq([seq(aa(i,k), k=1..nnn)], i=1..nn)],Matrix):

AB:=convert([seq([seq(aa(i,k),k=1..nnn),bb(i)], i=1..nn)],Matrix):BB:=Vector([seq(bb(i),i=1..nn)]): r1:=linalg[rank](A^):r2:=linalg[rank](AB): if r1=r2 then

SSS:=LinearAlgebra[LinearSolve] (AA, BB,free= 'S'):

RRR:=seq(Vars[i] =SSS[i],i=1..nnn): else ("Система не совместна”) end if: if t=matr then SB,convert(SSS,Matrix): else RRR: end if: end proc:

Пример 1:

> Eq1:=[x+2*y-z=5, x+y-3*z=7,5*x-3*y+2*z=9,y+2*z=-2]:

> Algebra[SolLinGen](Eq1,a);

29

-14

x = —, y = —, z =---.

11 11 11

Пример 2:

> Eq2:=[x-3 *y+10*z-t+u=1,x+y+3*z-t-u=3,x-2*y+2*t+2*u=1]:

> SSEq2:=Algebra[SolLinGen](Eq2,matr);

SSEq2:= {x = Xx, y = X2,

z = x3, u = X 4, t = X J,

7 - 2S,

S

-1 - 2S5 +—S3 3 5 2 3

S

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

Полученное общее решение в форме (5) дает возможность найти фундаментальное решение СЛАУ. Для того чтобы воспользоваться этим решением, необходимо, во-первых, найти в матрице типа (5) все произвольные константы Si, во-вторых, определить их номера положения в матрице - столбце, в-третьих, образовать последовательности решений Zi, полученных из общего решения вида (5) подстановкой: Sk =5'к. Для достижения этого результата в библиотеке Algebra имеются две команды: Finder и ListNum. Команда Finder(s,a) отыскивает элемент a в списке s и определяет его положение; в случае, если элемент a не содержится в списке s, команда выводит пустой список.

> Algebra[Finder]: = proc(s,a) local ss,i,j,aa: aa:=convert(a,symbol):

ss:=[]:

for i from 1 to LinearAlgebra[RowDimension]

do

for j from 1 to LinearAlge-bra[ColumnDimension](s) do

if(convert(s[i,j],symbol)=aa) then ss:=[op(ss),[i,j]]: end if: end do: end do: ss: end proc :

Пример:

> Algebra[Finder](SSEq2Matr,S[5]);

[[5,1]]

> Algebra[Finder](SSEq2Matr,S[3]);

[[3,1]]

> Algebra[Finder](SSEq2Matr,S[6]);

[],

где SSEq2Matr - матрица в правой части (5). Далее, процедура ListNum определяет положение элементов в матрице-столбце и записывает это положение в виде упорядоченного списка:

> Algebra[List_Num]:=proc(A) local i,ss,nn: nn:=nops(A):ss:=[]:

for i from 1 to nn do

if A[i]=1 then ss:=[op(ss),i]:end if:

end do : ss: end proc :

Наконец, процедура Algebra[SolLinBasic] выводит фундаментальное решение в виде матрицы, каждый столбец которой представляет линейно независимое решение:

>Algebra[SolLinBasic]:=proc(Eqs) local nn,Eq,i,vars,Vars,

nnn,k,SB,EQS,aa, bb,AA,AB,r1,r2,BB,SSS,S,RRR,SSS M, nFC,NC,mmm,j,ii,FSJ,FS:nn:=nops(Eqs): Eq:=(i)->Eqs[i]:

vars:=(i)->{op(Algebra[InfoEq](Eq(i))[1])}: Vars:=Algebra[associate] ({seq(vars(i),i=1..nn)}): nnn:=nops(Vars): SB:={seq(Vars[k]=X[k],k=1..nnn)}: EQS:=subs(SB,Eqs): aa:=(i,k)->coeff(lhs(EQS[i]),X[k]): bb:=(i)->rhs(EQS[i]): AA:=convert([seq([seq(aa(i,k), k=1..nnn)],i=1..nn)],Matrix): AB:=convert([seq([seq(aa(i,k),k=1..nnn),bb(i)],i =1..nn)],Matrix):BB:=Vector([seq(bb(i),i=1..nn)]): r1:=linalg[rank](AA):r2:=linalg[rank](AB): if r1=r2 then

SSS:=LinearAlgebra[LinearSolve] (AA, BB,free= 'S'):

SSSM:=convert(SSS,Matrix):

nFC:=[seq(nops(Algebra[Finder](SSSM,S[i])),i

=1..nnn)]:

NC:=Algebra[List_Num](nFC):mmm:=nops(N C): ii:=(j)->NC[j]:

FSJ:=(j)-

>subs({seq(S[ii(k)]=delta(k,j),k=1..mmm)},SSSM): FS:=convert([seq(FSJ(j),j=1..mmm)],Matrix): else ("Система не совместна”):end if: FS: end proc:

Пример применения процедуры мы не приводим из-за громоздкости ответа. Для вывода фундаментального решения в стандартном для вузов списочном виде библиотека Algebm содержит специальную процедуру Alge-bra[SolLinBasics]:

> Algebra[SolLinBasics]: =proc(Eqs)local mmm,nnn,i,k,SSSS:

SSSS:=Algebra[SolLinBasic](Eqs): mmm:=LinearAlgebra[RowDimension](SSSS): nnn:=LinearAlgebra[ColumnDimension](SSSS): [seq([seq(SSSS[i,k],i=1..mmm)],k=1..nnn)]: end proc :

Пример:

Рассмотрим систему уравнений Eq3: >Eq3:=[x+2*y-3*z+u-6*t+8*n=1,x-y+2*z-t-n=0,2*x+y-z+3*u-t=1 ]:

Ее фундаментальное решение в стандартном, списочном виде дается командой:

> Algebra[SolLinBasics](Eq3);

[0, 2,1,0, 0,0],

-17 -2З

0,1,-,0

6 6 [4,3, 0,0, - 3,1]]

Заключение

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

1. Самигуллина А.Р. Математическое моделирование объектов линейной алгебры и аналитической геометрии в системе компьютерной математики Maple // Вестник ТГГПУ. - 2010. - №3(21). -С.69-74.

THE LIBRARY OF PROGRAMME PROCEDURES FOR METHODICAL SUPPORT OF LINEAR ALGEBRA COURSE IN A COMPUTER MATHEMATICS SYSTEM "MAPLE"

Yu.G.Ignatyev, A.R.Samigullina

The library of programme procedures for methodical support of Linear Algebra course in a computer Mathematics system "Maple" is described.

Key words: Linear Algebra, computers Mathematic systems, algorithm, libraries of programme procedures.

Игнатьев Юрий Геннадиевич - доктор физико-математических наук, профессор, заведующий кафедрой геометрии и математического моделирования Татарского государственного гуманитарно-педагогического университета.

E-mail: ignatev_yu@rambler.ru

Самигуллина Алсу Ринатовна - аспирант кафедры геометрии и математического моделирования Татарского государственного гуманитарно-педагогического университета.

E-mail: alsu_sam@mail.ru

Поступила в редакцию 21.12.2010