산술 연산자

산술 연산자 (Arithmetic Operators)

Octave에서 쓸 수 있는 산술 연산자들은 스칼라와 행렬 모두에서 동작해요. 요소별(element-by-element) 연산자와 함수들은 브로드캐스팅(broadcasting)을 해요(브로드캐스팅 항목 참고).

출처: 문서

본문

기본 산술 연산자

x + y — 덧셈(항상 요소별로 동작). 두 피연산자가 모두 행렬이면 행과 열의 수가 모두 일치해야 하거나, 같은 모양으로 브로드캐스팅될 수 있어야 해요.

x - y — 뺄셈(항상 요소별로 동작). 두 피연산자가 모두 행렬이면 양쪽의 행과 열 수가 모두 일치해야 하거나 브로드캐스팅될 수 있어야 해요.

x * y — 행렬 곱셈. x의 열 수는 y의 행 수와 일치해야 해요.

x .* y — 요소별 곱셈. 두 피연산자가 모두 행렬이면 행과 열 수가 모두 일치해야 하거나 브로드캐스팅될 수 있어야 해요.

x / y — 오른쪽 나눗셈. 개념적으로는 다음 표현과 같아요.

(inv (y') * x')'

하지만 y'의 역행렬을 만들지 않고 계산해요. 시스템이 정사각형이 아니거나 계수 행렬이 특이(singular)하면 최소 노름 해(minimum norm solution)를 계산해요.

x ./ y — 요소별 오른쪽 나눗셈.

x \ y — 왼쪽 나눗셈. 개념적으로는 다음 표현과 같아요.

inv (x) * y

하지만 x의 역행렬을 만들지 않고 계산해요. 시스템이 정사각형이 아니거나 계수 행렬이 특이하면 최소 노름 해를 계산해요.

x .\ y — 요소별 왼쪽 나눗셈. y의 각 요소가 x의 각 대응 요소로 나눠져요.

x ^ y — 거듭제곱 연산자. xy가 모두 스칼라이면 xy제곱을 반환해요. x가 스칼라이고 y가 정사각 행렬이면 고유값 전개(eigenvalue expansion)로 결과를 계산해요. x가 정사각 행렬이면, y가 정수일 때는 반복 곱셈으로, y가 정수가 아닐 때는 고유값 전개로 계산해요. xy가 모두 행렬이면 오류가 나요.

이 연산자의 구현은 아직 개선이 필요해요.

x .^ y — 요소별 거듭제곱 연산자. 두 피연산자가 모두 행렬이면 행과 열 수가 모두 일치해야 하거나 브로드캐스팅될 수 있어야 해요. 여러 복소 결과가 가능하면, 음이 아닌 인자(각도)가 가장 작은 것을 취해요. 이 규칙은 실수 근도 가능한데도 복소 근을 반환할 수 있어요. 실수 결과가 선호된다면 realpow, realsqrt, cbrt, 또는 nthroot를 쓰세요.

-x — 부정(negation).

+x — 단항 더하기(unary plus). 이 연산자는 피연산자에 아무 효과가 없어요.

x' — 복소 켤레 전치(complex conjugate transpose). 실수 인자에 대해서는 전치 연산자와 같아요. 복소 인자에 대해서는 다음 표현과 같아요.

conj (x.')

x.' — 전치(transpose).

Octave의 요소별 연산자는 '.'로 시작해서, 다음과 같은 문장에서는 모호함이 생길 수 있어요.

1./m

점이 상수의 일부로 해석될 수도 있고 연산자의 일부로 해석될 수도 있기 때문이에요. 이 충돌을 해결하기 위해 Octave는 그 표현식을 이렇게 입력한 것처럼 취급해요.

(1) ./ m

이렇게가 아니라요:

(1.) / m

이것은 주어진 지점에서 가장 긴 가능한 일치를 선호해 입력을 토큰으로 나누는 Octave 렉서의 일반적인 동작과는 일관성이 없지만, 이 경우에는 더 유용해요.

또한 이진 연산자와 공백의 일부 조합은 함수를 호출하는 명령 구문(Command Syntax) 형태와 명백한 모호함을 만들 수 있어요. Octave가 그 구문을 어떻게 다루는지는 명령 구문과 함수 구문을 참고하세요.

연산자에 대응하는 함수들

다음 함수들은 위 연산자들과 동등해요. 연산자 오버로딩이나 함수형 동등물이 필요할 때 쓰면 돼요.

B = ctranspose (A)A의 복소 켤레 전치를 반환해요. 이 함수와 A'는 동등해요.

y = pagectranspose (A) — N차원 배열 A의 페이지별 복소 켤레 전치를 반환해요. 각 페이지 k에 대해 A(:,:,k)'와 동등해요.

C = ldivide (A, B)AB의 요소별 왼쪽 나눗셈을 반환해요. 이 함수와 A .\ B는 동등해요.

C = minus (A, B) — 이 함수와 A - B는 동등해요.

C = mldivide (A, B)AB의 행렬 왼쪽 나눗셈을 반환해요. 이 함수와 A \ B는 동등해요. 시스템이 정사각형이 아니거나 계수 행렬이 특이하면 최소 노름 해를 계산해요.

C = mpower (A, B)AB제곱한 행렬 거듭제곱 연산을 반환해요. 이 함수와 A ^ B는 동등해요.

C = mrdivide (A, B)AB의 행렬 오른쪽 나눗셈을 반환해요. 이 함수와 A / B는 동등해요. 시스템이 정사각형이 아니거나 계수 행렬이 특이하면 최소 노름 해를 계산해요.

C = mtimes (A, B) / C = mtimes (A1, A2, …) — 입력들의 행렬 곱셈 곱을 반환해요. 이 함수와 A * B는 동등해요. 인자가 더 주어지면 곱셈은 왼쪽에서 오른쪽으로 누적 적용돼요.

(...((A1 * A2) * A3) * ...)

C = plus (A, B) / C = plus (A1, A2, …) — 이 함수와 A + B는 동등해요. 인자가 더 주어지면 합산은 왼쪽에서 오른쪽으로 누적 적용돼요.

(...((A1 + A2) + A3) + ...)

C = power (A, B)AB제곱한 요소별 연산을 반환해요. 이 함수와 A .^ B는 동등해요. 여러 복소 결과가 가능하면 음이 아닌 인자(각도)가 가장 작은 것을 반환해요. 실수 결과가 선호된다면 realpow, realsqrt, cbrt, 또는 nthroot를 쓰세요.

C = rdivide (A, B)AB의 요소별 오른쪽 나눗셈을 반환해요. 이 함수와 A ./ B는 동등해요.

C = times (A, B) / C = times (A1, A2, …) — 입력들의 요소별 곱셈 곱을 반환해요. 이 함수와 A .* B는 동등해요. 인자가 더 주어지면 곱셈은 왼쪽에서 오른쪽으로 누적 적용돼요.

(...((A1 .* A2) .* A3) .* ...)

B = transpose (A)A의 전치를 반환해요. 이 함수와 A.'는 동등해요.

B = pagetranspose (A) — N차원 배열 A의 페이지별 전치를 반환해요. 각 페이지 k에 대해 A(:,:,k).'와 동등해요.

B = uminus (A) — 이 함수와 -A는 동등해요.

B = uplus (A) — 이 함수와 +A는 동등해요.

더 알아보기

  • 요소별 비교 연산자는 비교 연산자 항목에서 다룹니다.
  • 행렬 곱셈의 실제 활용은 행렬 대수 항목을 참고하세요.