행렬에 벡터를 곱하는 알고리즘입니다. 행렬 곱셈: 예, 동작 알고리즘, 제품 속성

MatLab 시스템은 단순히 행렬과 벡터에 대한 수학 연산을 수행합니다. 행렬과 벡터의 덧셈과 곱셈의 간단한 연산을 먼저 고려하십시오. 두 개의 벡터가 주어질 때

= ; % 행 벡터
b = ; % 열 벡터

이 두 벡터의 곱셈은 다음과 같이 쓸 수 있습니다.

c = a*b; %c=1+2+3+4+5=16
d = b*a; %d - 5x5 요소의 행렬

벡터에 대한 연산에 따라 행 벡터에 열 벡터를 곱하면 숫자가 되고 열 벡터에 행 벡터를 곱하면 위의 예에서 계산된 결과인 2차원 행렬이 생성됩니다.

두 벡터의 덧셈과 뺄셈은 다음과 같이 작성됩니다.

a1 = ;
a2 = ;
c = a1+a2; % c = ;
c = a2-a1; % c = ;

두 개의 열 벡터 또는 두 개의 행 벡터 간에 더하기 및 빼기 연산을 수행할 수 있습니다. 그렇지 않으면 MatLab은 오류 메시지를 발행합니다. 다른 유형의 벡터는 추가할 수 없습니다. 이것은 모든 잘못된 산술 연산의 경우입니다. 계산할 수 없는 경우 MatLab 시스템은 오류를 보고하고 프로그램은 해당 라인에서 종료됩니다.

유사하게, 행렬 간의 곱셈 및 덧셈 연산이 수행됩니다.

A = ;
B = one(3);
C=A+B; 같은 크기의 두 행렬의 % 더하기
D=A+5; 행렬과 숫자의 % 더하기
E=A*B; 행렬 A와 B의 곱 %
F=B*A; 행렬 B와 A의 곱 %
G=5*A; 행렬에 숫자를 곱한 %

역행렬을 계산하고 행렬과 벡터를 전치하는 연산은 다음과 같이 작성됩니다.

= ; % 행 벡터
b = 에이'; 다음으로 구성된 % 열 벡터
행 벡터의 % 전치 a.
A = ; % 매트릭스 3x3 요소
B = a*A; %b= - 행 벡터
C=A*b; % C = - 열 벡터
D = a*A*a'; % D = 45 – 숫자, 행렬 A의 합
E = A'; % E는 전치된 행렬 A입니다.
F = inv(A); % F - 역행렬 A
G = A^-1; % G - 역행렬 A

위의 예에서 행렬과 벡터를 전치하는 연산은 '(아포스트로피) 기호로 표시되며 벡터 또는 행렬의 이름 뒤에 배치됨을 알 수 있습니다. 역행렬의 계산은 inv() 함수를 호출하거나 행렬을 -1 거듭제곱하여 수행할 수 있습니다. 두 경우 모두 결과는 같을 것이며, 다양한 알고리즘을 구현할 때 사용하기 쉽도록 두 가지 계산 방법이 만들어집니다.

계산 과정에서 벡터 또는 행렬 요소의 요소를 요소별로 곱하거나 나누거나 올려야 하는 경우 다음 연산자가 사용됩니다.

.* - 요소별 곱셈
./ 및 .\ - 요소별 분할;
.^ - 요소별 지수.

다음 예에서 이러한 연산자의 작업을 고려하십시오.

= ; % 행 벡터
b = ; % 행 벡터
c = a.*b; %c=
A = one(3); % 1로 구성된 3x3 행렬
B = ; % 매트릭스 3x3
C = A.*B; % 매트릭스 3x3, 다음으로 구성됨
D = A./B; % 매트릭스 3x3, 다음으로 구성됨
E = A.\B; % 매트릭스 3x3, 다음으로 구성
F = A.^2; 행렬 A 요소의 % 제곱

이 섹션을 마치기 위해 벡터와 행렬로 작업할 때 유용한 몇 가지 함수를 고려하십시오.

벡터 요소의 최대값을 찾기 위해 표준 함수 max()가 사용되며, 발견된 요소의 최대값과 해당 위치(인덱스)를 반환합니다.

= ;
= 최대(a); % v = 6, 나는 = 2;

v = 최대(a); %v = 6;

위의 예는 max() 함수를 호출하는 두 가지 다른 방법을 보여줍니다. 첫 번째 경우에는 요소의 최대값과 벡터의 인덱스가 모두 결정되고 두 번째 경우에는 요소의 최대값만 결정됩니다.

행렬의 경우 이 함수는 아래 예와 같이 열의 최대값을 결정합니다.

A = ;
= 최대(A); % V=, I=
V = 최대(A); %V=

max() 함수의 전체 구문은 MatLab 명령 창에 명령을 입력하여 찾을 수 있습니다.

돕다<название функции>

min() 함수는 벡터 또는 행렬 요소와 해당 인덱스의 최소값을 결정하는 유사한 방식으로 작동합니다.

행렬 및 벡터 작업에 유용한 또 다른 함수는 벡터 요소 또는 행렬 열의 값 합계를 계산하는 sum() 함수입니다.

= ;
s = 합계(a); %s = 3+5+4+2+1=15
A = ;
S1 = 합(A); %S1=
S2 = 합계(합(A)); % S2=39

합 S2를 ​​계산할 때 행렬 A의 요소 값의 합은 먼저 열로 계산된 다음 행으로 계산됩니다. 결과적으로 변수 S2에는 행렬 A의 모든 요소 값의 합이 포함됩니다.

벡터 또는 행렬의 요소 값을 오름차순 또는 내림차순으로 정렬하려면 다음과 같이 sort() 함수를 사용합니다.

= ;

b1 = 정렬(a); %b1=
b2 = 정렬(a, '내림차순'); %b2=
b3 = 정렬(a, '상승'); %b3=

행렬의 경우

A = ;
B1 = 정렬(A); %B1=
B2 = 정렬(A, '내림차순'); %B2=

많은 실제 문제에서 벡터나 행렬에서 특정 요소를 찾아야 하는 경우가 많습니다. 이것은 필수 요소가 발견되는 조건을 인수로 취하는 표준 find() 함수를 사용하여 수행할 수 있습니다. 예를 들면 다음과 같습니다.

= ;
b1 = 찾기(a == 2); %b1 = 4 - 요소 인덱스 2
b2 = 찾기(a ~= 2); % b2 = - 2가 없는 인덱스
b3 = 찾기(a > 3); %b3=

위의 예에서 '==' 기호는 같음 검사를 의미하고 '~=' 기호는 벡터 a의 요소 값의 부등식 검사를 수행합니다. 이러한 연산자에 대한 자세한 내용은 조건부 연산자 섹션에서 설명합니다.

벡터와 행렬 작업에 유용한 또 다른 함수는 산술 평균을 계산하기 위한 mean() 함수입니다. 이 함수는 다음과 같이 작동합니다.

= ;
m = 평균(a); %m = 3
A = ;
M1 = 평균(A); %M1=
M2 = 평균(평균(A)); % M2 = 4.333

정의 1

행렬의 곱(C=AB)은 행렬 A의 열 수가 행렬 B의 행 개수와 같은 일관된 행렬 A와 B에 대한 연산입니다.

C ⏟ m × n = A ⏟ m × p × B ⏟ p × n

실시예 1

매트릭스 데이터:

  • A = a(i j) 차원 m × n;
  • B = b (i j) p × n

요소 c i j 가 다음 공식으로 계산되는 행렬 C .

c i j = ai 1 × b 1 j + ai 2 × b 2 j + . . . + 에이피 × 비피지 , 나는 = 1 , . . . m, j = 1, . . . 중

실시예 2

제품 AB=BA를 계산해 보겠습니다.

A = 1 2 1 0 1 2 , B = 1 0 0 1 1 1

행렬 곱셈 규칙을 사용하는 솔루션:

A ⏟ 2 × 3 × B ⏟ 3 × 2 = 1 2 1 0 1 2 × 1 0 0 1 1 1 = 1 × 1 + 2 × 0 + 1 × 1 1 × 0 + 2 × 1 + 1 × 1 0 × 1 + 1 × 0 + 2 × 1 0 × 0 + 1 × 1 + 2 × 1 = = 2 3 2 3 ⏟ 2 × 2

B ⏟ 3 × 2 × A ⏟ 2 × 3 = 1 0 0 1 1 1 × 1 2 1 0 1 2 = 1 × 1 + 0 × 0 1 × 2 + 0 × 1 1 × 1 + 0 × 2 0 × 1 + 1 × 0 0 × 2 + 1 × 1 0 × 1 + 1 × 2 1 × 1 + 1 × 0 1 × 2 + 1 × 1 1 × 1 + 1 × 2 = 1 2 1 0 1 2 1 3 3 ⏟ 3×3

제품 A B와 B A를 찾았지만 크기가 다른 행렬입니다. A B는 B A와 같지 않습니다.

행렬 곱셈의 속성

행렬 곱셈 속성:

  • (A B) C = A (BC) - 행렬 곱셈의 연관성;
  • A (B + C) \u003d A B + A C - 분배 곱셈;
  • (A + B) C \u003d A C + B C - 곱셈의 분포;
  • λ (AB) = (λ A) B
실시예 1

속성 #1 확인: (A B) C = A (B C) :

(A × B) × A = 1 2 3 4 × 5 6 7 8 × 1 0 0 2 = 19 22 43 50 × 1 0 0 2 = 19 44 43 100,

A (B × C) = 1 2 3 4 × 5 6 7 8 1 0 0 2 = 1 2 3 4 × 5 12 7 16 = 19 44 43 100 .

실시예 2

우리는 속성 2 번을 확인합니다 : A (B + C) \u003d A B + A C :

A × (B + C) = 1 2 3 4 × 5 6 7 8 + 1 0 0 2 = 1 2 3 4 × 6 6 7 10 = 20 26 46 58,

A B + A C \u003d 1 2 3 4 × 5 6 7 8 + 1 2 3 4 × 1 0 0 2 \u003d 19 22 43 50 + 1 4 3 8 \u003d 20 26 46 58 .

세 행렬의 곱

세 행렬 A B C의 곱은 2가지 방법으로 계산됩니다.

  • A B를 찾고 C를 곱합니다. (AB) C;
  • 또는 먼저 B C를 찾은 다음 A (BC) 를 곱합니다.
실시예 3

두 가지 방법으로 행렬을 곱합니다.

4 3 7 5 × - 28 93 38 - 126 × 7 3 2 1

액션 알고리즘:

  • 2개의 행렬의 곱을 찾습니다.
  • 그런 다음 다시 두 행렬의 곱을 찾습니다.

하나). A B \u003d 4 3 7 5 × - 28 93 38 - 126 \u003d 4 (- 28) + 3 × 38 4 × 93 + 3 (- 126) 7 (- 28) + 5 × 38 7 × 93 + 5 (- 126) = 2 - 6 - 6 21

2). A B C = (A B) C = 2 - 6 - 6 21 7 3 2 1 = 2 × 7 - 6 × 2 2 × 3 - 6 × 1 - 6 × 7 + 21 × 2 - 6 × 3 + 21 × 1 = 2 0 0 3 .

우리는 공식 A B C \u003d (AB) C를 사용합니다.

하나). B C = - 28 93 38 - 126 7 3 2 1 = - 28 × 7 + 93 × 2 - 28 × 3 + 93 × 1 38 × 7 - 126 × 2 38 × 3 - 126 × 1 = - 10 9 14 - 12

2). A B C \u003d (A B) C \u003d 7 3 2 1 - 10 9 14 - 12 \u003d 4 (- 10) + 3 × 14 4 × 9 + 3 (- 12) 7 (- 10) + 5 × 14 7 × 9 + 5 (- 12) = 2 0 0 3

답: 4 3 7 5 - 28 93 38 - 126 7 3 2 1 = 2 0 0 3

행렬에 숫자 곱하기

정의 2

행렬 A와 숫자 k의 곱은 동일한 크기의 행렬 B \u003d A k이며, 원본에서 주어진 모든 요소 수를 곱하여 얻습니다.

나 , j = k × 아이 , j

행렬에 숫자를 곱하는 속성:

  • 1 × A = A
  • 0 × A = 제로 매트릭스
  • k(A + B) = kA + kB
  • (k + n) A = k A + n A
  • (k×n)×A = k(n×A)
실시예 4

행렬 A \u003d 4 2 9 0의 곱을 5로 찾습니다.

5A = 5 4 2 9 0 5 × 4 5 × 2 5 × 9 5 × 0 = 20 10 45 0

벡터로 행렬 곱하기

정의 3

행렬과 벡터의 곱을 찾으려면 행별 규칙에 따라 곱해야 합니다.

  • 행렬에 열 벡터를 곱하는 경우 행렬의 열 개수는 열 벡터의 행 개수와 일치해야 합니다.
  • 열 벡터를 곱한 결과는 열 벡터일 뿐입니다.

A B = a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋯ ⋯ ⋯ ⋯ a m 1 a m 2 ⋯ a m n b 1 b 2 ⋯ b + 1 n = a 11 ×1 b ⋯ + 1 n × b n a 21 × b 1 + a 22 × b 2 + ⋯ + a 2 n × b n ⋯ ⋯ ⋯ ⋯ a m 1 × b 1 + a m 2 × b 2 + ⋯ + a m n × b n = c ⋯ c2 1m

  • 행렬에 행 벡터를 곱하는 경우 곱할 행렬은 배타적으로 열 벡터여야 하고 열 개수는 행 벡터의 열 개수와 일치해야 합니다.

A B = a a ⋯ a b b ⋯ b = a 1 × b 1 a 1 × b 2 ⋯ a 1 × b n a 2 × b 1 a 2 × b 2 ⋯ a 2 × b n ⋯ ⋯ ⋯ ⋯ a n × b 2 1 a n × b a n × b n = c 11 c 12 ⋯ c 1 n c 21 c 22 ⋯ c 2 n ⋯ ⋯ ⋯ ⋯ c n 1 c n 2 ⋯ c n n

실시예 5

행렬 A와 열 벡터 B의 곱을 찾습니다.

A B \u003d 2 4 0 - 2 1 3 - 1 0 1 1 2 - 1 \u003d 2 × 1 + 4 × 2 + 0 × (-1) - 2 × 1 + 1 × 2 + 3 × (- 1) - 1 × 1 + 0 × 2 + 1 × (- 1) = 2 + 8 + 0 - 2 + 2 - 3 - 1 + 0 - 1 = 10 - 3 - 2

실시예 6

행렬 A와 행 벡터 B의 곱을 찾습니다.

A \u003d 3 2 0 - 1, B \u003d - 1 1 0 2

A B = 3 2 0 1 × - 1 1 0 2 = 3 × (- 1) 3 × 1 3 × 0 3 × 2 2 × (- 1) 2 × 1 2 × 0 2 × 2 0 × (- 1) 0 × 1 0 × 0 0 × 2 1 × (- 1) 1 × 1 1 × 0 1 × 2 = - 3 3 0 6 - 2 2 0 4 0 0 0 0 - 1 1 0 2

답: A B \u003d - 3 3 0 6 - 2 2 0 4 0 0 0 0 - 1 1 0 2

텍스트에서 실수를 발견하면 강조 표시하고 Ctrl+Enter를 누르십시오.


각 벡터는 1열 또는 1행 행렬로 볼 수 있습니다. 1열 행렬을 열 벡터라고 하고, 1행 행렬을 행 벡터라고 합니다.

A가 크기가 m*n인 행렬인 경우 열 벡터 b의 크기는 n이고 행 벡터 b의 크기는 m입니다.

따라서 행렬에 벡터를 곱하려면 벡터를 열 벡터로 취급해야 합니다. 벡터에 행렬을 곱할 때 행 벡터로 처리해야 합니다.

곱하기 행렬

복소수 벡터에

우리는 결과를 얻는다

보시다시피 벡터의 차원이 변경되지 않은 상태에서 두 가지 솔루션을 가질 수 있습니다.

동일한 값에도 불구하고 첫 번째 버전과 두 번째 버전의 행렬이 완전히 다르다는 사실에 주의를 기울이고 싶습니다(차원이 다름)

첫 번째 경우 벡터는 열로 간주되며 다음이 필요합니다. 행렬을 벡터로 곱하기, 그리고 두 번째 경우에는 행 벡터가 있고 다음이 있습니다. 벡터와 행렬의 곱.

이 봇은 복소수 값을 가진 벡터와 행렬도 곱합니다. 더 완전한 계산기 기반 복소수 값을 가진 행렬의 곱셈 온라인

행렬-벡터 곱셈의 속성

행렬

벡터 열

행 벡터

임의 번호

1. 열 벡터의 합에 의한 행렬의 곱은 각 벡터에 대한 행렬의 곱의 합과 같습니다.

2. 행렬에 의한 행 벡터의 합은 행렬에 의한 벡터의 곱의 합과 같다

3. 벡터의 공약수는 행렬에 의한 행렬 / 벡터에 의한 행렬의 곱에서 빼낼 수 있습니다.

4. 행 벡터와 행렬과 열 벡터의 곱은 행 벡터와 행렬과 열 벡터의 곱과 같습니다.

강의 6. 계산 수학의 일반적인 문제를 해결하기 위한 병렬 수치 알고리즘: 행렬 곱셈.

벡터로 행렬을 곱합니다. 가능한 최고 속도를 달성하십시오. 중간 수준 병렬 처리를 사용합니다. p = n에 대한 병렬 컴퓨팅 구성 제한된 프로세서 세트 사용. 행렬 곱셈. 문제 해결 알고리즘의 거시적 분석. 데이터 공유를 기반으로 한 병렬 처리 구성.

벡터로 행렬 곱하기

행렬에 벡터를 곱하는 문제는 다음 관계식으로 정의됩니다.

따라서 결과 벡터를 얻으려면 행렬과 vector 의 행을 곱하기 위해 동일한 유형의 연산을 반복해야 합니다. 이러한 각각의 연산을 구하는 것은 행렬 및 벡터 행의 요소에 대한 요소별 곱셈과 결과 곱의 후속 합산을 포함합니다. 필요한 스칼라 연산의 총 수는 값으로 추정됩니다.

행렬과 벡터를 곱할 때 수행되는 동작에서 다음과 같이 병렬 합산 알고리즘을 기반으로 문제를 해결하는 병렬 방법을 얻을 수 있습니다(단락 4.1 참조). 이 절에서는 사용 가능한 프로세서의 수에 따른 병렬 컴퓨팅의 구성을 고려하여 병렬화 방식에 대한 분석을 보완한다. 또한 행렬에 벡터를 곱하는 문제의 예를 사용하여 프로세서 간 상호 작용을 구성하는 비용을 줄이기 위해 컴퓨팅 시스템의 가장 적절한 토폴로지(프로세서 간의 기존 통신 채널)를 선택해야 할 필요성에 주의를 기울입니다.

가능한 가장 빠른 성능 달성()

가능한 병렬화 방법을 선택하기 위해 행렬-벡터 곱셈 알고리즘에서 정보 종속성을 분석해 보겠습니다. 보시다시피, 행렬의 개별 행에 계산 중에 수행되는 벡터를 곱하는 작업은 독립적이며 병렬로 수행될 수 있습니다.



각 행을 벡터로 곱하는 것은 독립적인 요소별 곱셈을 포함하며 병렬로 수행될 수도 있습니다.

행렬의 행에 벡터를 곱하는 각 연산에서 얻은 곱의 합은 이전에 고려된 합산 알고리즘의 변형(직렬 알고리즘, 기존 및 수정된 캐스케이드 방식) 중 하나를 사용하여 수행할 수 있습니다.

따라서 필요한 최대 프로세서 수는 값에 의해 결정됩니다.

이러한 수의 프로세서의 사용은 다음과 같이 나타낼 수 있습니다. 프로세서 세트는 그룹으로 나뉩니다.

,

각각은 행렬의 단일 행에 벡터를 곱하는 연산을 수행하기 위한 프로세서 세트를 나타냅니다. 계산이 시작될 때 그룹의 각 프로세서는 행렬 행의 요소와 벡터의 해당 요소를 받습니다. 다음으로 각 프로세서는 곱셈 연산을 수행합니다. 그런 다음 캐스케이드 합산 방식에 따라 계산이 수행됩니다. 그림의 설명을 위해 6.1은 행렬의 차원을 가진 그룹의 프로세서에 대한 계산 방식을 보여줍니다.

쌀. 6.1. 행렬 행에 벡터를 곱하는 계산 방식

프로세서를 사용할 때 병렬 알고리즘의 실행 시간은 병렬 곱셈 연산의 실행 시간과 캐스케이드 방식의 실행 시간에 의해 결정됩니다.

결과적으로 알고리즘의 성능 지표는 다음 관계에 의해 결정됩니다.

, ,

벡터에 의한 행렬 곱셈의 고려된 문제에 대해 가장 적합한 토폴로지는 계단식 합산 방식에서 빠른 데이터 전송(단위 길이의 경로)을 제공하는 구조입니다(그림 4.5 참조). 이러한 토폴로지는 완전한 연결 시스템( 완전한 그래프) 그리고 하이퍼 큐브. 다른 토폴로지에서는 더 긴 데이터 경로로 인해 통신 시간이 늘어납니다. 따라서 왼쪽과 오른쪽에 있는 가장 가까운 이웃과만 연결되는 시스템으로 프로세서를 선형 순서로 정렬하면( 또는 반지) 캐스케이드 방식의 경우, 반복에서 수신된 각 부분합의 전송 경로 길이 , 는 와 같습니다. 선형 구조의 토폴로지에서 길이의 경로를 따라 데이터를 전송하는 데 데이터 전송 작업의 실행이 필요하다고 인정하면 데이터 전송의 총 병렬 작업 수(총 경로 길이)는 다음 값에 의해 결정됩니다.

(부트스트랩 프로세서를 위한 데이터 전송 제외).

직사각형 토폴로지의 컴퓨팅 시스템 적용 2차원 격자크기는 수행된 계산의 단순하고 시각적인 해석으로 이어집니다(네트워크 구조는 처리된 데이터의 구조에 해당함). 이러한 토폴로지의 경우 격자의 수평선을 따라 행렬의 행을 배치하는 것이 가장 편리합니다. 이 경우 벡터의 요소는 컴퓨팅 시스템의 수직선을 따라 전송되어야 합니다. 이 데이터 배열로 계산을 실행하는 것은 격자 선을 따라 병렬로 수행할 수 있습니다. 결과적으로 총 데이터 전송 수는 ruler()의 결과와 동일합니다.

문제를 해결하기 위해 수행되는 통신 작업은 MCS 프로세서 쌍 간에 데이터를 전송하는 것입니다. 이러한 작업의 구현 기간에 대한 자세한 분석은 단락 3.3에서 수행됩니다.

4. 병렬 알고리즘 구현을 위한 권장 사항. 병렬 알고리즘을 구현할 때 사용된 프로세서를 초기 데이터로 로드하는 초기 단계를 선택하는 것이 좋습니다. 이러한 초기화는 다음 형식의 토폴로지를 갖는 컴퓨팅 시스템의 토폴로지에 대해 가장 간단하게 제공됩니다. 완전한 그래프(로딩은 단일 병렬 데이터 전송 작업으로 제공됨). 형식의 프로세서 집합을 구성할 때 하이퍼 큐브중앙 제어 프로세서가 행렬과 벡터 행을 프로세서 그룹의 제어 프로세서에 배포하는 부트스트랩 프로세스의 2단계 제어를 갖는 것이 유용할 수 있습니다. 행을 집행 프로세서에 전달합니다. 형식의 토폴로지의 경우 통치자또는 반지요소로 전송되는 데이터의 양이 순차적으로 감소하는 순차 데이터 전송 작업이 필요합니다.

중간 수준 병렬 처리() 사용

1. 병렬 연산 방식의 선택. 사용 가능한 프로세서 수가 감소함에 따라() 행렬 행에 벡터를 곱하는 연산을 수행할 때 일반적인 캐스케이드 합산 방식을 적용할 수 없게 됩니다. 자료의 단순성을 위해 수정된 캐스케이드 방식을 가정하고 사용합니다. 이 경우 각 프로세서의 초기 로드가 증가하고 프로세서는 행렬 및 벡터 행의 일부로 로드()됩니다. 행렬에 벡터를 곱하는 연산의 실행 시간은 다음 값으로 추정할 수 있습니다.

수정된 캐스케이드 방식을 구현하는 데 필요한 프로세서 수를 사용할 때, 즉 for , 이 표현식은 실행 시간의 추정치를 제공합니다 (에 ).

프로세서 수를 사용하여 알고리즘의 실행 시간이 로 추정될 때 계산의 병렬 실행을 위한 새로운 방식이 제안될 수 있으며, 여기서 계단식 합계의 각 반복에 대해 사용됩니다. 겹치지 않는 프로세서 세트. 이 접근 방식을 사용하면 사용 가능한 프로세서 수는 행렬의 행과 벡터를 곱하는 한 가지 연산만 구현하기에 충분합니다. 또한 캐스케이드 합계의 다음 반복을 수행할 때 모든 이전 반복의 실행을 담당하는 프로세서는 무료입니다. 그러나 제안된 접근 방식의 이러한 단점은 유휴 프로세서를 사용하여 행렬의 다음 행을 처리함으로써 장점으로 바뀔 수 있습니다. 결과적으로 다음과 같은 계획이 형성 될 수 있습니다. 컨베이어행렬 및 벡터 곱셈 수행:

프로세서 세트는 겹치지 않는 프로세서 그룹으로 나뉩니다.

,

그룹 , , 프로세서로 구성되며 캐스케이드 알고리즘을 반복하는 데 사용됩니다(그룹은 요소별 곱셈을 구현하는 데 사용됨). 총 프로세서 수;

계산 초기화는 행렬 및 벡터 행의 값 1을 사용하여 그룹 프로세서의 요소별 로딩으로 구성됩니다. 부트스트랩 후, 요소별 곱셈의 병렬 연산과 기존의 캐스케이드 합산 회로의 후속 구현이 수행됩니다.

계산을 수행할 때 요소별 곱셈 연산이 완료된 후 매번 그룹의 프로세서에 행렬의 다음 행 요소가 로드되고 새로 로드된 데이터에 대해 계산 프로세스가 시작됩니다.

상술한 알고리즘을 적용한 결과, 복수의 프로세서는 행렬 행에 벡터를 곱하는 연산을 수행하기 위한 파이프라인을 구현한다. 이러한 파이프라인에서 매트릭스의 여러 개별 행은 동시에 다른 처리 단계에 있을 수 있습니다. 예를 들어, 첫 번째 행과 벡터의 요소를 요소별로 곱한 후 그룹 프로세서는 행렬의 첫 번째 행에 대해 캐스케이드 알고리즘의 첫 번째 반복을 수행하고 그룹 프로세서는 요소를 수행합니다. -행렬의 두 번째 행 값의 현명한 곱셈 등. 그림의 설명을 위해 6.2는 에서 2번의 파이프라인 반복 후 계산 프로세스의 상황을 보여줍니다.

쌀. 6.2. 2번의 반복을 수행한 후 행렬의 행에 벡터를 곱하는 작업에 대한 파이프라인의 상태

2. 알고리즘 성능 지표 평가. 캐스케이드 방식에 따라 벡터에 의한 첫 번째 행의 곱셈은 () 병렬 연산을 실행한 후 평소와 같이 완료됩니다. 다른 행의 경우 파이프라인 계산 구성 체계에 따라 파이프라인의 각 후속 반복이 완료된 후 각 연속 행의 곱셈 결과가 나타납니다. 결과적으로 행렬-벡터 곱셈 연산의 총 실행 시간은 다음과 같이 표현할 수 있습니다.

이 추정치는 앞 단락 ()에서 설명한 병렬 알고리즘의 실행 시간보다 약간 길지만, 새로 제안하는 방법은 전송할 데이터가 더 적습니다(벡터는 ​​한 번만 전송됨). 또한 파이프라인 방식을 사용하면 일부 계산 결과가 더 일찍 나타납니다(여러 데이터 처리 상황에서 유용할 수 있음).

결과적으로 알고리즘의 성능 지표는 다음 관계에 의해 결정됩니다.

3. 컴퓨터 시스템 토폴로지 선택. 컴퓨팅 시스템의 편의 토폴로지는 컴퓨팅 체계에 의해 완전히 결정됩니다. 이진 트리키 . 이러한 네트워크 토폴로지를 통한 데이터 전송 횟수는 파이프라인에서 수행한 총 반복 횟수에 의해 결정됩니다.

.

계산의 초기화는 트리의 잎에서 시작되고 합산 결과는 루트 프로세서에 누적됩니다.

프로세서 간 통신의 다른 토폴로지를 사용하는 컴퓨터 시스템에 대해 수행되는 통신 작업의 복잡성에 대한 분석은 독립적인 작업으로 수행되어야 합니다(섹션 3.4 참조).

병렬 컴퓨팅 구성

1. 병렬 연산 방식의 선택. 행렬에 벡터를 곱하기 위해 프로세서를 사용할 때 이미 매뉴얼에서 논의된 병렬 행별 곱셈 알고리즘을 사용할 수 있습니다. 여기서 행렬의 행은 프로세서 간에 행별로 분산되고 각 프로세서는 연산을 구현합니다. 행렬의 개별 행에 벡터를 곱합니다. 병렬 컴퓨팅을 구성하는 또 다른 가능한 방법은 다음과 같습니다. 행렬의 행에 벡터를 곱하는 연산을 위한 파이프라인 방식(벡터의 내적) 사용 가능한 모든 프로세서를 선형 시퀀스( 통치자).

이러한 계산 방식은 다음과 같이 정의할 수 있습니다. 프로세서 세트를 선형 시퀀스로 표현해 보겠습니다(그림 4.7 참조).

각 프로세서 는 행렬 열 요소와 벡터 요소를 곱하는 데 사용됩니다. 각 프로세서에 대한 계산 실행은 다음으로 구성됩니다.

행렬 열의 다음 요소가 요청됩니다.

요소 및 가 곱해집니다.

이전 프로세서의 계산 결과가 요청됩니다.

값이 추가됩니다.

결과는 다음 프로세서로 전송됩니다.

쌀. 6.3. 두 번의 반복을 수행한 후 행렬의 행에 벡터를 곱하는 연산에 대한 선형 파이프라인의 상태

설명된 체계를 초기화할 때 다음과 같은 추가 작업을 수행해야 합니다.

첫 번째 반복 동안 각 프로세서는 벡터의 요소를 추가로 요청합니다.

초기화 단계에서 계산을 동기화하기 위해(회로의 다음 반복 실행 중에 이전 프로세서의 계산 결과가 요청됨) 프로세서는 대기 루프를 실행합니다.

또한 이전 프로세서가 없는 첫 번째 프로세서에 대해 설명된 방식의 균일성을 위해 빈 덧셈 연산( ).

그림의 설명을 위해 6.3은 에서 파이프라인의 두 번째 반복 후 계산 프로세스의 상태를 보여줍니다.

2. 알고리즘 성능 지표 평가. 설명된 파이프라인 방식에 따라 벡터에 대한 첫 번째 행의 곱셈은 () 병렬 연산의 실행 후에 완료됩니다. 다음 행의 곱셈 결과는 파이프라인의 다음 반복이 완료된 후 발생합니다(각 프로세서의 반복에는 곱셈 및 더하기 작업의 실행이 포함됨). 결과적으로 행렬-벡터 곱셈 연산의 총 실행 시간은 다음과 같이 표현할 수 있습니다.

이 추정치는 에 대한 병렬 알고리즘의 가능한 최소 실행 시간보다 큽니다. 파이프라인 컴퓨팅 방식을 사용하는 것의 유용성은 이전 단락에서 언급했듯이 전송된 데이터의 양을 줄이고 계산 결과의 일부를 조기에 표시할 수 있다는 것입니다.

이 계산 방식의 성능 지표는 다음 관계에 의해 결정됩니다.

, ,

3. 컴퓨터 시스템 토폴로지 선택. 설명된 알고리즘의 구현을 위한 컴퓨팅 시스템의 필수 토폴로지는 제안된 계산 방식에 의해 고유하게 결정됩니다. 이것은 선형으로 정렬된 프로세서 세트입니다( ).

제한된 프로세서 세트 사용()

1. 병렬 연산 방식의 선택. 프로세서의 개수를 값으로 줄이면 행별 곱셈 알고리즘을 적용한 결과 행렬-벡터 곱셈을 위한 병렬 계산 방식을 얻을 수 있다. 이 경우, 요소별 곱셈 결과를 합산하는 캐스케이드 방식이 퇴화하고 행렬 행에 벡터를 곱하는 연산이 하나의 프로세서에서 완전히 수행된다. 이 접근 방식으로 얻은 계산 방식은 다음과 같이 지정할 수 있습니다.

벡터 및 행렬 행은 사용 가능한 각 프로세서로 전송됩니다.

행렬의 행에 벡터를 곱하는 작업은 일반적인 순차 알고리즘을 사용하여 수행됩니다.

행렬의 크기는 프로세서 수의 배수가 아닐 수 있으며 행렬의 행은 프로세서 간에 균등하게 분할될 수 없습니다. 이러한 상황에서는 프로세서 부하 균일성 요구 사항에서 벗어나 더 간단한 계산 방식을 얻기 위해 데이터가 프로세서에 행 단위로만 배치된다는 규칙을 받아들일 수 있습니다(즉, 행렬의 한 행 요소 여러 프로세서 간에 공유할 수 없음). 행 수가 다르면 프로세서에 다른 계산 부하가 발생합니다. 따라서 계산 완료(작업 솔루션의 총 기간)는 가장 많이 로드된 프로세서의 작동 시간에 따라 결정됩니다(동시에 일부 프로세서는 계산). 프로세서의 고르지 못한 로딩은 MCS 사용의 효율성을 감소시키며, 이 예를 고려한 결과 다음과 같은 결론을 내릴 수 있습니다. 균형 문제

3. 컴퓨터 시스템 토폴로지 선택. 제안된 계산 방식에서 수행되는 프로세서 간 상호 작용의 특성에 따라 다음 형식의 프로세서 구성 (그림 1.1 참조). 이러한 토폴로지의 제어 프로세서는 컴퓨팅 프로세서에 초기 데이터를 로드하고 수행된 계산 결과를 수신하는 데 사용할 수 있습니다.

행렬 곱셈

행렬에 행렬을 곱하는 문제는 관계에 의해 정의됩니다

.

(간단함을 위해 곱한 행렬이 정사각형이고 순서가 있다고 가정합니다).

이 작업의 가능한 병렬 실행 방법에 대한 분석은 행렬에 벡터를 곱하는 문제를 고려하여 유추하여 수행할 수 있습니다. 이러한 분석은 독립적인 연구를 위해 남겨두고 행렬 곱셈 문제의 예를 사용하여 복잡한 문제를 해결하기 위한 병렬 방법을 구성할 수 있는 몇 가지 일반적인 접근 방식의 사용을 보여줍니다.

그래서 이전 수업에서 행렬의 덧셈과 뺄셈에 대한 규칙을 분석했습니다. 이것은 대부분의 학생들이 문자 그대로 바로 이해할 수 있을 정도로 간단한 작업입니다.

그러나 일찍 기뻐합니다. 공짜는 끝났습니다. 곱셈으로 넘어갑시다. 바로 경고하겠습니다. 두 개의 행렬을 곱하는 것은 여러분이 생각하는 것처럼 동일한 좌표를 가진 셀의 숫자를 전혀 곱하는 것이 아닙니다. 모든 것이 여기에서 훨씬 더 재미있습니다. 그리고 예비 정의부터 시작해야 합니다.

일관된 행렬

행렬의 가장 중요한 특성 중 하나는 크기입니다. 우리는 이미 이것에 대해 100번 이야기했습니다. $A=\left[ m\times n \right]$는 행렬에 정확히 $m$ 행과 $n$ 열이 있음을 의미합니다. 행과 열을 혼동하지 않는 방법에 대해서는 이미 논의했습니다. 이제 다른 것이 중요합니다.

정의. $A=\left[ m\times n \right]$ 및 $B=\left[ n\times k \right]$ 형식의 행렬, 여기서 첫 번째 행렬의 열 개수는 다음과 같습니다. 두 번째 행의 수를 일관성이라고 합니다.

다시 한 번: 첫 번째 행렬의 열 수는 두 번째 행렬의 행 수와 같습니다! 이로부터 우리는 한 번에 두 가지 결론을 얻습니다.

  1. 우리는 행렬의 순서에 관심이 있습니다. 예를 들어, $A=\left[ 3\times 2 \right]$ 및 $B=\left[ 2\times 5 \right]$ 행렬은 일치합니다(첫 번째 행렬에 2개의 열, 두 번째 행렬에 2개의 행). , 하지만 그 반대의 경우도 마찬가지입니다. $B=\left[ 2\times 5 \right]$ 및 $A=\left[ 3\times 2 \right]$ 행렬은 더 이상 일관성이 없습니다(첫 번째 행렬의 5개 열은 다음과 같습니다. 그것은 두 번째에서 3 행이 아닙니다).
  2. 모든 치수를 차례로 작성하면 일관성을 쉽게 확인할 수 있습니다. 이전 단락의 예를 사용하여: "3 2 2 5" - 동일한 숫자가 중간에 있으므로 행렬이 일관됩니다. 그러나 "2 5 3 2"는 중간에 다른 숫자가 있기 때문에 동의하지 않습니다.

게다가, 캡틴은 $\left[ n\times n \right]$ 같은 크기의 정사각형 행렬이 항상 일관성이 있다는 것을 암시하는 것 같습니다.

수학에서 객체의 열거 순서가 중요할 때(예를 들어, 위에서 논의한 정의에서 행렬의 순서가 중요함) 종종 순서 쌍에 대해 이야기합니다. 우리는 학교에서 그들을 만났습니다. $\left(1;0 \right)$ 좌표와 $\left(0;1 \right)$ 좌표가 평면에서 서로 다른 점을 정의하는 것은 당연하다고 생각합니다.

따라서 좌표는 숫자로 구성된 순서쌍이기도 합니다. 그러나 그러한 행렬 쌍을 만드는 것을 방해하는 것은 없습니다. 그러면 다음과 같이 말할 수 있습니다. "$\left(A;B \right)$ 행렬의 순서 쌍은 첫 번째 행렬의 열 수가 두 번째 행렬의 행 개수와 같으면 일관성이 있습니다. "

글쎄, 그래서?

곱셈의 정의

두 개의 일관된 행렬인 $A=\left[ m\times n \right]$ 및 $B=\left[ n\times k \right]$를 고려하십시오. 그리고 우리는 곱셈 연산을 정의합니다.

정의. 두 개의 일관된 행렬 $A=\left[ m\times n \right]$ 및 $B=\left[ n\times k \right]$의 곱은 새 행렬 $C=\left[ m\times k \ 오른쪽] $, 그 요소는 공식에 따라 계산됩니다.

\[\begin(정렬) & ((c)_(i;j))=((a)_(i;1))\cdot ((b)_(1;j))+((a)_ (i;2))\cdot ((b)_(2;j))+\ldots +((a)_(i;n))\cdot ((b)_(n;j))= \\ & =\sum\limits_(t=1)^(n)(((a)_(i;t))\cdot ((b)_(t;j))) \end(정렬)\]

이러한 제품은 $C=A\cdot B$와 같은 표준 방식으로 표시됩니다.

이 정의를 처음 보는 사람들에게는 두 가지 질문이 즉시 제기됩니다.

  1. 이게 무슨 야생 게임이야?
  2. 왜 그렇게 어렵습니까?

글쎄, 먼저 일을 먼저. 첫 번째 질문부터 시작하겠습니다. 이 모든 인덱스는 무엇을 의미합니까? 실제 행렬로 작업할 때 실수하지 않는 방법은 무엇입니까?

우선, $((c)_(i;j))$ 계산을 위한 긴 줄이 (특히 혼동되지 않도록 인덱스 사이에 세미콜론을 넣어야 하지만 입력할 필요는 없습니다. 일반 - 정의에 수식을 입력하는 데 지쳤습니다.) 실제로 간단한 규칙으로 요약됩니다.

  1. 첫 번째 행렬에서 $i$-th 행을 가져옵니다.
  2. 두 번째 행렬에서 $j$-th 열을 가져옵니다.
  3. 우리는 두 개의 숫자 시퀀스를 얻습니다. 이 시퀀스의 요소에 동일한 숫자를 곱한 다음 결과 곱을 더합니다.

이 과정은 그림에서 이해하기 쉽습니다.


두 행렬을 곱하기 위한 체계

다시 한 번: 첫 번째 행렬의 $i$ 행, 두 번째 행렬의 $j$ 열을 수정하고 요소에 동일한 숫자를 곱한 다음 결과 곱을 더합니다. $((c)_(ij ))$. 모든 $1\le i\le m$ 및 $1\le j\le k$에 대해서도 마찬가지입니다. 저것들. 그러한 "변태"는 총 $m\times k$ 있을 것입니다.

사실, 우리는 학교 교과 과정에서 행렬 곱셈을 이미 많이 접했지만 매우 잘린 형태일 뿐입니다. 벡터가 주어집니다.

\[\begin(align) & \vec(a)=\left(((x)_(a));((y)_(a));((z)_(a)) \right); \\ & \overrightarrow(b)=\left(((x)_(b));((y)_(b));((z)_(b)) \right). \\ \끝(정렬)\]

그러면 스칼라 곱은 정확히 쌍별 곱의 합이 됩니다.

\[\overrightarrow(a)\times \overrightarrow(b)=((x)_(a))\cdot ((x)_(b))+((y)_(a))\cdot ((y )_(b))+((z)_(a))\cdot ((z)_(b))\]

사실, 나무가 더 푸르고 하늘이 더 밝았던 그 먼 해에 우리는 단순히 행 벡터 $\overrightarrow(a)$에 열 벡터 $\overrightarrow(b)$를 곱했습니다.

오늘은 변한 것이 없습니다. 이제 이러한 행 및 열 벡터가 더 많아졌습니다.

그러나 충분한 이론! 실제 사례를 살펴보겠습니다. 그리고 가장 단순한 경우인 정사각형 행렬부터 시작하겠습니다.

정방 행렬의 곱

작업 1. 곱셈을 수행합니다.

\[\left[ \begin(array)(*(35)(r)) 1 & 2 \\ -3 & 4 \\\end(array) \right]\cdot \left[ \begin(array)(* (35)(r)) -2 & 4 \\ 3 & 1 \\end(array) \right]\]

해결책. 따라서 두 개의 행렬이 있습니다. $A=\left[ 2\times 2 \right]$ 및 $B=\left[ 2\times 2 \right]$입니다. 일관성이 있음이 분명합니다(같은 크기의 정사각형 행렬은 항상 일관성이 있음). 그래서 우리는 곱셈을 합니다:

\[\begin(align) & \left[ \begin(array)(*(35)(r)) 1 & 2 \\ -3 & 4 \\\end(array) \right]\cdot \left[ \ 시작(배열)(*(35)(r)) -2 & 4 \\ 3 & 1 \\\end(배열) \right]=\left[ \begin(배열)(*(35)(r)) 1\cdot \left(-2 \right)+2\cdot 3 & 1\cdot 4+2\cdot 1 \\ -3\cdot \left(-2 \right)+4\cdot 3 & -3\cdot 4+4\cdot 1 \\\end(배열) \right]= \\ & =\left[ \begin(array)(*(35)(r)) 4 & 6 \\ 18 & -8 \\ 끝(배열)\오른쪽]. \끝(정렬)\]

그게 다야!

답: $\left[ \begin(array)(*(35)(r))4 & 6 \\ 18 & -8 \\\end(array) \right]$.

작업 2. 곱셈을 수행합니다.

\[\left[ \begin(matrix) 1 & 3 \\ 2 & 6 \\\end(matrix) \right]\cdot \left[ \begin(array)(*(35)(r))9 & 6 \\ -3 & -2 \\end(배열) \right]\]

해결책. 다시 말하지만 일관된 행렬이므로 다음 작업을 수행합니다.\[\]

\[\begin(align) & \left[ \begin(matrix) 1 & 3 \\ 2 & 6 \\\end(matrix) \right]\cdot \left[ \begin(array)(*(35)( r)) 9 & 6 \\ -3 & -2 \\\end(배열) \right]=\left[ \begin(array)(*(35)(r)) 1\cdot 9+3\cdot \ 왼쪽(-3 \오른쪽) & 1\cdot 6+3\cdot \left(-2 \right) \\ 2\cdot 9+6\cdot \left(-3 \right) & 2\cdot 6+6\ cdot \left(-2 \right) \\\end(array) \right]= \\ & =\left[ \begin(matrix) 0 & 0 \\ 0 & 0 \\\end(matrix) \right] . \끝(정렬)\]

보시다시피 결과는 0으로 채워진 행렬입니다.

답: $\left[ \begin(matrix) 0 & 0 \\ 0 & 0 \\\end(matrix) \right]$.

위의 예에서 행렬 곱셈이 그렇게 복잡한 연산이 아님을 알 수 있습니다. 적어도 2 x 2 제곱 행렬의 경우.

계산 과정에서 특정 셀에 포함된 숫자를 직접 그린 중간 행렬을 컴파일했습니다. 이것이 바로 실제 문제를 해결할 때 수행해야 하는 작업입니다.

매트릭스 제품의 기본 속성

간단히 말해서. 행렬 곱셈:

  1. 비가환성: 일반적으로 $A\cdot B\ne B\cdot A$. 물론 $A\cdot B=B\cdot A$가 동일한 특수 행렬이 있지만(예: $B=E$가 단위 행렬인 경우) 대부분의 경우 이것이 작동하지 않습니다. ;
  2. 연관: $\left(A\cdot B \right)\cdot C=A\cdot \left(B\cdot C \right)$. 여기에는 옵션이 없습니다. 이 두 행렬의 왼쪽과 오른쪽에 무엇이 있는지 걱정하지 않고 인접한 행렬을 곱할 수 있습니다.
  3. 분배: $A\cdot \left(B+C \right)=A\cdot B+A\cdot C$ 및 $\left(A+B \right)\cdot C=A\cdot C+B\cdot C $

그리고 지금 - 모두 동일하지만 더 자세히 설명합니다.

행렬 곱셈은 고전적인 숫자 곱셈과 매우 유사합니다. 그러나 차이점이 있습니다. 그 중 가장 중요한 것은 행렬 곱셈은 일반적으로 비가환적입니다..

문제 1의 행렬을 다시 고려하십시오. 우리는 이미 직접 곱을 알고 있습니다.

\[\left[ \begin(array)(*(35)(r)) 1 & 2 \\ -3 & 4 \\\end(array) \right]\cdot \left[ \begin(array)(* (35)(r)) -2 & 4 \\ 3 & 1 \\end(배열) \right]=\left[ \begin(array)(*(35)(r))4 & 6 \\ 18 & -8 \\\end(배열) \right]\]

그러나 행렬을 바꾸면 완전히 다른 결과가 나타납니다.

\[\left[ \begin(array)(*(35)(r)) -2 & 4 \\ 3 & 1 \\\end(array) \right]\cdot \left[ \begin(array)(* (35)(r)) 1 & 2 \\ -3 & 4 \\end(배열) \right]=\left[ \begin(matrix) -14 & 4 \\ 0 & 10 \\end(행렬 )\오른쪽]\]

$A\cdot B\ne B\cdot A$입니다. 또한 곱셈 연산은 일관된 행렬 $A=\left[ m\times n \right]$ 및 $B=\left[ n\times k \right]$에 대해서만 정의되지만 아무도 그 행렬이 그대로 유지될 것이라고 보장하지 않습니다. 교체된 경우 일관성이 있습니다. 예를 들어 $\left[ 2\times 3 \right]$ 행렬과 $\left[ 3\times 5 \right]$ 행렬은 이 순서로 매우 일관되지만 $\left[ 3\times 5 \ right] $와 $\left[ 2\times 3 \right]$ 역순으로 쓰여진 것은 더 이상 일치하지 않습니다. 슬픔 :(

주어진 크기 $n$의 정방행렬 중에서 직접 곱하거나 역순으로 곱할 때 항상 동일한 결과를 나타내는 행렬이 있습니다. 그러한 모든 행렬을 설명하는 방법(그리고 일반적으로 몇 개)은 별도의 강의에서 다룰 주제입니다. 오늘 우리는 그것에 대해 이야기하지 않을 것입니다. :)

그러나 행렬 곱셈은 연관됩니다.

\[\left(A\cdot B \right)\cdot C=A\cdot \left(B\cdot C \right)\]

따라서 한 번에 여러 행렬을 연속으로 곱해야 할 때 미리 수행할 필요가 전혀 없습니다. 곱할 때 일부 인접한 행렬이 흥미로운 결과를 제공할 가능성이 큽니다. 예를 들어, 위에서 논의한 문제 2와 같은 0 행렬.

실제 문제에서 대부분 $\left[ n\times n \right]$ 크기의 정사각형 행렬을 곱해야 합니다. 이러한 모든 행렬의 집합은 $((M)^(n))$로 표시됩니다(즉, 항목 $A=\left[ n\times n \right]$ 및 \는 동일한 것을 의미함). 단위 행렬이라고 하는 행렬 $E$를 반드시 포함합니다.

정의. $n$ 크기의 단위 행렬은 $A=\left[ n\times n \right]$ 정방 행렬 $A=\left[ n\times n \right]$에 대해 다음과 같은 등식을 유지하는 행렬 $E$입니다.

이러한 행렬은 항상 동일하게 보입니다. 주 대각선에는 단위가 있고 다른 모든 셀에는 0이 있습니다.

\[\begin(정렬) & A\cdot \left(B+C \right)=A\cdot B+A\cdot C; \\ & \left(A+B \right)\cdot C=A\cdot C+B\cdot C. \\ \end(정렬)\]

즉, 한 행렬에 다른 두 행렬의 합을 곱해야 하는 경우 이 "다른 두 개" 각각을 곱한 다음 결과를 더할 수 있습니다. 실제로는 일반적으로 역연산을 수행해야 합니다. 동일한 행렬을 발견하고 대괄호에서 꺼내 더하기를 수행하여 삶을 단순화합니다. :)

분포를 설명하기 위해 두 공식을 작성해야 했습니다. 여기서 합계는 두 번째 요인에 있고 합계는 첫 번째 요인에 있습니다. 이것은 행렬 곱셈이 비가환적이라는 사실 때문입니다(일반적으로 비가환 대수학에는 일반 숫자로 작업할 때 마음에 들지 않는 온갖 종류의 농담이 많이 있습니다). 예를 들어 시험 중에 이 속성을 적어야 하는 경우 두 공식을 모두 작성해야 합니다. 그렇지 않으면 교사가 약간 화를 낼 수 있습니다.

좋아요, 이것들은 모두 정사각형 행렬에 대한 동화였습니다. 직사각형은 어떻습니까?

직사각형 행렬의 경우

그러나 아무것도 - 모든 것이 정사각형과 동일합니다.

작업 3. 곱셈을 수행합니다.

\[\left[ \begin(matrix) \begin(matrix) 5 \\ 2 \\ 3 \\end(matrix) & \begin(matrix) 4 \\ 5 \\ 1 \\end(matrix) \ \\end(행렬) \right]\cdot \left[ \begin(array)(*(35)(r)) -2 & 5 \\ 3 & 4 \\\end(array) \right]\]

해결책. 두 개의 행렬이 있습니다: $A=\left[ 3\times 2 \right]$ 및 $B=\left[ 2\times 2 \right]$. 크기를 나타내는 숫자를 연속으로 작성해 보겠습니다.

보시다시피 중앙의 두 숫자는 동일합니다. 이는 행렬이 일관되고 곱해질 수 있음을 의미합니다. 그리고 출력에서 ​​행렬 $C=\left[ 3\times 2 \right]$를 얻습니다.

\[\begin(align) & \left[ \begin(matrix) \begin(matrix) 5 \\ 2 \\ 3 \\end(matrix) & \begin(matrix) 4 \\ 5 \\ 1 \\ \end(행렬) \\\end(행렬) \right]\cdot \left[ \begin(array)(*(35)(r)) -2 & 5 \\ 3 & 4 \\end(배열) \right]=\left[ \begin(array)(*(35)(r)) 5\cdot \left(-2 \right)+4\cdot 3 & 5\cdot 5+4\cdot 4 \\ 2 \cdot \left(-2 \right)+5\cdot 3 & 2\cdot 5+5\cdot 4 \\ 3\cdot \left(-2 \right)+1\cdot 3 & 3\cdot 5+1 \cdot 4 \\\end(배열) \right]= \\ & =\left[ \begin(array)(*(35)(r)) 2 & 41 \\ 11 & 30 \\ -3 & 19 \ \\끝(배열)\오른쪽]. \끝(정렬)\]

모든 것이 명확합니다. 최종 행렬에는 3개의 행과 2개의 열이 있습니다. 꽤 $=\left[ 3\times 2 \right]$.

답: $\left[ \begin(array)(*(35)(r)) \begin(array)(*(35)(r)) 2 \\ 11 \\ -3 \\end(array) & \begin(matrix) 41 \\ 30 \\ 19 \\end(matrix) \\end(array) \right]$.

이제 막 행렬 작업을 시작하는 사람들을 위한 최고의 훈련 작업 중 하나를 고려하십시오. 그 안에는 두 개의 정제를 곱하는 것뿐만 아니라 먼저 결정해야합니다. 그러한 곱셈이 허용됩니까?

문제 4. 행렬의 가능한 모든 쌍별 곱 찾기:

\\]; $B=\left[ \begin(matrix) \begin(matrix) 0 \\ 2 \\ 0 \\ 4 \\end(matrix) & \begin(matrix) 1 \\ 0 \\ 3 \\ 0 \ \\end(행렬) \\end(행렬) \right]$; $C=\left[ \begin(matrix)0 & 1 \\ 1 & 0 \\\end(matrix) \right]$.

해결책. 먼저 행렬의 차원을 기록해 보겠습니다.

\;\ B=\left[ 4\times 2 \right];\ C=\left[ 2\times 2 \right]\]

$A$의 열 수가 4이고 $B$에만 이 수의 행이 있기 때문에 $A$ 행렬은 $B$ 행렬과만 일치할 수 있습니다. 따라서 다음과 같은 제품을 찾을 수 있습니다.

\\cdot \left[ \begin(배열)(*(35)(r)) 0 & 1 \\ 2 & 0 \\ 0 & 3 \\ 4 & 0 \\end(배열) \right]=\ 왼쪽[ \begin(배열)(*(35)(r))-10 & 7 \\ 10 & 7 \\\end(배열) \right]\]

독자가 스스로 중간 단계를 수행할 것을 제안합니다. 계산하기 전에도 결과 행렬의 크기를 미리 결정하는 것이 좋습니다.

\\cdot \left[ 4\times 2 \right]=\left[ 2\times 2 \right]\]

즉, 행렬의 일관성을 보장하는 "전환" 계수를 제거하기만 하면 됩니다.

어떤 다른 옵션이 가능합니까? $B\cdot A$를 찾는 것은 확실히 가능합니다. $B=\left[ 4\times 2 \right]$, $A=\left[ 2\times 4 \right]$이므로 순서쌍 $\ left(B ;A \right)$는 일관되고 제품의 치수는 다음과 같습니다.

\\cdot \left[ 2\times 4 \right]=\left[ 4\times 4 \right]\]

간단히 말해서, 출력은 $\left[ 4\times 4 \right]$ 행렬이 될 것이며, 이 행렬의 계수는 계산하기 쉽습니다.

\\cdot \left[ \begin(배열)(*(35)(r)) 1 & -1 & 2 & -2 \\ 1 & 1 & 2 & 2 \\\end(배열) \right]=\ 왼쪽[ \begin(배열)(*(35)(r))1 & 1 & 2 & 2 \\ 2 & -2 & 4 & -4 \\ 3 & 3 & 6 & 6 \\ 4 & -4 & 8 & -8 \\\end(배열) \right]\]

분명히, $C\cdot A$와 $B\cdot C$도 일치시킬 수 있습니다. 그게 전부입니다. 따라서 결과 제품을 간단히 작성합니다.

쉬웠 어.:)

답: $AB=\left[ \begin(array)(*(35)(r)) -10 & 7 \\ 10 & 7 \\\end(array) \right]$; $BA=\left[ \begin(array)(*(35)(r)) 1 & 1 & 2 & 2 \\ 2 & -2 & 4 & -4 \\ 3 & 3 & 6 & 6 \\ 4 & -4 & 8 & -8 \\\end(배열) \right]$; $CA=\left[ \begin(array)(*(35)(r)) 1 & 1 & 2 & 2 \\ 1 & -1 & 2 & -2 \\\end(array) \right]$; $BC=\left[ \begin(array)(*(35)(r))1 & 0 \\ 0 & 2 \\ 3 & 0 \\ 0 & 4 \\end(array) \right]$.

일반적으로 이 작업을 직접 수행하는 것이 좋습니다. 그리고 숙제에 있는 또 다른 유사한 작업. 이 겉보기에 단순한 생각은 행렬 곱셈의 모든 핵심 단계를 해결하는 데 도움이 될 것입니다.

그러나 이야기는 거기서 끝나지 않습니다. 곱셈의 특별한 경우로 넘어 갑시다. :)

행 벡터와 열 벡터

가장 일반적인 행렬 연산 중 하나는 행 또는 열이 하나인 행렬을 곱하는 것입니다.

정의. 열 벡터는 $\left[ m\times 1 \right]$ 행렬, 즉 여러 행과 하나의 열로 구성됩니다.

행 벡터는 $\left[ 1\times n \right]$ 크기의 행렬입니다. 하나의 행과 여러 개의 열로 구성됩니다.

사실, 우리는 이미 이러한 객체를 만났습니다. 예를 들어, 스테레오메트리 $\overrightarrow(a)=\left(x;y;z \right)$의 일반적인 3차원 벡터는 행 벡터에 불과합니다. 이론적으로 보면 행과 열의 차이가 거의 없습니다. 주변 승수 행렬과 조정할 때만 주의해야 합니다.

작업 5. 곱하기:

\[\left[ \begin(배열)(*(35)(r)) 2 & -1 & 3 \\ 4 & 2 & 0 \\ -1 & 1 & 1 \\\end(배열) \right] \cdot \left[ \begin(array)(*(35)(r)) 1 \\ 2 \\ -1 \\end(array) \right]\]

해결책. 일관된 행렬의 곱이 있습니다: $\left[ 3\times 3 \right]\cdot \left[ 3\times 1 \right]=\left[ 3\times 1 \right]$. 이 조각 찾기:

\[\left[ \begin(배열)(*(35)(r)) 2 & -1 & 3 \\ 4 & 2 & 0 \\ -1 & 1 & 1 \\\end(배열) \right] \cdot \left[ \begin(array)(*(35)(r)) 1 \\ 2 \\ -1 \\\end(array) \right]=\left[ \begin(array)(*(35) )(r)) 2\cdot 1+\left(-1 \right)\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) \right]=\left[ \begin(array)(*(35)(r) ) -3 \\ 8 \\ 0 \\end(배열) \오른쪽]\]

답: $\left[ \begin(array)(*(35)(r))-3 \\ 8 \\ 0 \\end(array) \right]$.

작업 6. 곱셈을 수행합니다.

\[\left[ \begin(array)(*(35)(r)) 1 & 2 & -3 \\\end(array) \right]\cdot \left[ \begin(array)(*(35) (r)) 3 & 1 & -1 \\ 4 & -1 & 3 \\ 2 & 6 & 0 \\end(배열) \right]\]

해결책. 다시 모든 것이 일관됩니다: $\left[ 1\times 3 \right]\cdot \left[ 3\times 3 \right]=\left[ 1\times 3 \right]$. 우리는 작업을 고려합니다.

\[\left[ \begin(array)(*(35)(r)) 1 & 2 & -3 \\\end(array) \right]\cdot \left[ \begin(array)(*(35) (r)) 3 & 1 & -1 \\ 4 & -1 & 3 \\ 2 & 6 & 0 \\end(배열) \right]=\left[ \begin(배열)(*(35)( r))5 & -19 & 5 \\\end(배열) \right]\]

답: $\left[ \begin(matrix) 5 & -19 & 5 \\\end(matrix) \right]$.

보시다시피, 행 벡터와 열 벡터에 정방 행렬을 곱할 때 출력은 항상 같은 크기의 행 또는 열입니다. 이 사실은 선형 방정식을 푸는 것부터 모든 종류의 좌표 변환에 이르기까지 많은 응용 분야를 가지고 있습니다.

나는 모든 것이 여기에서 분명했다고 생각합니다. 오늘 수업의 마지막 부분으로 넘어가 보겠습니다.

행렬 지수화

모든 곱셈 연산 중에서 지수화는 특별한 주의를 기울일 필요가 있습니다. 이것은 동일한 객체를 여러 번 곱할 때입니다. 행렬도 예외는 아니며 다양한 거듭제곱으로 올릴 수도 있습니다.

이러한 작업은 항상 조정됩니다.

\\cdot \left[ n\times n \right]=\left[ n\times n \right]\]

그리고 그들은 일반 학위와 같은 방식으로 지정됩니다.

\[\begin(정렬) & A\cdot A=((A)^(2)); \\ & A\cdot A\cdot A=((A)^(3)); \\ & \underbrace(A\cdot A\cdot \ldots \cdot A)_(n)=((A)^(n)). \\ \끝(정렬)\]

언뜻보기에 모든 것이 간단합니다. 실제로 어떻게 보이는지 봅시다.

작업 7. 행렬을 지정된 거듭제곱으로 올립니다.

$((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(3))$

해결책. 자, 빌드를 해보자. 먼저 제곱해 보겠습니다.

\[\begin(align) & ((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(2))=\left[ \begin(matrix ) 1 & 1 \\ 0 & 1 \\end(행렬) \right]\cdot \left[ \begin(행렬) 1 & 1 \\ 0 & 1 \\\end(행렬) \right]= \\ & =\left[ \begin(array)(*(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) \right]= \\ & =\left[ \begin(array)(*(35)(r)) 1 & 2 \\ 0 & 1 \ \\end(배열) \right] \end(정렬)\]

\[\begin(align) & ((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(3))=((\left[ \begin (행렬) 1 & 1 \\ 0 & 1 \\end(행렬) \right])^(3))\cdot \left[ \begin(행렬) 1 & 1 \\ 0 & 1 \\end( 행렬) \right]= \\ & =\left[ \begin(array)(*(35)(r)) 1 & 2 \\ 0 & 1 \\\end(array) \right]\cdot \left[ \begin(행렬) 1 & 1 \\ 0 & 1 \\\end(행렬) \right]= \\ & =\left[ \begin(array)(*(35)(r)) 1 & 3 \\ 0 & 1 \\\end(배열) \right] \end(정렬)\]

그게 다야.:)

답: $\left[ \begin(matrix)1 & 3 \\ 0 & 1 \\\end(matrix) \right]$.

문제 8. 행렬을 지정된 거듭제곱으로 올립니다.

\[((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(10))\]

해결책. "학점이 너무 높다", "세상이 불공평하다", "선생님들이 은행을 완전히 잃었다"는 사실에 대해 지금 울지 마십시오. 사실 모든 것이 쉽습니다.

\[\begin(align) & ((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(10))=((\left[ \begin (행렬) 1 & 1 \\ 0 & 1 \\end(행렬) \right])^(3))\cdot ((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\ end(matrix) \right])^(3))\cdot ((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(3))\ cdot \left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right]= \\ & =\left(\left[ \begin(matrix) 1 & 3 \\ 0 & 1 \\\end(행렬) \right]\cdot \left[ \begin(행렬) 1 & 3 \\ 0 & 1 \\\end(행렬) \right] \right)\cdot \left(\left[ \begin(matrix) 1 & 3 \\ 0 & 1 \\end(matrix) \right]\cdot \left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\end(matrix) \right ] \right)= \\ & =\left[ \begin(matrix) 1 & 6 \\ 0 & 1 \\\end(matrix) \right]\cdot \left[ \begin(matrix) 1 & 4 \\ 0 & 1 \\end(행렬) \right]= \\ & =\left[ \begin(행렬) 1 & 10 \\ 0 & 1 \\end(행렬) \right] \end(정렬)\ ]

두 번째 줄에서는 곱셈 연관성을 사용했습니다. 사실, 우리는 이전 작업에서 그것을 사용했지만 거기에는 암시적이었습니다.

답: $\left[ \begin(matrix) 1 & 10 \\ 0 & 1 \\end(matrix) \right]$.

보시다시피, 행렬을 거듭제곱하는 데 복잡한 것은 없습니다. 마지막 예는 다음과 같이 요약할 수 있습니다.

\[((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(n))=\left[ \begin(array)(*(35) (r)) 1 & n \\ 0 & 1 \\end(배열) \right]\]

이 사실은 수학적 귀납법이나 직접 곱셈을 통해 증명하기 쉽습니다. 그러나 권력을 잡을 때 이러한 패턴을 포착하는 것이 항상 가능한 것은 아닙니다. 따라서 주의하십시오. 여러 행렬을 "빈" 행렬에서 곱하는 것이 몇 가지 패턴을 찾는 것보다 더 쉽고 빠릅니다.

일반적으로 없는 곳에서 더 높은 의미를 찾지 마십시오. 마지막으로 $\left[ 3\times 3 \right]$만큼 더 큰 행렬의 지수화를 고려해 보겠습니다.

문제 9. 행렬을 지정된 거듭제곱으로 올립니다.

\[((\left[ \begin(행렬) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\end(행렬) \right])^(3))\]

해결책. 패턴을 찾지 맙시다. 우리는 "통해" 일합니다:

\[((\left[ \begin(행렬) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\end(행렬) \right])^(3))=(( \left[ \begin(행렬) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\end(행렬) \right])^(2))\cdot \left[ \begin (행렬)0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\end(행렬) \right]\]

이 행렬을 제곱하여 시작하겠습니다.

\[\begin(align) & ((\left[ \begin(matrix) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\end(matrix) \right])^( 2))=\left[ \begin(matrix) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\end(matrix) \right]\cdot \left[ \begin(matrix ) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\end(행렬) \right]= \\ & =\left[ \begin(배열)(*(35)(r )) 2 & 1 & 1 \\ 1 & 2 & 1 \\ 1 & 1 & 2 \\end(배열) \right] \end(정렬)\]

이제 큐브를 만들어 보겠습니다.

\[\begin(align) & ((\left[ \begin(matrix) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\end(matrix) \right])^( 3))=\left[ \begin(array)(*(35)(r)) 2 & 1 & 1 \\ 1 & 2 & 1 \\ 1 & 1 & 2 \\end(array) \right] \cdot \left[ \begin(matrix) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\end(matrix) \right]= \\ & =\left[ \begin( 배열)(*(35)(r)) 2 & 3 & 3 \\ 3 & 2 & 3 \\ 3 & 3 & 2 \\end(배열) \right] \end(정렬)\]

그게 다야. 문제 해결됨.

답: $\left[ \begin(matrix) 2 & 3 & 3 \\ 3 & 2 & 3 \\ 3 & 3 & 2 \\end(matrix) \right]$.

보시다시피 계산량이 많아졌지만 의미는 전혀 달라지지 않았습니다. :)

이 수업은 끝날 수 있습니다. 다음 시간에는 역 연산을 고려할 것입니다. 기존 제품을 사용하여 원래 승수를 찾을 것입니다.

이미 짐작하셨겠지만 역행렬과 역행렬을 찾는 방법에 대해 이야기하겠습니다.



최근 섹션 기사:

유명한 프리메이슨 목록 외국의 유명한 프리메이슨
유명한 프리메이슨 목록 외국의 유명한 프리메이슨

전복적인 반 러시아 연구에 대한 나의 연구를 축복한 상트페테르부르크와 라도가의 대주교 요한(Snychev)을 기리는 ...

기술 학교 란 무엇입니까-정의, 입학 특징, 유형 및 검토 기관과 대학의 차이점은 무엇입니까
기술 학교 란 무엇입니까-정의, 입학 특징, 유형 및 검토 기관과 대학의 차이점은 무엇입니까

25 모스크바 대학은 러시아 최고의 교육 기관의 "Top-100" 등급에 포함됩니다. 이 연구는 국제기구에서 수행했습니다 ...

남자가 약속을 지키지 않는 이유
남자가 약속을 지키지 않는 이유

오래 전부터 사람들 사이에 법이 있었습니다. 그렇게 부를 수 있다면 아무도 약속을 지키지 않는 이유를 알 수 없습니다. 에 의해...