다음: 범위, 상위 문서: 수치 자료형   [차례][찾아보기]


4.1 행렬

옥타브에서 행렬 값을 정의하기는 쉬운 일입니다. 행렬 크기는 자동으로 정해지기 때문에 행렬 차원을 명시할 필요는 없습니다. 아래 표현식은

a = [1, 2; 3, 4]

아래와 같은 행렬을 만듭니다.


        /      \
        | 1  2 |
  a  =  |      |
        | 3  4 |
        \      /

행렬 원소는 여러 조각을 섞었을 때에 차원이 직관적으로 적용되도록 임의의 표현식이 될 수 있습니다. 예를 들어, 위 행렬을 아래와 같이 표현식에 넣으면

[ a, a ]

아래 행렬을 만듭니다.

ans =

  1  2  1  2
  3  4  3  4

하지만 아래 표현식은

[ a, 1 ]

오류를 출력합니다.

error: number of rows must match (1 != 2) near line 13, column 6

(입력한 표현식이 13번째 줄에 입력되었다는 점도 보이죠.)

옥타브는 행렬 표현식의 범위를 정하는 대괄호 속 문맥을 살펴, 띄어쓰기를 원소로 변환하고, 새 줄 문자로 열을 나눌지 아니면 단순히 무시할지를 결정합니다. 그래서 아래와 같은 표현식도 작동합니다.

a = [ 1 2
      3 4 ]

그러나 혼란을 야기할 만한 요소 일부가 남아 있습니다. 아래 표현식에서

[ 1 - 1 ]

-’는 이항 연산자로 다루어져 해가 스칼라 0이지만, 아래 표현식에서

[ 1 -1 ]

-’은 단항 연산자로 다루어져 해가 벡터 [ 1, -1 ]입니다. 비슷하게 아래 표현식은

[ sin (pi) ]

아래와 같이 해석되고

[ sin, (pi) ]

sin 함수가 매개변수 없이 호출되어 오류가 납니다. 이런 문제를 피하려면, sin와 그 매개변수의 여는 괄호 사이를 띄우지 않던가 표현식을 괄호로 묶어야 합니다.

[ (sin (pi)) ]

작은 따옴표(‘'’ 전치 행렬 연산자와 문자열 범위 지정에 사용)로 묶인 공백도 혼란을 야기합니다. a = 1이라고 치면, 아래 표현식은

[ 1 a' ]

작은 따옴표가 전치 행렬 연산자로 다루어져 결과가 [ 1, 1 ]이지만, 아래 표현식은

[ 1 a ' ]

오류가 생성됩니다.

parse error:

  syntax error

>>> [ 1 a ' ]
              ^

유효한 표현식을 분석할 때에 위와 같이 하지 않으면 문제가 생기기 때문입니다.

[ a 'foo' ]

명확하게 행렬의 행과 렬을 구분하려면, 쉼표와 쌍반점을 꼭 써야 합니다.

행렬 원소의 최대 개수는 옥타브가 번역될 때에 고정됩니다. 허용되는 개수는 함수 sizemax로 확인합니다. 기기의 막기억장치 용량 등 다른 요인에 의해 행렬의 최대 크기가 기본보다 작을 수 있습니다.

sizemax ()

가능한 배열의 최대 크기를 반환합니다.

옥타브가 64두값 체계로 번역됐다면, 반환 값이 int64에 속하고, 그 이하면 반환값이 int32에 속합니다. 배열의 최대 크기는 intmax에서 반환하는 해당 변수 분류에서 가능한 최대 크기보다 조금 작을 수 있습니다.

같이 보기: intmax.

행렬이나 행렬 변수를 입력하면 깔끔하게 오와 열을 맞춘 행렬이 출력됩니다. 행이 화면에 담지 못할 정도로 많으면, 행렬을 분할하여 열을 출력하기 전에 머리를 보여줍니다. 아래 함수를 사용하여 출력 서식을 정합니다.

= output_precision ()
옛_값 = output_precision (새_값)
output_precision (새_값, "local")

수치 출력 표기에서 유효 숫자의 최소 개수를 지정하는 내부 변수를 조회 또는 설정합니다.

output_precision의 값 설정과 상관없이, 정밀도를 표시하는 숫자 개수는 배정도 값은 16개, 단정도 값은 7개로 제한됩니다.

함수 안에서 "local" 선택지를 넣어 부르면, 함수와 함수가 부른 종속 절차의 변수가 지역적으로 바뀝니다. 함수가 종료되면 원래 변숫값이 되돌아옵니다.

같이 보기: format, fixed_point_format.

output_precision에 다른 값을 사용하여 표시 범위를 넓힌 꼴을 만들 수 있습니다. format 함수를 사용하여 적절한 조합을 만듭니다. 기본 입출력을 보십시오.

= split_long_rows ()
옛_값 = split_long_rows (새_값)
split_long_rows (새_값, "local")

명령 처리기 창에 행렬의 행을 보여줄 때에 분리할지를 제어하는 내부 변수를 조회 또는 설정합니다.

행을 분리하면, 창 너비 제한에 맞게끔 행렬 부분이 나열되어 출력할 수 있으며, 각 행은 꼬리표가 붙어 현재 어느 열이 출력되었는지 쉽게 파악할 수 있습니다. 예시입니다.

octave:13> rand (2,10)
ans =

 Columns 1 through 6:

  0.75883  0.93290  0.40064  0.43818  0.94958  0.16467
  0.75697  0.51942  0.40031  0.61784  0.92309  0.40201

 Columns 7 through 10:

  0.90174  0.11854  0.72313  0.73326
  0.44672  0.94303  0.56564  0.82150

함수 안에서 "local" 선택지를 넣어 부르면, 함수와 함수가 부른 종속 절차의 변수가 지역적으로 바뀝니다. 함수가 종료되면 원래 변숫값이 되돌아옵니다.

같이 보기: format.

값이 너무 크거나 너무 작으면, 자동으로 지수 표기법으로 표기합니다. 이는 행렬 값 중 여러 두드러진 수치도 표시하기 위함입니다. 행렬 내 모든 값이 고정 소수점으로 표기되기를 원하면 내부 변수 fixed_point_format를 0이 아닌 값으로 설정해야 합니다. 다만, 이 경우에는 출력 내용을 오해하기 쉽기 떄문에 권장하지 않습니다.

= fixed_point_format ()
옛_값 = fixed_point_format (새_값)
fixed_point_format (새_값, "local")

행렬 출력에 크기 조정 형식을 사용할지를 결정하는 내부 변수를 조회 또는 설정합니다.

크기 조정 형식은 행렬에서 가장 큰 원소를 원소 간 비례를 유지한채 한 자리수로 만드는 크기 조정 계수를 출력 첫 줄에 표기합니다. 예시입니다.

fixed_point_format (true)
logspace (1, 7, 5)'
ans =

  1.0e+07  *

  0.00000
  0.00003
  0.00100
  0.03162
  1.00000

실제로는 1이어도, 첫 번째 값이 0으로 표시됨에 유의하십시오. 혼란의 여지가 있으니 fixed_point_format 활성화에 주의하십시오.

함수 안에서 "local" 선택지를 넣어 부르면, 함수와 함수가 부른 종속 절차의 변수가 지역적으로 바뀝니다. 함수가 종료되면 원래 변숫값이 되돌아옵니다.

같이 보기: format, output_precision.


다음: 범위, 상위 문서: 수치 자료형   [차례][찾아보기]