`DOT_PRODUCT` — 벡터 내적

DOT_PRODUCT — 벡터 내적

두 벡터의 내적(dot product)을 구하고 싶을 때가 있어요. 물리 계산이나 선형대수에서 빠질 수 없는 연산이죠. DOT_PRODUCT는 크기가 같은 두 1차원 배열(벡터)의 내적을 계산해 주는 내장 함수예요.

출처: gfortran — DOT_PRODUCT

본문

시그니처

RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)

설명

DOT_PRODUCT(VECTOR_A, VECTOR_B)는 두 벡터 VECTOR_AVECTOR_B의 내적 곱을 계산해요. 두 벡터는 수치형 또는 논리형일 수 있고, 랭크 1 배열이어야 하며 크기가 같아야 해요.

  • 벡터가 INTEGER, REAL 또는 UNSIGNED이면 결과는 SUM(VECTOR_A*VECTOR_B)예요.
  • 벡터가 COMPLEX이면 결과는 SUM(CONJG(VECTOR_A)*VECTOR_B)예요.
  • 벡터가 LOGICAL이면 결과는 ANY(VECTOR_A .AND. VECTOR_B)예요.
  • VECTOR_AVECTOR_B 중 하나가 UNSIGNED이면 다른 쪽도 반드시 UNSIGNED여야 해요.

클래스

변형 함수(Transformational function)

인자

  • VECTOR_A — 타입이 수치형 또는 LOGICAL, 랭크 1. VECTOR_BUNSIGNED이면 VECTOR_A도 부호 없는(unsigned) 타입이어야 해요.
  • VECTOR_BVECTOR_A가 수치형이면 수치형, LOGICAL이면 LOGICAL. 랭크 1 배열. VECTOR_AUNSIGNED이면 VECTOR_B도 부호 없는 타입이어야 해요.

반환값

인자가 수치형이면 반환값은 INTEGER, REAL, COMPLEX 또는 UNSIGNED인 수치형 스칼라예요. 인자가 LOGICAL이면 반환값은 .TRUE. 또는 .FALSE.예요.

예제

program test_dot_prod
    integer, dimension(3) :: a, b
    a = (/ 1, 2, 3 /)
    b = (/ 4, 5, 6 /)
    print '(3i3)', a
    print *
    print '(3i3)', b
    print *
    print *, dot_product(a,b)
end program test_dot_prod

두 배열의 각 원소를 곱해 모두 더한 결과를 돌려줘요. 즉 1*4 + 2*5 + 3*6 = 32가 출력돼요.

표준

Fortran 90 이상이며, UNSIGNED에 대한 지원은 GNU 확장이에요.