|
Главная -> Справочник по алгоритмам 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [20] 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 § 3.5. Операции с матрицами Матрица - двумерный массив чисел вида Си ai2 ai3 021 022 23 - atn агп Omi От2 ami а„ (3.5) Матрица характеризуется размерностью тХп, т. е. произведением числа столбцов п на число строк т. Квадратная матрица имеет m = n и размерность п - пХп. У простейших ПЭВМ предусмотрено формирование одной-двух матриц размерностью 10X10 с коэффициентами A/j (например, у ПЭВМ класса Роске! Computers FX-702P можно формировать одну матрицу 10X20 или две матрицы 10X10, причем нумерация строк и столбцов начинается с О, а не с 1). У более сложных ПЭВМ коэффициенты матрицы могут задаваться любой переменной, например B,j, Zi и т. д. Ввод матрицы обычно задается по строкам с помощью двух циклов. 1. Задаем значения / от 1 (или 0) до М (или М-I) во внешнем цикле. 2. Задаем значения J от 1 (или 0) до Л (или Л- 1) во внутреннем цикле. 3. С помощью оператора INPUT задаем ввод А (/, У) каждого члена матрицы. Перед операторами ввода матрицы необходимо задать размерность массива, например, с помощью операторов DIMA (М, N), СОМА (М, N) или других (зависят от конкретной версии бейсика, применяемой в ЭВМ). Программа 3.41. IS REMВВОД ЭЛЕМЕНТОВ МАТРИЦЫ МжЫ ге ХНРИТВВЕДИТЕ М.-Н М..Ц: BIM AtM.-N) 30 FOR 1=1 ТО MiFOR J=l TO N 40 PRIHT!2.0.ВВЕДИТЕ ЭЛЕМЕНТ AI.-.J 50 INPUT A<I.-J:»:NEXT -J:NEXT I 500 END . В ЭВМ с версией бейсика, имеющей матричные операторы, программа ввода существенно упрощается (см. пример в § 2.2). Диагональная матрица является разновидностью квадратной матрицы вида
У нее все элементы нулевые, кроме диагональных, т. е. Л(/, 1)фО при /=/. Программа 3.42. Единичная матрица - разновидность диа тональной матрицы, у которой Л (/, У) = 1 при / = /. Программа 3.43. 10 REMФОРМИРОВАНИЕ ЕДИНИЧНОЙ МАТРИЦЫ 20 INPUTВВЕДИТЕ N=H:DIM ACHrN) 38 FOR 1=1 ТО NSPOR J=i TO N 40 IF lOJ THEN 68 50 LETA<bJ)=l:60T0 ?0 60 LETA<I..J)=0 70 NEXT .JjNEXT I 500 ENB Нулевая матрица - очищенный массив, т. е. матрица, у которой все Л(/, /)=0 Для получения такой матрицы иногда могут использоваться специальные операторы полной очистки памяти данных (например, VAC у ПЭВМ FX-702P), исполняемые до ввода всех исходных данных. Если нулевую матрицу нужно формировать по ходу вычислений, можно использовать следующую программу: Программа 3.44. 10 REMФОРМИРОВАНИЕ НУЛЕВОЙ МАТРИЦЫ 20 1НРиТВВЕДИТЕ fl-N M/NjBIM нОЬЮ 30 FOR 1=1 ТО M!FriR J=l ТО N 40 LETA<bJ)=0:NEXT -J: NEXT I 500 END Операции с константами сводятся к сложению или вычитанию элементов матрицы Л (/, У) с константой, например X, или умножению А (J, J)*X или делению Л (/, J)/X на константу. Все они могут проводиться в ходе ввода матрицы (см. программу 3.45). Программа 3.45. 10 PRINTУМНОЖЕНИЕ.МАТРИЦЫ НжЫ 15 PRINT-"НЙ КОНСТАНТУ С 20 INPUTВВЕДИТЕ Н=Н 25INPUTВВЕДИТЕ ССИИМ ЧСИ,Н) 30 FOR 1=1 ТО N! FOR .1=1 ТО N 48 PRINT2.0!ВВЕДИТЕ ЭЛЕМЕНТ Й1.J 50 INPUT A-;i...j:)!LETAa.-.J>=u.;b.n*r: 60 NEXT .J г NEXT I 500 END Вывод матрицы на печать анизуется, как м ввод, с помощью двух циклов. Однако вместо оператора ввода во внутреннем цикле используется оператор вывода PRINT. Целесообразно вывод организовать так, чтобы индицировались индексы / и У каждого элемента в формате без дробных частей (см. пример вывода для программы 3.45). Программа 3.46. 10 REMФОРМИРОВАНИЕ ДИАГОНАЛЬНОЙ МАТРИЦЫ 20 INPUTВВЕДИТЕ N=N!riIM ACNN) 30 FOR 1=1 ТО NiFOR J=l TO N 40 IF lOJ THEN 60 50 PRINT!2.@!ВВЕДИТЕ AI,J 55 INPUT AC I, J) .-GOTO 70 60 LETA<ItJ)=@ 70 NEXT J:NEXT I 70 FOR 1=1 TO H:F0R J=1 TO N 88 PRINT!2.0!A lrJ=MlfS> 90 NEXT JsHEXT I 500 ENIi Пример. Для X = 2 и матрицы 1 2 3 Л= 4 5 6 7 8 9 see END выполнение совместно программ 3.45 И 3.46 даст такие результаты (элементы выводится построчно): ; Для матриц небольшой размерности вывбд можно задать и в естественном для матрицы виде. Программа ЗА7. 70 PRINT ft<:i,l>jA<lj2>rAtb3:i 80 PRINT A;27l>,ft;2f2>,ft<2j3) 90 PRINT йе;Зг1)тА<3:.-г>..А<3/3) 500 END Пример. Для привёяенного вйше примера совместное выпшнЬнИе программ 3.45 н 3.47 ведет к выдаче результатов в форме 2 4 6. 8 ТО 12 14 16 18 Транспонированной матрицей Л называется квадратная матрица, у которой столбцы соответствуют строкам кваДратно!и матрицы Л, например: 4 5 6 Нетрудно заметить. Что диагональные элементы у матриц Л и Л-одни и-те же и операция транспонирования матрицы А сводится к перестановке остальнрх элементов симметрично относительно диагонали. Это реализуется с помощью соотношения a,i = ai, при i¥= i Программа. 3.48, для матрицы 2X2, D = а-г) 022033+«Сйв1.1+а 1 гйгзВз f - -oaiayaaia -e32a2saii -tfeiaiseM .для матрицы 3X3-и D = (а,,022-aviai) (азза,,~--оз,а4} + + <ai3a2i - апогз) Саз2а44~И34В4г) + +(апа24 - аиаг>) {азгщз-аза) + -f (012023-iar30ji)(03fa44~as4a4i)-f +(auaxt - oi 2024) (asi043 - аззощ) + -F(a(30s-4 -<Jf4a2j) (03142-азда4) для -млйтрицы 4 X 4. Програйма 3.49. Пример. 1 2 3 4 = -2 Программа 3.&0. Пример. 1 2 3 D=- 4 5 .6 7 8-9 Программа 3.51. . Пример. = S4. = 13. Определители матриц с любой размерностью пХп вычиеляютсяпо методуРаусса. Он сводится к преобразовайию матриц к треугольному виду с пЬмощьЮ слбдунПцих формул преобразования элементов Матрицы А (3.5): где /г = 1, 2. .... (п -Т) и ай~"г?0.-ПресЗбра-зование- массива А (п, п) производится в на--правлении расположения столбцов слева 10 PRINTТРАНСПОНИРОВАНИЕ МАТРИЦЫ 20 INPUTВВЕДИТЕ N=N5 DIM А<:Н»Н>гВ<Н/И> 30 FOR 1=1 ТО NSFOR J=l ТО Н 4й PRINTi£.0!BBE.!lMTE А1,J: INPUT AOrJ) 50 NEXT JsNEXT I 60 FOR 1=1 TON!FOR J=I-«-l TO N 70 LETC=A(Ь J):LETA< Ь J>=A(I>!LETACI)=C ад №МПРАНСПОННРОВАННАЯ МАТРИЦА ЗАНЕСЕНА НА МЕСТО ИСХОДНОЙ 500 END Определитель квадратной матрицы А - число D, равное сумме п\ членов (-Г)а,-а2,-20:);з...а,„„, каждый из которых соответствует одному из "! различных упо,- .рядоченных множеств j\, jj...../„. получеи- • кых г-парными перестановками элементов из множества 1. 2.....п. Определители матриц малой размерности (2X2, -3X3, 4X4) целесообразно вычислять по известным формулам; D - a\\ai2-a2ia\2 направо. Определитель вычисляется как произведение всех диагональных "элементов преобразованной матрицы. Программа 3.52. Проверка программы производится rio примерам, приведенным выше для программ 3.49 и 350. Необходимое -условие для реализации простого метода Гаусса заключается в •неравенстве элемента cLt."" -нулю на всех этапах преобразования. В случае й5&""* = 0 произойдет останов ЭВМ, так как дбяение Программа 3.50. 10 PRINTВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ ЗжЗ 20 INPUTВЕДИТЕ Й1ЬЙ12,Й13 ЙгВ,С 30 INPUTВВЕДИТЕ йгЬЙ22тЙ23 ВлЕгЕ 40 ХНРиТВВЕДИТЕ A31rft32jA33 G,H,I 50 LETS=fti«<E*I-H-*F>+C*<rr«H-G»iE>+B-*<F*6-Di*I> 60 PRINTОПРЕДЕЛИТЕЛЬ D=S!END Программа 3.51 - . 18 PRINTВ1.1ЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ 4*4 15 DIM ft<4r4)!LETS=0 20 FOR 1=1 TO 4!FOR J=l TO 4 30 PRINTBBEflHTE ЭЛЕМЕНТ Я=!2.6! I.- J 48 INPUT A<bJ>!NEXT JsNEXT I 50 LET0=1!LETP=2SLETQ=3:LETR=45GOSUB 120 60 LET0=3:LETP=1!LETG!=2:LETR=4:6GSUB 120 • 70 LET0=1!LETP=4!LETQ=2!LETR=3!60SUB 128 88 LET0=2SLETP=3!LETG!=1!LETR=4:60SUB 120 90 LET0=4!LETP=2!LETS=i:LETR=3:60SUB 120 . 100 LET0=3!LETP=4:LETG!=1!LETR=2-.G0SUB 120 lie PRINT.Fl.S!ОПРЕДЕЛИТЕЛЬ Ii=S!STOP 120 LETB=ft<Ь0>жй-:2,P>-ft<ЬР>жн<2.0> 138 LETS=S+B*<A<3..G!>«ft<4,R>-A<3*R)*A<4fG)). 140 RETURN:END Программа 3.52. 10 PRINTВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ 28 INPUTВВЕДИТЕ ПОРЯДОК ОПРЕДЕЛИТЕЛЯ N=N : 30 DIM Й<:НлН):иЕТР=1 48 FOR 1=1 TO NSFOR J=l TO N , 50 PRINT! 2.0ВВЕДИТЕ ЭЛЕМЕНТ ftI J - 60 INPUT fta,.J>!NEXT .JSNEXT I i 70 FOR 1=1 TO N-1!F0R J=I+1 TO N 88 LETft<JfI)=ft<J/I>/ft<I,I)!FOR K=I+1 TO N ; I 90 LETft<JjK)=ft<.J,K)-ft<J.. 1)ЖЙ<ЬК)!НЕХТ К : 108 NEXT JsLETP=P*ft<I.. I)!NEXT:I i 110 LETP=P*;ft<N/N)spRINT!Fl.9! ОПРЕДЕЛИТЕЛЬ DPsEHD: Программа 3.53. i . .. i , 10 PRINTВЫЧИСЛЕНА ОПРЕДЕЛИТЕЛИ ПО МЕТОДУ ГАУССА! 15 PRINTС ВЫБОРОМ ГЛАВНОГО ЭЛЕМЕНТА ПО ВСЕЙ МАТРИЦЕ: 20 INPUTЗАДАЙТЕ ЗНАЧЕНИЕ H=N!piM й<.ИгЮ 25 FOR 1=8 ТО N-1SF0R J=0 ТО N-1 i 30 РК1НТ!2.0!ВВЕДИТЕ ЭЛЕМЕНТ AI + li.J+l= 40 INPUT A<bJ>!NEXT JsNEXT I:LETP=0 50 LETZ=l!LETD=i:FOR K=0 TO N-2 68 LETE=8SF0R I=K TO N-1 70 FOR J=K TO N-1: IF ABS;E>>=ABS<A<b J>) THEN 98 80 LETE=A<:if.J>:LETB=l:LETC=.j!NEKT J:NEXT I 90 IF K=B THEN 120 100 FOR J=K TO N-l!LETS=A<:Kf J) • 110 LETA<:Kr-J)=A«LB.J)!LETA<B.-J>=S!HEXT J:LETZ=-Z 120 IF K=C THEN 150 125 FOR I=K TO N-1 1 130 LETS=ft<bK>:LETA<bK>=ftai.C.i •. . 140 LETA<bC>=S!NEXT I:LETZ=-Z ; 150 FOR I=K+1 TO N-i:LET&=A<bK>-A<KrK> 160 FOR J=K TO N-l!LETA<ii.J>=Aa.-J)-6:«A«LK.J> 178 NEXT JSNEXT IsNEXT К ; 180 FOR 1=0 TO N-1sLETD=D-*A<Ij.!S 190 NEXT I !LETD=D.4sZ SPRINTОПРЕДЕЛИТЕ ЛЬ D=!F1.9!ri!END 10 PRINTВЫЧИСЛЕНИЕ. ОПРЕДЕЛИТЕЛЯ 2*2 20 INPLfTВВЕДИТЕ й11гЙ12Й2Ьй22 ft/B..C>Ii 38 PRINTОПРЕДЕЛИТЕЛЬ D=fi«D-C*BSENIi 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [20] 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 0.0607 |
|