Матрицалық көбейту

матрицалық көбейту

Сондықтан, алдыңғы сабақта, біз матрица қосу және алып тастау ережелерін бөлшектеуге. Бұл ең студенттер жолда бар сөзбе оларды түсінемін, сондықтан қарапайым операциялар болып табылады.

Алайда, сіз ерте қуанады. Халява астам - көбейту өтіңіз. Мен дереу сізді ескертуге: Сіз қалай ойлайсыз, мүмкін болса, көбейту екі матрицалар, сол координаталары бар жасушаларында сандарды көбейту барлық емес. Бәрі осында әлдеқайда қызықты болып табылады. Және алдын ала анықтамаларымен бастау.

дәйекті Матрица

матрицаның ең маңызды сипаттамаларының бірі оның мөлшері болып табылады. Біз қазірдің өзінде бұл туралы жүз рет әңгімелестім: рекордтық $ а = \ қалдырды [M \ Times N \ Оң] $ құралы матрицада дәл $ м $ жолдар және N $ $ бағандар деп. Қалай емес бағандармен разминка жолдар, біз қазірдің өзінде тым талқылады. Қазір бұл маңызды болып табылады.

Анықтамасы. түрінде матрица $ а = \ б = \ б = \] $, екінші жолдар санымен бірінші матрицалық бірдей бағандар нөмірін, жатыр тастап] $ және $ қалдырды] $ және $ қалдырды деп аталатын жүйелі .

Тағы да: бірінші матрицаның баған саны екінші жолдар санына тең! Осыдан біз бірден екі шығу алуға:

  1. Біз матрицасы мақсатында маңызды болып табылады. Мысалы, матрицалар $ а = \ қалдырды [3 \ Times 2 \ Оң] $ және $ B = \ [2 \ Times 5 \ Оң] тастап $ келісілді (бірінші матрицаның 2 колонналар мен екінші жолдың 2) , бірақ керісінше - матрица $ B = \ солға [2 \ Times 5 \ Оң] $ және $ A = \ қалдырды [3 \ Times 2 \ оң жақ] $ - бұл емес, - бұдан былай бірінші матрицаның 5 бағандар (келісім екінші 3 жол).
  2. Жүйелілік сіз бір-біріне кейін барлық өлшемдері жазып, егер тексеру оңай. алдыңғы тармақтың мысалында: «3 2 2 5» - орта бірдей сандар, матрицалар келісілді сондықтан. Бірақ «2 5 3 2» - ортасында түрлі санының бар, өйткені, келісті емес.

ол тастап $ \ бірдей сомаға шаршы матрица [N \ Times N \ Оң] $ әрдайым дәйекті екенін HINES Сонымен қатар, капитан анық.

математика, нысандарды ауыстыру рәсімі маңызды кезде (мысалы, жоғарыда анықтау, матрица үшін рәсімі маңызды) жылы, жиі тапсырыс жұп сөйлейді. Біз мектепте олармен кездесті: Менің ойымша, бұл сондай-ақ тастап $ \ (1; 0 \ оңға) координаттары деп түсінікті деп ойлаймын $ және солға $ \ (0; 1 \ оң) жазықтықтағы түрлі нүктеден $.

Сондықтан: координаттары нөмірлерінен жасалады жұп, сондай-ақ тапсырыс. Бірақ ештеңе матрицасы осындай жұбын болдырмайды. Содан кейін ол айтуға болады: «Ан $ \ сол матрицаның (а; б \ оң) жұбын тапсырыс $ екінші жолдар санымен бірінші матрицалық бірдей бағандарды саны, егер дәйекті болып табылады.»

Ал, қандай сондықтан?

көбейту анықтау

сол жақ \ $ A = [м \ Times N \ Оң] $ және $ B = \ солға [N \ уақыты К \ оңға] $: екі дәйекті матрица қарастырайық. Ал біз олар үшін көбейту операциясын анықтаңыз.

Анықтамасы. екі келісілген матрица жұмыс : $ A = \ б = \ солға] $ және $ B = \ солға] $ жаңа матрица $ C = \ Сол [] $ формула бойынша қаралған элементтер М \ Times К \ құқығымыз] $ және $ қалдырды

\ [\ {_ {{C} {Мен; J}} = {{а}} {Мен; 1}} {туралау} басталады \ cdot {{B} _ {1; J}} + {{а} _ {і; 2}} \ cdot {{B} _ {2; J}} + \ ldots + {{а} _ {і; N}} \ cdot {{B} _ {N; J}} = \\ & = \ Sum \ Limits_ {T = 1} ^ {N} {{{а}} {Мен; T}} \ cdot {{B} _ {T; J}}} \ түпкі {туралау} \]

стандартты стандартты болып табылады: $ C = A \ cdot B $.

Менің ойымша, бәрі анық. Келесі сіз оқи алмайды. [онша емес]

Бірінші осы анықтамасын көреді, кім үшін, екі мәселе бірден туындайды:

  1. Бұл ойында ғана қандай?
  2. Неге бұл соншалықты қиын?

Жақсы, бәріне тәртіппен. Бірінші сұрақтан бастайық. Бұл индекстердің барлығы нені білдіреді? Нағыз матрицалармен жұмыс жасау кезінде қандай қателік жібермеуге болады?

Біріншіден, біз $ {{c} {c} {i} {i; {i} {i;} $ (}} $ есептеуге арналған ұзын сызық »(}} $) (жеуге арналған нүкте нүктені шатастырмау үшін нүкте қойыңыз, бірақ қоюдың қажеті жоқ Оларды жалпы алғанда - мен өзім формуланы анықтаймын), нақты ережеге түседі:

  1. Біз бірінші матрицадағы $ 1-ді аламыз;
  2. Екінші матрицада $ j $ -a бағанасын аламыз;
  3. Біз сандардың екі тізбегін аламыз. Осы тізбектің элементтерін бірдей сандармен ауыстырыңыз, содан кейін алынған жұмыстарды бүктеңіз.

Бұл процесті суреттерді түсіну оңай:

Екі матрицаның көбейту диаграммасы

Тағы бір рет: Мен бірінші матрица, екінші матрицада, екінші матрица сызығын екінші матрица етемін, содан кейін алынған элементтерді өзгертіңіз, содан кейін алынған жұмыстар бүктелген - біз $ {c} {{{c} { ij}} $. Сонымен, барлық $ 1 \ Le I \ Le M $ және $ 1 \ le \ le \ le k $ үшін. Анау. Мұндай «миллион k $» үшін жалпы $ «k $» болады.

Шындығында, біз мектеп бағдарламасындағы матрицаларды көбейтумен кездестірдік, тек қатты кесілген формада. Векторлыққа рұқсат етіңіз:

\ [\ бастау {{} = \ сол жақ ({} = \) сол жақ ({} = \) ({x} {a}}}} {{y} _ {a}}} {{z} {a}} \} \} \} \} \} \ оң); \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \} \ \ \} \ \ \ \} \\ \ Аяқтау {talign} \]

Содан кейін олардың скалярлық жұмысы жұптық жұмыстардың мөлшері болады:

\ [\ «\» Қайтармай жол {A \ \ \ \ {{{{{{{{{{{{{{{{{{{{{{{{}}}}}}} {a} \ cdot {{{{{{y} } _ {B}} + {{Z} {a}}}} \ cdot {{z}}}}} \]

Шынында, алыстағы жылдары, ағаштар жасыл болған кезде, аспан жасырылған кезде, біз $ \ upedarlow {A \ upenright {a} $ векторын $ \ upedright {b} $ векторлы бағанға көбейтеміз.

Бүгін ештеңе өзгерген жоқ. Қазір бұл жолдар мен бағандар көп болды.

Бірақ теория жеткілікті! Нағыз мысалдарға назар аударайық. Қарапайым жағдайда бастаңыз - квадрат матрицалар.

Квадрат матрицаларды көбейту

Тапсырма 1. Көбейтуді орындаңыз:

\ [\ Солға [\ Бастап қалу \ uide {{} {{35} {{35} {}}}}}} 1} 1 \ 4 \ \ 4 \ 4 \ \ 4 \ \ 4 \ \ \ \ \ \ cdot \ сол жақ [\ Бастау {35} {}}}}}} & 2 & 4 \\ 3 & 1 \\ 3 \ {Arium} \ оң] \]

Шешім. Сонымен, бізде екі матрица бар: $ a = \ сол жақта [2 \ рет 2 \ оң] $ және $ b = \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ оң] $. Олардың келісілгені анық (бірдей мөлшердегі квадрат матрицалар әрқашан дәйекті). Сондықтан біз көбейтуді орындаймыз:

\ [\ Бастау \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \} {35} {{35} {}}}}}}}} 1} 1 \ 4 \} Түзеткіштер \ CROME \ \ cdot \ қалды {{{35} {{35} {}}}}}}}}}} \ \ 3 \ 3 \ 3 \ 3 \ 3 \ & 4 \\ 3 \ оң] = \ \ \ {\ bute {\ {\ {{35} {} {} {} {} {}} 1 \ CDOT \ Сол жақ (-2 \ оң жақ) +2 \ CDOT 3 \ CDOT 3 \ CDOT 4 + 2 \ CDOT 4 + 2 \ CDOT 1 \\ -3 \ cDOT 1 \\ -3 \ cDOT \ Left (-2 \ оң) +4 \ cdot 3 \ cdot 4 + 4 \ CDOT 1 \\ \ \ \\ \ = \ \ \\ \ = \ \ \ \ = \ \ \ {Бастау} {Arand} {{35} {{35} {}} 4} 4} 4} 4 & -8 \\ 18 & -8 Массив} \ оң] \ Соңы {туралау} \]

Осымен болды!

Жауап: $ \ Сол жақта [\ Баста бастаңыз [\ Бастау {{{{35} {{35} {}}} 4}} 4} 4} 4 & 8 \\ 18 \ 8 \8

Тапсырма 2. Көбейтуді орындаңыз:

\ [\ Сол жақ [\ Бастау \ Бастау {MATRIX} 1 & 6 \\ 2 \ 6 \\ 2 \ 6 \ \ \ \ \ \ cdot \ сол жақ [\ cDOT \ {\ {\ {{35} {} {} 9} 9} 9} 9 \ \ -3 & -2 \\\ ТОПТАРЫ {ARRAME} \ оң] \]

Шешім. Келісілген матрицалар, сондықтан әрекеттерді орындаңыз: \ [\]

\ [\ Баста бастаңыз \ Баста \ \ \ {MATRIX} 1 \ \ \\ 2 \ 2 \ 2 \ 2 \ 2 \ 2 \ of (Matrix} соңғы) \ cdot \ сол жақ [\ Бастау }} 9 & 6 \\ -3 & -2 \\ -3 & -2 \\ {ARRAME} END] = \ Сол жақ [\ Баста бастау '\ {\ {35} {{35} {\ cdo} \ cdot 9 + 3 \ cdot \ қалды ( -3 \ \ cdot 6 + 3 \ cdot 6 + 3 \ cdot \ \\ 2 \ cdot 9 + 6 \ cdot 9 + 6 \ cDOT 9 + 6 \ CDOT (-3 \ оң) және 2 \ cdot 6 + 6 \ cdot \ Сол жақта (-2 \ оң жақ) \\\ END {\ \ \ \ \ \ \\ \ \ \ & = \ сол жақ [\ Бастау {Matrix} 0 & 0 \\ 0 & 0 \\ \ Соңы {туралау} \]

Көріп отырғанымыздай, матрица нөлдермен толтырылған

Жауап: $ \ Сол жақта [\ Бастау {MATRIX} 0 & 0 \\ 0 \\ 0 \\ \\ {Матрица} \ оң] $.

Жоғарыда келтірілген мысалдардан алынған матрицаларды көбейту қиындай емес. Кем дегенде 2 өлшемді матрицалар үшін 2-ге дейін.

Есептеу процесінде біз тікелей боялған, бір немесе басқа ұяшыққа қандай сурет салынған аралық матрицаны құрдық. Бұл тапсырмаларды шешу кезінде осылай болуы керек.

Матрицаның негізгі қасиеттері

Қысқартқышта. Матрицалық көбейту:

  1. Қолөнер емес: $ a \ cdot b \ ne b \ cdot A $ ішінде $. Әрине, арнайы матрицалар бар, олардың теңдігі $ a \ cdot b = b \ cdot $ (мысалы, егер $ b = e $ бір матрица болса), бірақ көп жағдайда жұмыс істемейді;
  2. Assositivive: $ \ сол жақ (A \ CDOT B \ RIGHT) \ CDOT C = \ CDOT \ SDOT (B \ cDOT C \ DISE) $. Мұнда опциондарсыз: матрицалардың жанында тұруды келесі екі матрицаның келесі және құқығынан сақтандырмайды.
  3. Тарату: $ A \ CDOT \ SDOT (B + C \ RION) = A \ CDOT B + A \ CDOT C $ және $ \ CDOT $ және $ \ CDOT (A + B \ оң) \ cdot c = c + b \ cdot c + b \ cdot c $ (коммутацияланбағандықтан, жұмысты оңға және солға бөлек тағайындау керек.

Енді - бәрі бірдей, бірақ толығырақ.

Материалдарды көбейту көбінесе сандардың классикалық көбейтуін еске түсіреді. Бірақ айырмашылықтар бар, олардың ішіндегі ең маңыздысы Матрицаларды көбейту, жалпы сөйлеу, коммутация емес .

Тағы бір рет тағы бір рет келіп түсіңіз. Біз олардың тікелей жұмысын білеміз:

\ [\ Солға [\ Бастап қалу \ uide {{} {{35} {{35} {}}}}}} 1} 1 \ 4 \ \ 4 \ 4 \ \ 4 \ \ 4 \ \ \ \ \ \ cdot \ сол жақ [\ Бастау {35}}}}}} & 2 \\ 3 & 4 \\ 3 \ \ \\ 3 \ \ оң] = \ \ \ \ {\ bute {\ {\ {35} {{35} {}} 4} 4} 4} 4} 4} 4} 4} 4} 4} 4} & -8 \\\ аяқталу {ARRAME} \ оң] \]

Егер сіз матрицаларды кейбір жерлерде өзгертсеңіз, біз мүлдем басқа нәтиже аламыз:

\ [\ Бастапқыдан бастаңыз [\ Бастау {{} {35} {} {35} {}}}}} \ \\ 3 & 2 \\ 3 & 1 \\ 3 \ 1 \ \ \ \ \ \ \ \ \ cdot \ сол жақ [\ Бастау \ бастау ' {35} {}}}} 1 & 4 \\ -3 & 4 \\ -3 \ \ 4 \\ -3 {ARRAME} ELST] = \ Сол жақ [\ Бастау \ Бастау \ Бастау \ 4 \ \\ 0 & 10 \\ 0 & 10 \\ 0 & 10 \\ 0 {Матрица } \ Оң] \]

$ A \ cdot b \ n n b \ cdot $ айын шығарады. Сонымен қатар, көбейту әрекеті тек келісілген матрицалар $ a = \ солға [m \ \ \ оң] $ және $ және $ b = \ \ \ \ \ k \ \ оң] $, бірақ ешкім қалуға кепілдік бермейді келісілген болса, егер олар оларды жерлерде өзгертсе. Мысалы, $ \ сол жақ матрицалары [2 \ \ \ оң] $ және $ \ қалды [3 \ \ 1 рет 5 \ оңға 5 \ оң] $ бірдей ретке келтірілген, бірақ бірдей матрицалар $ \ қалды [3 \ 1 рет 5 \ Дұрыс] $ және $ \ қалды [2 \ рет 3 рет 3 \ оң жақта] $ кері ретпен жазылған. Мұң. :(

Көрсетілген мөлшердегі квадрат матрицалар арасында $ N $ әрқашан тікелей және кері рет-ретімен көбейту кезінде бірдей нәтиже беретін болады. Барлық ұқсас матрицаларды қалай суреттеуге болады (және жалпы алғанда, қанша тұрады) - бұл жеке сабаққа арналған тақырып. Бүгін біз бұл туралы сөйлеспейміз. :)

Алайда, матрицаларды көбейту ассоциатив:

\ [\ сол жақ) \ cdot c = a \ cdot \ сол жақ (B \ cdot c \ оң жақ) \]

Сондықтан, бірнеше матрицаларды қатарынан бірнеше матрицаларды бірден көбейту керек болған кезде, оны бірден көбейту керек, бұл өте мынаны жасау өте қажет: жақын маңдағы кейінгі матрицалар қызықты нәтиже береді. Мысалы, 2-міндеттегідей нөлдік матрица, жоғарыда талқыланады.

Нақты міндеттерде, ол көбінесе $ \ LOTD мөлшеріндегі квадрат матрицаларды көбейтуге мәжбүр болуы керек [N \ Times N \ Doice Now] $. Барлық матрицалардың жиынтығы $ {m} {m} {m} {n}} $ (яғни, жазбалар $ a = \ солға) [n \ \ \ оңға] $ және \ [\ a \ {{m} ^ {n}}} \] бірдей мағынаны білдіреді), және бұл міндетті түрде бір рет аталады, оны бір адам деп атайды.

Анықтамасы. Жалғыз матрица $ N $ мөлшері - $ e $, ол кез-келген A = \ LIND [n \ \ \ оңға] $ теңдікпен жүзеге асырылады.

\ [A \ cdot e = e \ cdot a = a \]

Мұндай матрица әрқашан бірдей көрінеді: негізгі диагональда бірліктер бар, ал қалған барлық жасушаларда - нөлдер бар.

Әрі қарай жүреміз. Ассоциативадан басқа, матрицаларды көбейту де таратуда:

\ [\ Бастау {TALLING} & A \ CDOT \ сол жақ (B + c оң жақ) = A \ CDOT B + A \ CDOT C; \\ & \ сол жақ (A + B \ оң жақ) \ cdot c = c = c = c + b \ cdot c + b \ cDOT C. \\\ CDOT C. \\\ END {talign} \]

Басқаша айтқанда, егер сіз басқа екеуінің қосындысының бір матрицасын көбейту керек болса, оны осы «екі басқалардың» әрқайсысына көбейтуге болады, содан кейін нәтижелерді бүктеңіз. Іс жүзінде, әдетте, кері операция жасау қажет: біз бірдей матрицаны байқаймыз, біз оны жақшаға шығарамыз, біз оны қосамыз, осылайша өз өміріңізді жеңілдетеміз. :)

ЕСКЕРТПЕ: Толдамдылықты сипаттау үшін біз екі формуланы тіркеуге тура келді: онда сома екінші мультипликатор болып табылады және онда бірінші болып табылады. Бұл матрицаларды көбейтудің және жалпыға санаудың арқасында болып жатыр (және тұтастай алғанда, қарапайым емес алгебрада, олар қарапайым нөмірлермен жұмыс жасағанда, тіпті ойланбайды). Егер айта кетейік, егер сіз осы мүлікті емтиханға жазуыңыз керек, содан кейін сіз екі формуланы да жазасыз, әйтпесе мұғалім ашулана алады.

Жарайды, осының бәрі төртбұрышты матрицалар туралы ертегілер болды. Тіктөртбұрышты ше?

Тікбұрышты матрицалар

Ал ешнәрсе алаңмен бірдей емес.

Тапсырма 3. Көбейтуді орындаңыз:

\ [\ Сол жақ [\ Бастау \ Бастау {MATRIX} \ \\ 2} \\ 2 \\ 3 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ 5 \ \\ 1 \ \ \ \ \ \ \ \ \ \ ' \ Соңы \ cdot \ \ \ cdot \ \ cdot \ Lower [\ {Arand} {{35} {35} {35} {}}}}}}} 2 & 2 \\ 3 \ 4 \ {Arium} \ '

Шешім. Бізде екі матрица бар: $ a = \ қалды [3 \ рет 2 \ оң] $ және $ b = \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ оң] $. Біз қатардағы өлшемдерді білдіретін сандардан іштік:

\ [3; \ 2; \ 2; \ 2 \]

Көріп отырғаныңыздай, орталық екі сандар сәйкес келеді. Сонымен, матрицалар келісіліп, көбейе алады. Және нәтиже бойынша біз Matrix $ C = \ сол жақта аламыз [3 \ рет 2 \ оң] $:

\ [\ Бастау \ Баста бастаңыз \ сол жақ [\ Бастау \ Бастау \ Бастау \ \ \ \\ 2 \\ 3 \\ 2 \\ 3 \\ Бастау \ \ \ \ \\ 5 \\ 1 \\ \ 1 аяқталады {MATRIX} \\ END \\ LOTE] \ CDOT \ LOTE [\ CDOT {} {\ {{{} {} {}}}}}}}} 2 & 2 \\ 3 & 4 \\ 3 және 4 = \ Сол жақта [\ Бастау {{{} {{35} {} \ cdot} \ cdot \ \ cdot 3 \ cdot 3 \ cdot 3 \ cdot 3 \ cdot 5 + 4 \ cdot 5 + 4 \ cdot 4 \\ 2 \ cdot \ Сол жақ (-2 \ оң жақ) +5 \ CDOT 3 \ CDOT 3 & 2 \ CDOT 5 + 5 \ CDOT 4 \\ 3 \ CDOT 4 \\ 3 \ CDOT \ Left (-2 \ \ cdot) +1 \ cdot 3 \ cdot 5 + 1 \ cdot 4 \\\ END {\ \ = \ \ \\ \ = \ \ \ \ = \ \ \ {Бастау} {{{35} {{35} {}}}}} 2} 2 & 41 \\ -3 & 19 \\ \ \\ \ \\ & 19 Массив} \ оң] \ Соңы {туралау} \]

Барлығы анық: 3 жолдың соңғы матрицасында және 2 бағанда. Бұл өте $ = \ қалды [3 \ \ рет 2 \ оң] $.

Жауап: $ \ Сол жақта [\ Бастау {{} {{} {} {} {} {} {} {} {} {} {} {{35} {{35} {}}}}}} \ 11 \\ -3 \\ \\ \\ \ Бастау {Matrix}} \\ 30 \\ 19 \\ 19 \\ 19 \\ 19 \\ \\ End \\ End \\ End \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ of (} \ of) $.

Енді матрицалармен жұмыс жасай бастағандар үшін ең жақсы жаттығулардың бірін қарастырыңыз. Онда екі белгілерді көбейтпеу керек, бірақ алдымен мұндай көбейтуге рұқсат етілмегенін анықтаңыз?

Тапсырманы шешімге қарамағаннан кейін ұсынамын, бірақ алдымен оны өзіңіз орындауға тырысамын. Содан кейін жауаптармен салыстырыңыз.

Тапсырма 4. Матрицалардың барлық мүмкін жұптарын табыңыз:

\ [A = \ сол жақ [\ Баста бастаңыз \ {{35} {{35} {} {} {} {} {} \ \ \ 1 \\ 1 \ 1 \ 1 \ {MATRIX} Түзеткіш {MATRIX} {{} } -1 \\ 1 \ \ 1 \ \ 1 \ «Матриц} 2 \\ 2 \\ 2 \\ 2 \\ 2 \\ 2 \\ 2 \} Бастапқы} Бастапқы {Бастау} {{35} {{35} {}}}}}}} \\ 2 \\ 2 {Массив} \\ соңы ELST {ARRAME} \ оң] \]; $ B = \ сол жақ [\ Бастау {MATRIX} \ Бастау {MATRIX} 0 \\ 2 \\ 0 \\ 4 \\ 4 \\ 4 \\ 0 \\ 0 \\ 3 \\ 0 \\ \\ 0 Соңы {Matrix} \\\ соңы End {Matrix} \ оң] $; $ C = \ сол жақ [\ Бастау {MATRIX} 0 & 1 \\ 1 & 0 \\ 1 {Matrix} \ doice] $.

Шешім. Бастау үшін, матрицалардың өлшемдерін жазыңыз:

\ [A = \ сол жақта]; \ b = \ сол жақ [4 \ рет 2 \ оң]; \ c = \ сол жақ [2 \ рет 2 рет 2 \ оң] \]

Біз $ A матрицасын $ B $ Matrix-пен келісе аламыз, өйткені $ A $ 4-те бағандар саны 4, ал мұндай сандар тек $ b $ болып табылады. Сондықтан біз жұмыс таба аламыз:

\ [A \ cdot b = \ \ \ \ \ \ \ \ \ \ \ {{35} {{35} {{35} {}}}} 1}} 1 \} 1 \ оң жақта] \ cdo \ doice \ {\ cdot [\ бастау үшін {{{35} {} {35}} 0}} \\ 4 & 0 \\ 4 & 3 \\ 4 & 3 \\ 4 & 3 \\ 4 & 0 \\ 4 {\ \ \ \ оң] = \ \ \ \ \ bute {\ {\ {\ {\ {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{} {r}} - 10 & 7 \\ 10 & 7 \\ 10 \ {ARRAME} \ оң] \]

Оқырманды өзіңіз орындау үшін аралық қадамдарды ұсынамын. Мен алынған матрицаның мөлшерін алдын-ала анықтаған дұрыс екенін ескеремін, тіпті есептеулерден бұрын:

\ [A \ cdot b = \ \ \ \ \ \ \ \ \ \ \ \ \ CDOT \ сол жақ [4 \ рет 2 рет 2 \ оң] = \ \ \ сол жақ [2 \ \ оң] \]

Басқаша айтқанда, біз матрицалардың дәйектілігін қамтамасыз ететін «транзиттік» коэффициенттерін жоямыз.

Қандай басқа нұсқалар бар? Әрине, $ b \ cDOT $, содан кейін $ b = \ солға, $ (4 \ \ оң] $, $ a = \ қалды, $ a = \ солға [2 \ \ оң] $, сондықтан тапсырыс берілген бу $ \ қалдырыңыз (b; a \ оң) $ бірізді, ал жұмыстың өлшемі:

\ [B \ cdot a = \ \ \ \ \ \ \ \ \ \ \ \ CDOT \ сол жақ [2 \ \ \ \ оң] = \ \ \ \ \ \ \] [4 \ оң] \]

Қысқасы, шығыста $ \ сол жақ матрицасы болады [4 \ рет 4 \ оң] $, коэффициенттері оңай қарастырылады:

\ [B \ cdot a = \ \ \ \ \ \ \ \ \ \ \ {{{{35} {{35} {}}}} 0}} 0} 0 & 0 \\ 4 & 3 \\ 4 & 0 \\ 4 және 0 ] \ CDOT \ Сол [\ Бастау {{{} {{35} {{35} {}}} 1} 1}} 1}} 1} {\ оң] 1 \ doice \ doice \ {\ bute \ {\ {\ {\ {{{{{{{{{{{{{{ R}} 1 & 2 және 2 & 2 & 2 \\ 2 & 3 & 6 & 6 \\ 3 & 3 & 6 & 6 & 6 & 6 & 6 \\ 4 & -4 & 8 & 8 &8 \\ 4 \8 \\ 4 \6 \8 \8 \8 \6 \ \ \ \6 \6 \6 \ \ \6 \8 ]

Тағы бір $ C \ CDOT $ және $ және $ B \ CDOT C $ - $ немесе келісе аласыз. Сондықтан біз алған жұмыстарды жай ғана жазамыз:

\ [C \ cdot a = \ \ \ \ \ \ \ \ \ \ \ {\ {{35} {{35} {}}}}} 1 & 2 & 2 & 2 & 2 & -2 &2 \\ & -2 \\ & -2 \\ & -2 \\ Оң жақта] \]

\ [B \ c \ \ \ \ \ \ \ \ \ \ \ \ \ \ {{{35} {{35} {}}}}}}}}}} 1}} 1 & 2 \\ 0 & 4 \\ 0 & 4 \\ 0 {ARRAY} \ ] \]

Бұл оңай болды. :)

Жауап: $ ab = \ сол жақ [\ Бастау \ \ \ \ {{{{35} {{35} {}}}}}}}} \ 10 \\ 10 & 7 \\ 10 \ 7 \\ 10 \ \ \ \ \ \ \ \ \ {} $ Ba = \ сол жақ [\ Бастау {Бастау} {Бастау} {* {{35} {} {35}} 1 & 3 & 2 & 2 & 2 & 2 & 6 & 6 \ 2 & 3 & 6 & 6 \\ 4 және 6 & 6 \\ 4 4 & 8 & -8 \\\ аяқталу {ARRAME} \ оң] $; $ Ca = \ \ \ \ \ \ \ \ \ \ \ {\ {{35} {{35} {r}}}}} 1 & 2 & 2 & 2 & 2 & -2 \\ 1 \ & -2 \\ {Arium} \ оң] $; $ Bc = \ сол жақ [\ \ \ \ \ {\ {{35} {{35} {}}}}}}} 1}} 1 & 2 \\ 3 & 0 \\ 0 & 4 \\ 0 & 4 \\ 0 \ \ 4 \\ 0 \ of \ \ of \ \ of \ \ of \ of \ \ of (Arium}) $.

Жалпы, мен бұл тапсырманы өзіңіз орындауға кеңес беремін. Тағы бір ұқсас тапсырма, бұл сіздің үй тапсырмаңыздағы. Бұл қарапайым ойлар сізге матрицаларды көбейтудің барлық негізгі кезеңдерін жасауға көмектеседі.

Бірақ бұл әңгімеде аяқталмайды. Көбейтудің ерекше жағдайларына өтіңіз. :)

Векторлық жолдар мен векторлық бағандар

Ең көп таралған матрицалық операциялардың бірі - бұл бір жол немесе бір бағандағы матрицадағы көбейту.

Анықтамасы. Векторлық баған - бұл 12-ші күннің матрицасы [m \ \ рет 1 \ оң] $, i.e. бірнеше жолдардан және тек бір бағаннан тұрады.

Векторлық жол - Бұл $ \ сол жақ матрицасы [1 \ Times N \ оң] $, i.e. бір қатардан және бірнеше бағандардан тұрады.

Шындығында, біз осы нысандармен кездестік. Мысалы, стереометрияның әдеттегі үш өлшемді векторы $ \ interrightrow {a} \ \ \ \ \ \ \ \ \ \ \ \ \ \ doine) $ - векторлық жолдан басқа ештеңе жоқ. Жолдар мен бағандар арасындағы айырмашылық теориясы тұрғысынан ештеңе жоқ. Айналадағы матрицалар факторларымен келісілген мұқият болу керек.

Тапсырма 5. көбейту орындаңыз:

\ [\ \ Бастайды {массив} {* {35} {R}} 2 & -1 & 3 \\ 4 & 2 & 0 \\ -1 & 1 & 1 \\ END {Array} \ Оң] [қалдырды \ Cdot \ [1 \\ 2 \\ {массив} {* {35} {R}} бастайды -1 \\\ End {Array} \ Оң \] \] қалдырды

Шешім. Біз бұрын, келісілген матрицаның жұмыс: сол жақ $ \ [3 \ Times 3 \ Оң] \ Cdot \ Сол [3 \ Times 1 \ Оң] = \ [3 \ Times 1 \ Оң] $ қалдырды. Осы жұмысты табу:

\ [\ \ Бастайды {массив} {* {35} {R}} 2 & -1 & 3 \\ 4 & 2 & 0 \\ -1 & 1 & 1 \\ END {Array} \ Оң] [қалдырды \ CDOT \ LEFT [\ 1 \\ 2 \\ {массив} {* {35} {R}} бастайды -1 \\\ End {массив} \ Оң] = \ \ бастайды {массив} {* {35} [қалдырды {R}} 2 \ Cdot 1+ \ Сол (-1 \ оң жақ) \ CDOT 2 + 3 \ CDOT \ LEFT (-1 \ RIGHT) \\ 4 \ CDOT 1 + 2 \ CDOT 2 + 0 \ CDOT 2 \ \ 1 \ CDOT 1 + 1 \ CDOT 2 + 1 \ CDOT \ LEFT (-1 \ RIGHT) \\\ End {Array} \ Оң] = \ солға [\ бастайды {массив} {* {35} {R}} - 3 \\ 8 \\ 0 \\ End {Array} \ Оң] \]

Жауап: сол жақ $ \ [\ {массив} {* {35} {R}} басталады - 3 \\ 8 \\ 0 \\\ End {Array} \ Оң] $.

Тапсырма 6. көбейту орындаңыз:

\ [\ {Массив} {* {35} {R} басталады \ [{жиымын} {* {35} {R}} 1 & 2 \ 3}} 1 & 2 \ RIGHT] \ CDOT \ LEFT басталады \ [қалдырды } 3 & 1 & -1 \\ 4 & -1 & 3 \\ 2 & 6 & 0 \\ End {Array} \ Оң] \]

Шешім. Тағы да, бәрі дәйекті болып табылады: сол жақ $ \ [1 \ Times 3 \ Оң] \ Cdot \ Сол [3 \ Times 3 \ Оң] = \ [1 \ Times 3 \ Оң] қалдырды $. Біз жұмысты қарастыру:

\ [\ {Массив} {* {35} {R} басталады \ [{жиымын} {* {35} {R}} 1 & 2 \ 3}} 1 & 2 \ RIGHT] \ CDOT \ LEFT басталады \ [қалдырды } 3 & 1 & -1 \\ 4 & -1 & 3 \\ 2 & 6 & 0 \\ END {Array} \ Оң] = \ Сол [\ {Array} {* {35 Begin} {R}} 5 & -19 & 5 \\ соңы {Array} \ Оң] \]

ойларыңша - Шын мәнінде, мен барлық осы үш сандарды санау бір сынықтары болды. Ал мен жауап жазып ғана. :)

Жауап: сол жақ $ \ [\ {Matrix} 5 & -19 & 5 \\\ END {Matrix} \ Оң басталады] $.

Көріп отырсыздар, сіз бірнеше векторлық жол және шығу кезінде квадрат матрица бойынша векторлық баған, біз әрқашан бірдей өлшемдегі жолды немесе бағанды ​​алу. Бұл факт көптеген қосымшалар бар - (нәтижесінде, сондай-ақ, теңдеулер жүйесін азайту, бірақ қайғылы туралы болмайық,) координаттар өзгерістердің барлық түрлері сызықтық теңдеулер шешу бастап.

Мен бәрі мұнда айқын болды деп ойлаймын. Бүгінгі сабақтың соңғы бөлігіне өтіңіз.

дәрежеде матрицаның құрылысы

белгілі бір назар көбейту барлық операциялардың арасында, ол дәрежеде көтерілген - біз өздері бірнеше рет сол нысан көбейту кезде осы болып табылады. Матрица жоқ ерекшелік болып табылады, олар сондай-ақ әр түрлі градус тұрғызылған болады.

Мұндай жұмыстар әрқашан келісілді:

\ [A \ cdot а = \ қалдырды [N \ рет N \ \ cdot \] солға [N \ рет N \ оңға] = \ солға [N \ рет N \ \] құқығы]

Ал әдеттегі градусқа дәл сол көрсетіңіз:

\ [\ Бастайды {туралау} & A \ cdot а = {{а} ^ {2}}; \\ & A \ cdot A \ cdot а = {{а} ^ {3}}; \\ & \ underbrace {а \ cdot A \ cdot \ ldots \ cdot бір} _ {N} = {{а} ^ {N}}. \\ \ Аяқтау {talign} \]

Бір қарағанда, бәрі қарапайым болып табылады. АТ іс жүзінде көрінеді көрейік:

Тапсырма 7. Eduge көрсетілген дәрежеде матрица:

$ {{\ Солға [\ {матрицалық} 1 & 1 \\ 0 & 1 басталады \\ END {MATRIX} \ RIGHT]} ^ {3}} $

Шешім. Кел, тұрғызыңыз көрейік. Біріншіден, алаңда erend:

\ [\ {Туралау} бастайды {матрицасын} Begin \ [= \ Сол {{\ \ END {MATRIX} \\ RIGHT {матрицалық} 1 & 1 \\ 0 & 1 басталады]} ^ {2} \ [қалдырды} 1 & 1 \\ 0 & 1 \\ END {MATRIX} \ RIGHT] \ CDOT \ LEFT [\ {Matrix} 1 & 1 \\ 0 & 1 Begin \\ END {MATRIX} \ RIGHT] = \\ \ \ солға [ \ {алапты} {* {35} {R}} 1 басталады \ CDot 1 + 1 \ CDOT 0 & 1 \ CDOT 1 + 1 \ CDOT 1 \\ 0 \ CDOT 1 + 1 \ CDOT 0 & 0 \ CDOT 1 + 1 \ CDot 1 \\\ End {Array} \ Оң] = \\ \ = \ солға [\ бастайды {массив} {* {35} {R}} 1 & 2 \\ 0 & 1 \ \\ End {Array } \ Оң] \ End {туралау} \]

\ [\ бастау '{table} [{\ but [\ \ \ \ \ \ 0 \ 1 \\ 0 \ 1 \\ 1 \} 1 \ \ \ \} 1 \ оң]} ^ {3}} = {{\ сол жақ [\ сол жақ [\ бастау [\ бастау үшін } 1 & 1 \\ 0 & 1 \\ END {MATRIX} \} \ {3} \} \ cdot \ cdot \ cdot \ cdot [\ бастау '\ butch} 1 \ \ \ \\ 0 және 1 \\ 0 және 1 \\ 0 және 1 \\ 0 {матрица} \ Оң] = \\ \ = \ \ \ \ \ \ \ \ {35} {{35} {{35} {}} \}}} 1 \ 1 \ 1 \ 1 \ 1 \ оң] \ cdot \ {\ cdot's [\ the bute {matchrix } 1 & 1 \\ 0 & 1 \\ 1 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {Arand} {\ {{35} {{35} {}}} 1} 1 \\ 0 & 1 \\ Соңы {массив} \ оң жақта] \ соңы \ l =] \]

Осымен болды.:)

Жауап: $ \ Сол жақта [\ Бастау {MATRIX} 1 & 3 \\ 0 & 1 \\ END {MATRIX} \ Doice] $.

Тапсырма 8. Матрицаны көрсетілген дәрежеге дейін тазалаңыз:

\ [{{{\ сол жақ [\ Бастау {MATRIX} 1 & 1 \\ 0 & 1 \\ 1 \ {Matrix} \ оң]} ^ {10}} \]

Шешім. Бірақ «дәреже тым үлкен», «әлем әділ емес», ал «әділ емес» және «ілімдер толығымен жоғалды» дегенге жылаудың қажеті жоқ. Шындығында, бәрі оңай:

\ [\ бастау '{table} [\ \ but \ \ \\ 0 \ \ 1 \\ 0 \ 1 \\ 0 \ 1 \ \ \ \} 1 \ 1 \ оң]} ^ {10}} = {{10}} } 1 & 1 \\ 0 & 1 \\ END {Matrix} \} \ {3} \ \ cdot \ cdot \ cdot {{\ сол жақ [\ Бастау \ Бастау \ Бастау \} 1 \ \ \ \\ 0 және 1 \\ 0 және 1 } \ {3}} ^ {3} \ cdot {\ {\ {\ but {\ {\ \} 1 \ \ \ \ 1 \ \ 1 \ {MATRIX} END]} ^ {3}} \ cdot \ r\ cdot \ қалды \ Басталу {MATRIX} 1 & 1 \\ 0 & 1 \\ 0 {Matrix} соңғы] = \ \ \ \ \ \ \ \ \ \ Left (\ сол жақ [\ Бастау \ Бастау {Matrix} 1 & 1 \\ 0 және 1 \\) {MATRIX} \ DOOL [\ cdot \ {\ \ \\ 0} 1 \ \\ 0 & 1 \\ 1 \ 1 \\ 1 \ 1 \ \ \ \ оң) \ cDOT \ сол жақ) \ cdot & 3 \\ 0 & 1 \\ {Matrix} соңғы] \ CDOT \ LOTE [\ tast \ tast \ \ \\ 0 & 1 \\ 0 & 1 \\ 1 \ 1 \ of (Matrix} \ \ \\ \) = \ сол жақ [\ Бастау {MATRIX} 1 & 6 \\ 0 & 1 \\ 0 {MATRIX} соңғы] \ cDOT \ сол жақ [Матрица \ Left \ the butch \ {Matrix} 1 & 1 \\ 0 & 1 \\ 0 & 1 \\ 1 \ {Matrix} \ \\ & = \ \ \\ \ \ сол жақ [\ Бастау {Matrix} 1 & 10 \\ 0 & 1 \\ 1 \ {Matrix} \ doice \ {login} \]

Ескерту: Екінші жолда біз көбейту ассоциациясын қолдандық. Шындығында, біз оны алдыңғы тапсырмада қолдандық, бірақ ол өте анық болды.

Жауап: $ \ Сол жақта [\ Бастау {MATRIX} 1 & 10 \\ 0 & 1 \\ END {MATRIX} \ Doice] $.

Көріп отырғаныңыздай, матрицаның құрылысына еш қиындық тудырмайды. Соңғы мысал жалпылануға болады:

\ [{{{\ \ сол жақ [\ Бастау \ {MATRIX} 1 & 1 \\ 0 {MATRIX} соңғы]} {matrix} \} {\ \ \ \ \ \ \ \ {\ {\ {\ {{{{{{{{{{{{{{{{{{{{{{{{{{{{{} R}} 1 & n \\ 0 & 1 \\ END {ARRAME} \ оң] \]

Бұл фактіні математикалық индукция немесе тікелей көбейту арқылы дәлелдеу оңай. Дегенмен, дәрежені осындай заңдылықтармен ұстауға әрдайым бола бермейді. Сондықтан, мұқият болыңыз: жиі бірнеше матрицаларды көбейтіңіз «Строй» белгілі бір кәдімгі үлгіні іздеуден гөрі оңай және жылдамырақ болып көрінеді.

Жалпы алғанда, олай емес, ең жоғары мағынаны іздемеңіз. Қорытындылай келе, үлкен матрицаның құрылысын қарастырыңыз - «Немесе $ \» \ қалды [3 \ 1 рет 3 \ оң] $.

Тапсырма 9. Матрицаны көрсетілген дәрежеде тазалаңыз:

\ [{{{{\ сол жақ [\ Бастапқы \ usted {Matrix} 0 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 & 1 \\ 1 және 0 \\ 1 \ оң]} ^ {3}} \]

Шешім. Заңдылықтарды іздемейді. Біз «Строй» жұмыс істейді:

\ [{{{{\ сол жақ [\ \ {MATRIX} 0 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 {MATRIX} END]} ^ {3}} = {{\ {\ {\ {\ {\ {\ {\ {\ {\ {\ {\ {\ {\ {\ {\ {\ {\ Сол жақ [\ бастау {MATRIX} 0 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 \ 1 \\ 1 \ 1 және 0 \\ 1 оң]} {matrix} \} \ cDOT \ cDOT \ \ cdot [\ tast \ tast {Matrix } 0 & 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 {Matrix} \ оң] \]

Бастау үшін, алаңдағы осы матрицаны орнатыңыз:

\ [\ бастау '{talign} [{\ сол жақ [\ Бастапқы {Бастау} 0 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 0 \\ 1 \ {Matrix} \ оң]} ^ {2} } \ \ \ \ \ \ \ {MATRIX} 0 & 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 \ 1 \\ 1 \ & 0 \\ 1 \ 1 және 0 \ \ оң] \ cDOT \ сол жақ [\ Бастау {Matrix} 0 & 1 \ 1 \ 1 \ 1 \ 1 \\ 1 \ 1 \\ 1 \ 1 \\ 1 \ 1 \\ 1 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\ {Arand} {{{35} {} {}} 2 және 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 2 \\ 1 {ARRAME} \ doice \ оң] \ соңы \] \]

Енді текшеге салынады:

\ [\ бастау '{talign} [{\ сол жақ [\ Бастау {MATRIX} 0 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 \ 1 & 0 \\ 1 \ {Matrix} \ оң]} ^ {3} } \ \ \ \ \ \ \ \ \ {Бастау} {{{35} {{35} {}}} 2 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 \ & 2 \\ 1 \ \ \ \ \ \ cdot \ Сол жақ [\ Бастау {Matrix} 0 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 {Matrix} End {Matrix} \ \ \ \ \ \ \ \ \ \ \ \ \ {\ DESTATE \ {Arand \ {\ \ бастау ' {35} {} {}} 2}} 2 & 3 \\ 3 & 3 & 3 \\ 3 & 3 \\ 3 & 3 & 3 \\ 3 & 3 \\ 3 \ {Arase} \ doice \ {lOOD \]

Осымен болды. Тапсырма шешілді.

Жауап: $ \ Сол жақтағы [\ Бастау {MATRIX} 2 & 3 & 3 \\ 3 & 2 & 3 \\ 3 & 3 & 3 \\ 3 & 3 \\ 3 & 2 \\ 3 \ {MATRIX} \ Doice] $.

Көріп отырғаныңыздай, есептеу көлемі көп болды, бірақ мұның мағынасы осыдан өзгермеді. :)

Бұл сабақта аяқталуы мүмкін. Келесі жолы біз кері операцияны қарастырамыз: қолданыстағы жұмыс бойынша біз бастапқы факторларды іздейміз.

Сіз қазірдің өзінде, мүмкін, бұл қайтару матрицасы және оның орналасу әдістері туралы.

Сондай-ақ қараңыз:

  1. Дистинант
  2. Кері матрица
  3. Математика бойынша EGE-2011 бойынша сот талқылауы, №8 нұсқа
  4. Шеңбердің ауданы
  5. Логариттерді қалай тезірек санауға болады
  6. 13-тапсырма бойынша Webinar: Трригонометрия

Матрицалары бар әрекеттер

Бұл әдістемелік құрал сізге орындауға үйренуге көмектеседі Матрицалары бар әрекеттер : Матрицаларды қосу (алу), матрицалық матрицаны, көбейту, кері матрицаны көбейту. Барлық материалдар қарапайым және қол жетімді түрде орнатылған, сондықтан сәйкес мысалдар келтірілген, сондықтан дайын емес адам да матрицалармен әрекеттерді орындауға үйрене алады.

Өзін-өзі бақылау және өзін-өзі тексеру үшін сіз матрицалық калькуляторды тегін >>> жүктей аласыз. Мен теориялық есептеулерді, кейбір жерлерде, «саусақтарда» түсініктемелерін және ғылыми ережелерді қолдануға тырысамын. Қатты теорияның ғашықтары, өтінемін, сынға бермейді, біздің міндетіміз .

Матрицалармен әрекетті орындауды үйреніңіз Тақырып бойынша ультра жылдам дайындық үшін (кім «жанып тұрған») қарқынды PDF курсы бар

Матрица, анықтаушы және тұру!

Бастайық. Матрица - кез-келген тіктөртбұрышты үстел Элементтер Матрица - кез-келген тіктөртбұрышты үстел . Ретінде Біз сандарды қарастырамыз, яғни сандық матрицалар. Элемент

- Бұл термин. Термині есте сақтаған жөн, ол жиі кездеседі, бұл кездейсоқ емес, мен оны бөлектеу үшін майлы шрифті қолданғаным жоқ. Белгілеу:

Матрицалар әдетте астаналық латын әріптерімен белгілейді Мысал:

«Екі үш» матрицаны қарастырайық: Матрица - кез-келген тіктөртбұрышты үстел :Бұл матрица алтыдан тұрады Матрицаның ішіндегі барлық сандар (элементтер) өздерінде бар, яғни сөйлеу шегерімі жоқ:

Бұл жай кесте (жиынтық) сандар! Келісіңіз Реттеуге болмайды

Нөмірлер, егер басқаша көрсетілмесе. Әр санның өз орны бар, оларды шығару мүмкін емес! Қарастырылып отырған матрицаның екі бағыты бар:

Және үш баған: Стандарт : Олар матрицаның мөлшері туралы сөйлескен кезде, содан кейін алғашқыда

Жолдар санын көрсетіңіз, содан кейін ғана - бағандар саны. Біз «екі үш» матрицаның сүйектерін жай ғана бөлшектейміз. Егер матрицаның жолдары мен бағандарының саны сәйкес келсе, онда матрица шақырылады Шаршы , Мысалға:

- «Үш үш» матрицасы. Егер матрицада бір баған болса немесе бір жол , содан кейін мұндай матрицалар да аталады .

векторлар Шын мәнінде, матрицаның түсінігі, біз мектептен бастап білеміз, мысалы, «X» координаттары мен «Иганк» және «Игрек» туралы ойды қарастырамыз: . Негізінен, нүктенің координаттары  и «Бір-екі» матрицада құлыпталған. Айтпақшы, мысал келтірілген, неге сандар тәртібі:

- Бұл ұшақтың екі түрлі нүктелері. Енді тікелей зерттеуге барыңыз :

Матрицалары бар әрекеттер .

1) Бірінші әрекет. Матрицадан минусқа жету (матрицада минус жасау) Біздің матрицаға оралу

. Сіз байқағандай, бұл матрицада теріс сандар өте көп. Матрицамен әр түрлі әрекеттерді орындау тұрғысынан өте ыңғайсыз, ол көптеген минус жазу ыңғайсыз және дизайнда жаман көрінеді. :Мен матрицадан тыс минус жасаймын, матрицалық белгінің әр элементін өзгертемін

Уля, түсінгендей, белгі өзгермейді, нөлге тең келмейді - ол нөлге тең. Беру мысалы:

. Жаман көрінеді. :

Біз матрицада минус жасаймыз, әр элементтің матрицасын өзгертеміз Жақсы, ол әлдеқайда әдемі болды. Ең бастысы, матрицамен кез-келген әрекеттерді орындау оңайырақ болады. Өйткені мұндай математикалық халық белгісі бар: .

Неғұрлым көп минус - неғұрлым шатасулар мен қателіктер 2) .

Матрицалар әдетте астаналық латын әріптерімен белгілейді

Екінші әрекет. Матрицаны санға көбейту Матрицаны санға көбейту үшін бәрі қарапайым, қажет барлығы

Матрицалық элемент берілген санға көбейтіңіз. Бұл жағдайда, жоғарғы үште.

Тағы бір пайдалы мысал:

- матрицаны фракцияға көбейту Алдымен не істеу керектігін қарастырайық :КЕРЕК ЕМЕС Алдымен матрицаны енгізудің қажеті жоқ, алдымен матрицамен, екіншіден, мұғалімнің шешімін тексеруді қиындатады (әсіресе егер болса)

- Қорытынды жауаптың жауабы). Алдымен не істеу керектігін қарастырайық Әсіресе,

MIDRIX-тің әр элементімен бөлісіңіз, минус жеті үшін: Мақаладан Математика манекендерге арналған немесе бастауға кірісу

Біз жоғары математикадағы үтірмен ондық фракциялар әр жолдан аулақ болуға тырысады. Жалғыз нәрсе қымбатты

Бұл мысал келтіріңіз - матрицада минус жасау: Бірақ егер БӘРІ Матрицаның элементтері 7-ге бөлінді Қалдықсыз

Матрицалар әдетте астаналық латын әріптерімен белгілейді

Сонда сіз (және сізге керек!) бөлек болар еді. Бұл жағдайда сіз және мүмкін ҚАЖЕТТІ Матрицаның барлық элементтерін қосу Матрицалардың барлық нөмірлері 2-ге бөлінеді .

Қалдықсыз

Ескерту: Жоғары математика теориясында «Бөлім» мектеп тұжырымдамасы жоқ. «Бұл оған бөлінеді» деген тіркесімнің орнына әрқашан «фракциямен көбейту» деп айтуы мүмкін. Яғни, дивизия - бұл көбейтудің ерекше жағдайы. .

3) үшінші әрекет. Матрицаны беру

Матрицалар әдетте астаналық латын әріптерімен белгілейді

Матрицаны ауыстыру үшін сіз оның сызықтарын ауысқан матрицаның бағанына жазуыңыз керек.

Матрицаны трансплантациялау

Мұндағы сызық тек біреуі, ережеге сәйкес оны бағанға жазу керек:

- транзотсейн матрицасы. Көлденген матрицаны әдетте кенеттен индекспен белгілейді.

немесе жоғарыдағы оң жақта түртіңіз.

Матрицаны ауыстыру үшін сіз оның сызықтарын ауысқан матрицаның бағанына жазуыңыз керек.

Мысал келтіріңіз:

Алдымен, бірінші бағанды ​​бірінші бағанға қайта жазыңыз:

Екінші жолды екінші бағанға қайта жазыңыз:

Сонымен, үшінші бағанға үшінші жолды қайта жазыңыз:

Дайын. Бейнелеп айтып, трансплантациялау - бұл матрицаны оң жақ жоғарғы бұрышқа алу және оны ақырын «өзіңізге» ақырын «өзіңізден» бұру матрицаның бағандарына бұрыңыз. Мұндай осында менде ассоциация бар. .

4) төртінші әрекет. Сома (айырмашылық) матрицалары

Матрицалар әрекетінің мөлшері қарапайым.

Матрицалар әдетте астаналық латын әріптерімен белгілейді

Матрицаларды бүктеуге болмайды. Матрицаларды қосу (азайту) жасау үшін, олардың мөлшері бірдей болуы керек.  и

Мысалы, егер «екі-екі» матрица берілсе, оны тек «екі екі» матрицамен бүктеуге болады және басқалары жоқ! :

Матрицаларды бүктеңіз Матрицаларды бүктеу үшін тиісті элементтерді бүктеу керек. .

Матрицалар әдетте астаналық латын әріптерімен белгілейді

Матрицалардың айырмашылығы үшін ереже ұқсас ,

Тиісті элементтер арасындағы айырмашылықты табу қажет. :

 

Айырмашылық матрицасын табыңыз

Бұл мысалды қалай шешуге болады? Қосымша минустардан арылуға болады, өйткені бұл матрицада минус жасаймыз .

Ескерту: Жоғары математика теориясында «алу» мектеп тұжырымдамасы жоқ. «Осының орнына» фразаның орнына «теріс санды қосу әрқашан мүмкін». Яғни, алу - бұл қосымша қосымша.

5) бесінші әрекет. Матрицалық көбейту

Ормандағы ең алыс, қалың партизандар. Мен бірден айтамын, матрицаларды көбейту ережесі өте таңқаларлық көрінеді, сондықтан оны түсіндіру оңай емес, бірақ мен мұны нақты мысалдарды қолдана отырып жасауға тырысамын. Матрицаларды көбейтуге болады? Матрицаға матрица көбейтуге болады қажетті, .

Матрицаның бағандар санына матрицаның қатарларының санына тең Мысал: ?

Матрицаны көбейтуге бола ма?

матрицада

Сонымен, матрицаның мәліметтерін көбейту мүмкін.

Бірақ егер матрицалар жерлерде реттелсе, онда бұл жағдайда көбейту мүмкін емес!

Сондықтан көбейту мүмкін емес:  и Сат сирек емес, студенттерге көбейту мүмкін емес, матрицаны көбейту ұсынылған кезде, тапсырмалар кездеседі. Айта кету керек, кейбір жағдайларда сіз матрицаны көбейте аласыз және солай.

Мысалы, матрицалар үшін,

Мүмкін, көбейту

және көбейту

Матрицалар әдетте астаналық латын әріптерімен белгілейді

Матрицаны қалай көбейту керек? Мысал: Матрицаларды көбейту нақты мысалдар бойынша жақсы түсіндірілген, өйткені қатаң анықтауда оқырмандар шатастырады (немесе асырылы).

Қарапайым тілмен бастайық:

Матрицалық көбейту

Матрицаны қалай көбейту керек? Мысал:

Мен әр істің формуласын дереу беремін:

- Дереу үлгіні қолданып көріңіз.

Мысал не қиын: Формула: Нәтижесінде нөлдік матрица деп аталады.

Көбейтуге тырысыңыз (дұрыс жауап

). Ескертіп қой

! Бұл әрқашан дерлік! Мысал: Осылайша,

Матрицаны көбейту кезінде қайта қарау мүмкін емес!

Матрицаны қалай көбейту керек? Мысал:

Егер тапсырма матрицаны көбейту ұсынылса

, Маған осы ретпен көбейту керек. Ешқашан керісінше емес.

Үшінші ретті матрицаларға барыңыз: Мысал:

Формула алдыңғы формулаларға өте ұқсас:

Енді оны келесі матрицаларды көбейту кезінде анықтауға тырысыңыз: .

Матрицаны көбейтіңіз

Міне, дайын шешім, бірақ алдымен оған қарамауға тырысыңыз!

6) алтыншы әрекет. Қайтару матрицасын табу

Бұл тақырып өте кең, және мен бұл затты жеке параққа жасадым.

Осы уақытта қойылым аяқталды.

 Матрицалық көбейтудің алгоритмі заманауи процессорлардың ресурстарын тиімді пайдалануға мүмкіндік береді. Бірақ қазіргі заманғы процессорлардың ресурстарын максималды пайдалану емес, бұл реттелмеген тапсырмадан алшақ екенін анық көрсетеді. Микроерлерді пайдалану арқылы және процессор кэшінде максималды деректерді локализациялау басқа алгоритмдер үшін сәтті қолданылуы мүмкін.

Кіру деңгейін игергеннен кейін мен матрицалармен матрицалар бойынша жұмыс істеуді ұсынамын. Матрицалық өрнектер.

Сәттілік тілеймін!

Жариялады: Емелин Александр

Ауырмаңалануларға арналған ең жоғары математика және тек >>>

(Басты бетке өтіңіз)

Авторға қалай алғыс айтуға болады?

«Бәрі өтті!» - студенттерге онлайн-сервистік көмек

Кіріспе

Матрицаларды көбейту - түрлі сандық әдістерде, атап айтқанда, сонымен қатар машиналарды оқыту алгоритмдерінде кеңінен қолданылатын негізгі алгоритмдердің бірі болып табылады. Рата желісінің конволюциялық қабаттарында тікелей және кері сигналдарды таратудың көптеген енгізулері осы операцияға негізделген. Сондықтан кейде машинаны оқытуға жұмсалған жалпы уақыттың 90-95% дейін, бұл осы операцияға арналған. Неліктен бұл болып жатыр? Жауап процессорлар, графикалық үдеткіштер (және соңғы уақытта және матрицалық көбейтудің арнайы үдеткіштері) үшін осы алгоритмді тиімді жүзеге асыруда жатыр. Матрицалық көбейту - бұл заманауи процессорлар мен графикалық үдеткіштердің барлық есептеу ресурстарын тиімді пайдалануға мүмкіндік беретін бірнеше алгоритмдердің бірі. Сондықтан, көптеген алгоритмдер матрицалық көбейтуге тырысып жатқандығы таңқаларлық емес - мәліметтерді дайындауға байланысты қосымша шығындар әдетте алгоритмдердің жалпы үдеуімен ғана төленеді.

Сонымен, матрицалық көбейту алгоритмі қалай? Қазір бұл алгоритм, соның ішінде ашық бастапқы кодтарда көптеген енгізулер бар. Өкінішке орай, бұл іске асырудың коды (көбінесе ассемблерде) өте күрделі. Ағылшын тіліндегі жақсы мақала бар.

, осы алгоритмдерді егжей-тегжейлі сипаттау. Таңқаларлығыма, мен Хабреде аналогты таппадым. Мен үшін, бұл себеп өзінің мақаласын жазу жеткілікті. Презентация сомасын шектеу үшін мен кәдімгі процессорларға арналған бір бұрандалы алгоритмнің сипаттамасын шектедім. Графикалық үдеткіштер үшін көп процедуралар мен алгоритмдердің тақырыбы жеке мақаланы анық лайықты.

Презентация процесі алгоритмді дәйекті түрде үдеуі туралы мысалдармен бірге жүргізіледі. Мен ең қарапайым тапсырманы жазуға тырыстым, бірақ енді жоқ. Мен істедім деп сенемін ... 

Проблемалық тұжырымдама (0 қадам) AЖалпы алғанда, Matrix-тің мультипликациясы функциясы келесідей сипатталған: BC [i, j] = a * c [i, j] + b * sum (a [i, k] * b [k, j]); CМатрица орналасқан жерде

Оның мөлшері MX K, матрицасы бар

- k x n, және матрица 

- m x n.

Біз презентациядан нұқсан келтірмейміз, a = 0 және b = 1 деп болжауға болады: 

C [i, j] = sum (a [i, k] * b [k, j]);

Оның C ++ бойынша «Маңдайдағы» іске асыруы формула бойынша келесідей болады:

Void gemm_v0 (int m, int n, int k, c) int int * a, cont * c) {for (int i = 0; i <m <m; i) {(int in) {(int j = 0; j <n; ++ j) {c [i * n + j] = 0; (int k = 0; k <k; k <k; k; k) c [i * n + j] + = a [i * k + k] * b [k * n + j]; }}}

  1. Оның өнімділігі мен шын мәнінде өлшеу ақымақтық болар еді, ал шын мәнінде өлшеулер көрсетіледі (m = n = k = 1152), бұл шамамен 1,8 секундты алады (сынақ машинасы - [email protected]ГГЗ, ОС - Ubuntu 16.04.6 LTS) , Компилятор - G ++ - 6.5.0b құрастырушы нұсқасы - «-FPic -O3 -Marh = hasWell»). Матрицалық көбейту бойынша операциялардың ең аз саны 2 * m * n * k = 2 * 10 ^ 9. Өзгедек, жұмысы, өнімділігі - 1,6 гллоп, ол осы процессор үшін бір бұрғалған өнімділіктің теориялық шегінен, егер AVX2 / FMA және ~ 200 гффлоптарды пайдаланумен шектелсе, AVX-512 (AVX-512) . Сонымен, теориялық шегіне жақындау үшін не қажет? Әрі қарай, бірқатар дәйекті оңтайландыру барысында біз көптеген стандартты кітапханаларда қолданылған нәрсені көбейтетін шешімге келеміз. Оңтайландыру барысында мен тек AVX2 / FMA / FMA, AVX-512 қолданамын, өйткені олардың кесуі әлі де кішкентай.
  2. Айқын кемшіліктерді жою (1 қадам) BАлдымен алгоритмнің ең айқын кемшіліктерін жойыңыз:
Массив элементтерінің мекен-жайларын есептеуді жеңілдетуге болады - ішкі циклден тұрақты бөлігін жасауға болады. 

Бастапқы нұсқада массивтің элементтеріне кіру

Бұл бірізді емес. Егер сіз есептеу тәртібін ішкі цикл барлық үш матрицаның қатарына қарай ретте айналып өтетіндей етіп өзгертіңіз.

Vemm_v1 (int m, int n, int k, cont int * a, cont * c) {for (int i = 0; Мен <m <m; i <of ++) {flate * c = c = c + i * N; (INT J = 0; j <n; j) c [j] = 0; (int k = 0; k <k; k <k; k) {cont virt * b = b + k * n; Float a = A [i * k + k]; (int j = 0; j <n; j) c [j] c [j] + = a * b [j]; }}}

Тест өлшеулерінің нәтижесі орындалу уақытын 250 мс немесе 11,4 глольде көрсетеді. Анау. Біз осындай кішігірім түзетулермен 8 рет үдеуге ие болдық! 

Ішкі циклді векторлы (2-қадам)

  1. Егер сіз ішкі циклге мұқият қарасаңыз (j айнымалыға сәйкес), есептеулерді блоктармен (векторлар) жүргізуге болатындығын көруге болады. Қазіргі заманғы процессорлардың барлығы дерлік осындай векторларды есептеуге мүмкіндік береді. Атап айтқанда, AVX нұсқауы 256 бит векторларымен жұмыс істейді. Бұл сізге әдептілік үшін бір дәлдікпен нақты сандар үшін 8 операция жасауға мүмкіндік береді. AVX2 / FMA тағы бір қадам алға айналдырады - бұл вектордың үстінен көбейту мен қосымша (D = A * B + C) қосымшасын жасауға мүмкіндік береді. Intel Desktop процессорлары 4-ші буыннан бастап 2 256 биттік FMA модульдеріне ие, бұл оларға 2 * 2 * 8 = 8 = 32-дегі әрекеттерді теориялық түрде орындауға мүмкіндік береді (Float-32). Бақытымызға орай, AVX2 / FMA нұсқаулары тікелей C / C ++ тілінен тікелей C / C ++ тілінен қолданылуы өте оңай, олар енгізілген функцияларды қолдана отырып (ішкі жүйелер). AVX2 / FMA үшін олар тақырып файлында <Immintrin.h> файлында жарияланады.
  2. Void gemm_v2 (int m, int n, int k, cont int * a, cont * c) {for (int i = 0; мен <m <m; i <m i) {flate * c = c = c + i * N; (int j = 0; j <n; j <n; j + = 8) _MM256_STOREU_PS (c + j + 0, _MM256_SetZero_PS) (); (int k = 0; k <k; k <k; k) {cont virt * b = b + k * n; __M256_set1_PS (a [i * k + k]); (Int j = 0; j <n; j <n; j + = 16) {_MM256_STOREU_PS (c + _ 0, _MM256_FMADD_PS (A, _MM256_LOAKU_PS), _mm256_Lopu_PS (c + j + 0)))); _mm256_storeu_ps (c + j + 8, _MM256_FMADD_PS (a, _MM256_Loate_PS), _MM256_LOAKU_PS (c + j + 8))))); }}}}

Тесттерді іске қосып, 217 м немесе 13,1 гффлоптарды алыңыз. Ой! Үдеткіш небары 15% құрайды. Қалай солай? Мұнда сіз екі факторды ескеруіңіз керек:

Компиляторлар қазір ақылды болды (бәрі бірдей емес!) Және қарапайым циклдерді авто циклдерді автоцкторизациялау міндетін толығымен жеңді. 1-ші нұсқада құрастырушы AVX2 / FMA нұсқауларына қатысты, өйткені қолды оңтайландыру бізге артықшылық бермеді.

Бұл жағдайда есептеу жылдамдығы процессордың есептеу қабілеттеріне емес, жүктеу жылдамдығы мен деректерді шығаруда. Бұл жағдайда 2 256 биттік фма блоктарын іске қосу процессоры 4 жүктеп алу үшін және 2 256 биттік векторды 2 256 биттік векторға түсіріп алу үшін процессор қажет. Бұл процессор кэшінің (512/256 бит) өткізу қабілеттілігінің (512/256 бит) өткізу қабілеттілігіне қарағанда екі есе көп, бұл жадтың өткізу қабілеттілігі туралы айтпағанда, аз (бір арна үшін 64 биттік)).

Сонымен, заманауи процессорлардағы жадтың шектеулі қабілеттілігі туралы негізгі проблема. Процессор іс жүзінде жұмыс істемейді, олар деректерді жүктелген және жадта сақталған кезде күтеді.

Алгоритмді оңтайландырудың келесі қадамдары жадқа қол жеткізуді азайтуға бағытталады. СБіз Microker жазамыз (3-қадам) САлдыңғы нұсқада 1 фма операциясы 2 жүктеу және 1 түсіру үшін есептік жазба. A и BБарлық жүктеулер мен түсіру нәтижелері алынған матрицамен кездеседі

: Сізден деректерді жүктеп алу керек, c [i] [j] + = a [k] [k] * b [k] [j], содан кейін үнемдеңіз. Және бірнеше рет. Процессор жұмыс істей алатын ең жылдам жад - бұл өзінің тізілімдері. Егер біз матрицалық мәнді сақтасақ B.

Қуыршақтық тіркелуінде, есептеу кезінде сіз тек матрицалардың құнын жүктеуіңіз керек С. Енді бізде тек 2 жүктеу үшін 1 FMA операциясы бар.

Егер біз Matrix-тің екі көрші бағандарының құндылықтарын сақтасақ [i] [j] және c [i] [j + 1], содан кейін Matrix-тің жүктелген мәнін [i] [k] қайта пайдалана аламыз. Және 1 FMA операциясы тек 1,5 жүктеуді қажет етеді. Сонымен қатар, нәтижені 2 тәуелсіз регистрде жүргізген кезде, біз процессорға әдептілік үшін 2 FMA операциясын жүргізуге мүмкіндік береміз. Сол сияқты, сіз тізілімдердегі екі іргелес сызықтың мәндерін сақтай аласыз - содан кейін жинақ матрицалық мәндерде сақталады СINTEL Intel Desktop процессорлары 2-ші буыннан басталады 16256 биттік векторлық регистрлер (64 биттік процессор режимі үшін жарамды). Оның 12-сі алынған матрицаның бір бөлігін сақтау үшін пайдалануға болады

6x16 мөлшері. Нәтижесінде біз 12 * 8 = 96 FMA операциясын тек 16 + 6 = 22 мәнін жадтан жүктеп аламыз. Біз 2,0-ден 0,23-ке дейін жадқа қол жетімділікті, 1 фманың жұмысына дейін төмендетілдік - 10 есе жуық! 

Матрицаның осындай кішкентай бөлігін есептеуді жүзеге асыратын функция С:

, әдетте, микронер деп аталады, келесі функцияның мысалы: 

жарамсыз micro_6x16 (int k, cont int int), cont int қадамы, cont int int * a, int * c, int * c00 = int int ldc) {__m256 c00 = _MM256_SETZERO_PS (); __M256 c10 = _MM256_SETZERO_PS (); __M256 C20 = _MM256_SETZERO_PS (); __M256 c30 = _MM256_SETZERO_PS (); __M256 c40 = _MM256_SETZERO_PS (); __M256 C50 = _MM256_SETZERO_PS (); __M256 C01 = _MM256_SETZERO_PS (); __M256 C11 = _MM256_SETZERO_PS (); __M256 C21 = _MM256_SETZERO_PS (); __M256 C31 = _MM256_SETZERO_PS (); __M256 c41 = _MM256_SETZERO_PS (); __M256 C51 = _MM256_SETZERO_PS (); Const int offset0 = lda * 0; Cont int intsset1 = lda * 1; Const int offset2 = LDA * 2; Cont int offset3 = LDA * 3; Const int offset4 = LDA * 4; Cont int offset5 = LDA * 5; __M256 B0, B1, A0, A1; (int k = 0; k <k; k ++) {b0 = _MM256_Loadu_PS (b + 0); B1 = _MM256_LOAUTU_PS (B + 8); A0 = _MM256_SET1_PS (A [Offset0]); A1 = _MM256_SET1_PS (A [Offset1]); C00 = _MM256_FMADD_PS (A0, B0, C00); c01 = _MM256_FMADD_PS (A0, B1, C01); c10 = _MM256_FMADD_PS (A1, B0, C10); c11 = _MM256_FMADD_PS (A1, B1, C11); A0 = _MM256_SET1_PS (A [Offset2]); A1 = _MM256_SET1_PS (a [Offset3]); c20 = _MM256_FMADD_PS (A0, B0, C20); c21 = _MM256_FMADD_PS (A0, B1, C21); c30 = _MM256_FMADD_PS (A1, B0, C30); c31 = _MM256_FMADD_PS (A1, B1, C31); A0 = _MM256_SET1_PS (A [Offset4]); A1 = _MM256_SET1_PS (A [Offset5]); c40 = _MM256_FMADD_PS (A0, B0, C40); C41 = _MM256_FMADD_PS (A0, B1, C41); C50 = _MM256_FMADD_PS (A1, B0, C50); c51 = _MM256_FMADD_PS (A1, B1, C51); B + = LDB; A + = қадам; } _MM256_STOREU_PS (c + 0, _MM256_Add_ps (c00, _MM256_Loate_PS (C + 0)))))))); _mm256_storeu_ps (c + 8, _MM256_ADD_PS (c01, _MM256_LoateU_PS (C + 8)))); C + = LDC; _mm256_storeu_ps (c + 0, _MM256_ADD_PS (c10, _MM256_Loation_PS))); _mm256_storeu_ps (c + 8, _mm256_add_ps (c11, _MM256_LOAUTU_PS (C + 8))))))); C + = LDC; _mm256_storeu_ps (c + 0, _MM256_ADD_PS (c20, _MM256_Loation_PS)))); _mm256_storeu_ps (c + 8, _mm256_add_ps (c2, _MM256_Loation_PS)))); C + = LDC; _mm256_storeu_ps (c + 0, _MM256_ADD_PS (c30, _MM256_Loadu_PS (C + 0)))); _mm256_storeu_ps (c + 8, _mm256_add_ps (c31, _MM256_Loation_PS)))); C + = LDC; _mm256_storeu_ps (c + 0, _mm256_add_ps (c40, _MM256_LoateU_PS (C + 0))))); _mm256_storeu_ps (c + 8, _mm256_add_ps (c41, _MM256_Loation_PS)))); C + = LDC; _mm256_storeu_ps (c + 0, _MM256_ADD_PS (c50, _MM256_Loation_PS)))); _mm256_storeu_ps (c + 8, _mm256_add_ps (c51, _MM256_Loate_PS (c + 8))));}

Матрицаның бастапқы мәнін баптау үшін біз кішкене көмекші функцияны ұсынамыз

void Init_c (int m, int n, int * c, int ldc) {for int (int i = 0; i <m, c + = ldc) үшін (INT J = 0; j <n; j <n; j <j <n; j + = 8) _mm256_storeu_ps (c + j, _MM256_SetZero_PS ());} 

Мұнда LDA, LDB, LDC - жалпы жағдайда жетекші өлшем) сәйкес матрица.

Содан кейін көбейту функциясы келесі форманы алады:

Vemm_v3 (int m, int n, int k, cont int * a, cont * c) {for (int i = 0; i + = 0; i + = 6) {for (int j = 0) j <n; j + = 16) {init_c (6, 16, c + i * n + j, n); micro_6x16 (k, a + i * k, k, k, k, 1, n + j, n, c + i + j, n); }}} B.

Біз оны іске қосып, 78,5 мс немесе 36,2 гллоптарды орындаймыз. Анау. Микрокрельді қолдану матрицалық көбейтуді 3 есе жылдамдатуға мүмкіндік берді. Бірақ алынған жылдамдық әлі де максимумнан алыс. Қазір қайғы-қасірет қайда?

  1. Matrix B (4-қадам) BӘрбір итерация үшін микроицер матрицадан екі 256 биттік вектор жүктейді
  2. Және әрдайым жаңа жолдан. Бұл процессорға бұл деректерді тиімді түрде кэштеу мүмкін емес етеді. Бұл жағдайды түзету үшін біз екі өзгеріс енгіземіз: СМатрицаның мәліметтерін көшіріңіз B.

Уақытша буферде сол микрокрельге қажет, сонда жақын жерде орналасқан.

Матрицалық іздеу ретін өзгертіңіз 

: Алдымен біз бағандармен жүреміз және тек содан кейін жолдарда жүреміз. Бұл ретте көрсетілген матрицалық мәндерді тиімді пайдалануға мүмкіндік береді.

Буферді сақтау үшін біз кішкене құрылым аламыз: B:

Crift buf_t {flout * p; int n; Buf_t (int size): n (өлшемі), P (Flast *) _ MM_MALLOC (өлшемі * 4, 64)) {} ~ buf_t () {_MMM_FREE (P); }}; 

Айта кету керек, мұнда AVX векторларын жүктеп алу және түсіру, тураланған деректер барысында оңтайлы жұмыс істейді, өйткені жадты бөлектеу үшін арнайы функциялар пайдаланылады.

Функция матрицаны ретке келтіру 

Vover_b_16 (st k, cont k, int ldb, int k, k, k <k <k; k <k; k <k; k, b + = ldb, bufb + = 16) {_MM256_STOREU_PS (BUFB + 0) , _mm256_LoateU_PS (B + 0)); _MM256_STOREU_PS (BUFB + 8, _MM256_LOAUTU_PS (B + 8)); }}

Сонымен, шын мәнінде, GEMM функциясының 4-ші нұсқасы:

Vef gemm_v4 (int m, int n, int k, c) int int * a, cont * c) {for (int j = 0; j <n; j <n; j) {buf_t bufb (16 * k) ); REDORED_B_16 (k, b + j, n, bufb.p); (int i = 0; i <m; i + = 6) {init_c (6, 16, c + i * n + j, n); micro_6x16 (k, a + i * k, k, k, k, 1, bufb.p, 16, c + i * n + j, n); }}}

Тест нәтижелері (29,5 MS немесе 96.5 GFLOPS) біздің дұрыс жолда екенімізді көрсетеді. Шынында да, теориялық мүмкін максимумның 80% -ына жетті. BЖеңіс? Өкінішке орай жоқ. Тек тестілеуге арналған матрицалардың мөлшері (m = n = k = 1152) алгоритмнің осы нұсқасына ыңғайлы болды. Егер сіз 100 есеге дейін көбейсеңіз (m = 1152, n = 1152, k = 115200), содан кейін алгоритмнің тиімділігі 39,5 глольге дейін 39,5 гффольға дейін түседі - 2,5 есе. СL1 кэшіндегі деректерді локализациялау (5-қадам)

Сонымен, k-тің өсуі, алгоритмнің тиімділігі неге түседі? Жауап, біз ретке келтірілген мәндерді сақтайтын буфердің көлеміне жатады

. Ірі мәндер үшін ол қарапайым процессордың кэшінде болмайды. Мәселенің шешімі L1 деректер кэші мөлшеріне оның мәнімен шектеледі. Intel процессорлары үшін L1 деректер кэш өлшемі - 32 КБ. Буферлі мөлшерін шектеулермен, Microkeeploe барлық мәндерде жоқ k, бірақ тек L1 кэшіндегі өлеңдерден тұрады. Матрицаның аралық есептеулерінің нәтижелері 

Негізгі жадында сақталады.

Біз макроудро - кэште жабылатын деректер аймағының үстіндегі есептеулерді жүзеге асыратын көмекші функцияны ұсынамыз: 

Void Macro_v5 (int m, int n, int k, cont int * a, int lda, int int int * b, int * c, int * int * c, int int, int ldc) {for int int int ldc) {j <n ; j + = 16) {Rejorder_b_16 (k, b + j, ldb, bufb); (Int i = 0; i + = 6) micro_6x16 (k, a + i * LDA, LDA, LDA, 1, BUFB, 16, C + I * LDC + J, LDC); }}

Негізгі функцияда біз k-ге сәйкес цикл қосамыз, онда біз макродроға қоңырау шаламыз:

Vef gemm_v5 (int m, int n, int k, cont int * a, cont int int * b, қалтасы * c) {c) {c) {cont in l1 = 32 * 1024; int mk = std :: min (l1/4/16, k); Buf_t bufb (16 * mk); (int k = 0; k <k; k + = mk) {int dk = std :: min (k, k + mk) - k; егер (k == 0) init_c (m, n, c, n); Macro_v5 (M, N, DK, A + K, K, B + K * N, N, BUFB.P, c, n); }} BӨлшеу нәтижелері біз дұрыс бағытта жүріп жатқанымызды көрсетеді: (m = 1152, n = 1152, k = 115200) Алгоритмнің қойылымы 78,1 глольді құрады. Бұл алдыңғы нұсқаға қарағанда әлдеқайда жақсы, бірақ орташа матрицадан гөрі нашар. AL2 кэшінде локализациялау және локализациялау (6-қадам)

Бір микроккердің өтуі бойынша өңделген k өлшемді k, біз матрицаның мәліметтерін локализациялауға дайындық 

L1 кэшінде. Матрицадан жүктелген деректер Aүш есе аз. Бірақ оларды локализациялауға тырысайық, сонымен бірге деректерді дәйекті түрде орналасуы үшін ретте отырып. Біз бұған ерекше мүмкіндік жазамыз: Void reder_a_6 (cont int lda, int lda, int in, int k, int k, int k; i int i = 0; i + = 6) {i int k = 0; k <k; k <k; k + = 4) {cont virt * pa = a + k; __M128 A0 = _MM_LOAPUU_PS (PA + 0 * LDA); __m128 A1 = _MM_LOAPUU_PS (PA + 1 * LDA); __M128 A2 = _MM_LOAPUU_PS (PA + 2 * LDA); __M128 A3 = _MM_LOAPUU_PS (PA + 3 * LDA); __M128 A4 = _MM_LOAPU_PS (PA + 4 * LDA); __M128 A5 = _MM_LOAPUU_PS (PA + 5 * LDA); __M128 A00 = _MM_UNPACKLO_PS (A0, A2); __M128 A01 = _MM_UNPACKLO_PS (A1, A3); __M128 A10 = _MM_UNPAKHI_PS (A0, A2); __M128 A11 = _MM_UNPAKHI_PS (A1, A3); __m128 A20 = _MM_UNPACKLO_PS (A4, A5); __M128 A21 = _MM_UNPAKHI_PS (A4, A5); _mm_storeu_ps (буфа + 0, _MM_UNPACKLO_PS (A00, A01)); _mm_storel_pi ((__ m64 *) (буфа + 4), A20); _mm_storeu_ps (буфа + 6, _MM_UNPAKHI_PS (A00, A01)); _mm_storeh_pi ((__ m64 *) (буфа + 10), A20); _MM_STOREU_PS (BUFA + 12, _MMM_UNPACKLO_PS (A10, A11)); _MM_STOREL_PI ((__ m64 *) (буфа + 16), A21); _MM_STOREU_PS (BUFA + 18, _MMM_UNPAKHI_PS (A10, A11)); _mm_storeh_pi ((__ m64 *) (буфа + 22), A21); bufa + = 24; } A + = 6 * LDA; }} Содан бері мәліметтер матрицасы

Енді дәйекті түрде барыңыз, содан кейін параметр 

Лда AМакрожадерде біз енді қажет емеспіз. Microker қоңырау параметрлерін де өзгертті:

Void Macro_v6 (int m, int n, int k, cont int int * a, cont int * a, int * int * int * int * c, int * c, int int ldc) {(int j = 0; j <n; j <n; j <n; j) = 16) {Rejorder_b_16 (k, b + j, ldb, bufb); (int i = 0; i + = 6) micro_6x16 (k, a + i * k, 1, 6, bufb, 16, c + i * ldc + j, ldc); }} 

Реттелген матрицаның буферінің өлшемі

Біз L2 процессор кэшін өлшемін шектейміз (әдетте әр түрлі процессорлар үшін әдетте 256-дан 1024 кб-қа дейін). Негізгі функция қосымша циклді M айнымалы бойынша қосады:

vot gemm_v6 (int m, int n, int k, cont k) a, cont int * a, flast * c) {c) {c) {cont int l1 = 32 * 1024, l2 = 256 * 1024; Int mk = std :: min (l1/4/16, k) / 4 * 4; int mm = std :: min (l2 / 4 / mk, m) / 6 * 6; Buf_t bufb (16 * mk); Buf_t bufa (mk * mm); (int k = 0; k <k; k + = mk) {int dk = std :: min (k, k + mk) - k; (int i = 0; i <m; i + = mm) {int dm = std ::: min (m, i + мм) - i; IF (k == 0) init_c (DM, N, C + I * N, N); REDORE_A_6 (A + I * K + K, K, DM, DK, BUFA.P); Macro_v6 (DM, N, DK, Bufa.P, B + K * N, N, BUFB.P, C + I * N, N); }}} BТест өлшеу нәтижелері (m = 1152, n = 1152, k = 115200) - 88,9 GFLOPS - орташа матрицалар үшін тағы бір қадам келді. BБіз Cash L3 (7-қадам) қолданамыз

Процессорларда L1 және L2 кэштеріне қосымша, әлі күнге дейін L3 кэш бар (әдетте оның өлшемі ядродағы 1-2 МБ). Мұны пайдалануға тырысайық, мысалы, қайталанбаған матрицалар құндылықтарын сақтау үшін. 

Қажетсіз қоңыраулардан аулақ болу үшін Reoper_b_16. Macroyader функциясында қосымша ретке келтіру параметрі пайда болады, ол бұл матрица туралы хабарлайды

Бұған тапсырыс берді: 

Void macro_v7 (int m, int n, cont k, cont int int * a, cont int * b, int * int interb, int int interb, int * c, int interb, int int, int ldc) {(int j = 0; j <n) ; j + = 16) {егер (Reerderb (Reerderb) Reoper_b_16 (k, b + j, LDB, Bufb + K * j); (int i = 0; i + = 6) micro_6x16 (k, a + i * k, 1, 6, bufb + k * j, 16, c + k * ldc + j, ldc); }}

Негізгі функция n үшін цикл қосады:

vef gemm_v7 (int m, int n, int k, cont int * a, cont * c) {c) int * c) {c) {c) {cont int l1 = 32 * 1024, l2 = 256 * 1024, l3 = 256 * 1024 * 1024; Int mk = std :: min (l1/4/16, k) / 4 * 4; int mm = std :: min (l2 / 4 / mk, m) / 6 * 6; int mn = std ::: min (l3/4 / mk, n) / 16 * 16; Buf_t bufb (mn * mk); Buf_t bufa (mk * mm); (int j = 0; j <n; j <n; j <n; j + = mn) {int dn = std :: min (n, j + mn) - J; (int k = 0; k <k; k + = mk) {int dk = std :: min (k, k + mk) - k; (int i = 0; i <m; i + = mm) {int dm = std ::: min (m, i + мм) - i; егер (k == 0) init_c (DM, DN, C + I * n + j, n); REDORE_A_6 (A + I * K + K, K, DM, DK, BUFA.P); Macro_v7 (DM, DN, DK, Bufa.p, B + K * N + J, N, Bufb.P, i == 0, c + i + v + j, n + j, n); }}}}

Өлшемдер нәтижелері (m = 1152, n = 1152, k = 115200) 97,3 глольде нәтиже береді. Анау. Біз тіпті орташа матрицалардан асып кетпестік. Шын мәнінде, біз әмбебап алгоритмді алдық (іс жүзінде, келесі бөлімдегі шектеулер туралы), бұл кез-келген матрицалардың кез-келген мөлшерінде тиімді (теориялық қол жеткізілетін макуанттардың 80%) жұмыс істейді. Мұны тоқтату және соңында бізде болғанын сипаттау ұсынылады.

  • Алгоритмдің жалпы схемасы Төмендегі суретте алынған алгоритмнің схемасы көрсетілген: BМикро ядро AЦикл-1. B.

Айнымалы к. Матрицадан алынған мәліметтер

  • L1 кэшіндегі LAP, матрицадан өзгертілген мәліметтер L2 кэшіндегі LA. Сома тізілімдерде жинақталған (Кэш L0). Нәтиже негізгі жадта жазылады. Микрокрельдің өлшемдері SIMD векторының ұзындығымен және векторлар регистрлерінің санымен анықталады. Цикл ұзындығы Cache L1 өлшемімен анықталады, ол сақталады AМакро аула
  • ЦИКЛ-2 Айнымалы I. Матрицаның ретке келтірілген деректерінде микрокрельді іске қосу BL2 кэшінде жатыр. B.

ЦИКЛ-3.

J ауыспалы j. Матрицаның ретке келтірілген деректерінде микрокрельді іске қосу

  • L3 кэшінде жатыр. Мүмкін емес деректерді қажет етеді Макродтың өлшемдері кэш мәнімен анықталады. AНегізгі функция AЦикл-4. С.
  • Айнымалы I. Макро адам матрицада жұмыс істейді . Әр Итерация мәндеріне қатысты A и B.
  • . Міндетті емес, матрицалық мәндер ЦИКЛ-5. B.

Айнымалы к. Макро адам матрицаларда жұмыс істейді

ЦИКЛ-6.

  1. J ауыспалы j. Макро адам матрицада жұмыс істейді
  2. Көріністердің артында не қалды?
  3. Матрицалық көбейту алгоритмінде қолданылатын негізгі қағидаттарды ұсыну процесінде мен саналы түрде тапсырманы саналы түрде жеңілдеттім, әйтпесе ол ешқандай мақалаға сәйкес келмейді. Төменде мен алгоритмнің негізгі мәнін түсінбейтін кейбір сұрақтарды сипаттаймын, бірақ оларды практикалық іске асыру үшін өте маңызды:
  4. Шындығында, өкінішке орай, матрицалардың мөлшері әрдайым микрокрельдің мөлшерімен таңылмайды, өйткені матрицалардың жиектері ерекше түрде өңделуі керек. Бұл үшін әр түрлі мөлшердегі микрокрельді жүзеге асыру қажет.
  5. Әр түрлі процессорлардың түрлері үшін әр түрлі микрокредиттер жиынтығы және реттелетін функциялар орындалады. Сондай-ақ, оның микрокрельдері екі есе дәлдігі бар және күрделі сандар үшін де болады. Бақытымызға орай, хайуанаттар бағын тек олармен шектейді және жоғарғы деңгейде код өте әмбебап.
  6. Микрофер көбінесе ассемблерде жиі жазылады. Қосымша циклдарды шығаруды жүргізіңіз. Бірақ бұл айтарлықтай үдеуге әкелмейді - негізгі оңтайландыру - процессордың жадының кэш иерархиясын тиімді пайдалану.

Шағын өлшемді матрицалар үшін (кез-келген өлшеу үшін) арнайы алгоритмдер қолданылады - кейде рет өзгерту тиімді емес, кейде матрицалардан басқа жағдайды қолдану қажет. Және кейде арнайы микрокрельді жүзеге асыру үшін.

Матрицалық көбейтудің жалпыланған алгоритмінде барлық үш матрицаны ауыстыруға болады. Мүмкін болатын алгоритмдердің саны 8 есе артатын сияқты! Бақытымызға орай, енгізілген кіріс деректерін қолдану барлық істерге қолдануға мүмкіндік бермейді.

Барлық заманауи процессорлар көп жұмыс істейді. Және матрицалық кітапханалар есептеулерді жеделдету үшін көп нысандарды қолданады. Әдетте, бұл үшін тағы бір 1-3 қосымша цикл қолданылады, оларда әр түрлі жіптермен бөлінеді.

.

Қорытынды

Добавить комментарий