이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

spdiags

0이 아닌 대각선 추출 및 희소 띠 행렬과 대각 행렬 생성

설명

예제

Bout = spdiags(A)mxn 행렬 A에서 0이 아닌 대각선을 추출하여 min(m,n)xp 행렬 Bout의 열로 반환합니다. 여기서 p는 0이 아닌 대각선 개수입니다.

예제

[Bout,id] = spdiags(A)A에서 0이 아닌 대각선의 대각선 번호 id도 반환합니다. Bout의 크기는 min(m,n) x length(id)입니다.

예제

Bout = spdiags(A,d)d에서 지정한 A의 대각선을 추출하여 min(m,n)xlength(d) 행렬 Bout의 열로 반환합니다.

예제

S = spdiags(Bin,d,m,n)Bin의 열을 가져와서 d에서 지정한 대각선에 배치하여 mxn 희소 행렬 S를 만듭니다.

예제

S = spdiags(Bin,d,A)d에서 지정한 A의 대각선을 Bin의 열로 대체합니다.

예제

모두 축소

3개의 벡터를 사용하여 삼중대각 행렬을 만들고 행렬 대각선 중 일부 대각선을 변경한 후 대각선을 추출합니다.

1로 구성된 9x1 벡터를 만든 다음, 그 벡터를 사용하여 삼중대각 행렬을 만듭니다. 행렬 요소를 확인합니다.

n = 9;
e = ones(n,1);
A = spdiags([e -2*e e],-1:1,n,n);
full(A)
ans = 9×9

    -2     1     0     0     0     0     0     0     0
     1    -2     1     0     0     0     0     0     0
     0     1    -2     1     0     0     0     0     0
     0     0     1    -2     1     0     0     0     0
     0     0     0     1    -2     1     0     0     0
     0     0     0     0     1    -2     1     0     0
     0     0     0     0     0     1    -2     1     0
     0     0     0     0     0     0     1    -2     1
     0     0     0     0     0     0     0     1    -2

A의 주대각선(d = 0)에 있는 값을 변경합니다.

Bin = abs(-(n-1)/2:(n-1)/2)';
d = 0;
A = spdiags(Bin,d,A);
full(A)
ans = 9×9

     4     1     0     0     0     0     0     0     0
     1     3     1     0     0     0     0     0     0
     0     1     2     1     0     0     0     0     0
     0     0     1     1     1     0     0     0     0
     0     0     0     1     0     1     0     0     0
     0     0     0     0     1     1     1     0     0
     0     0     0     0     0     1     2     1     0
     0     0     0     0     0     0     1     3     1
     0     0     0     0     0     0     0     1     4

마지막으로, A의 대각선을 행렬의 열로 가져옵니다.

Bout = spdiags(A);
full(Bout)
ans = 9×3

     1     4     0
     1     3     1
     1     2     1
     1     1     1
     1     0     1
     1     1     1
     1     2     1
     1     3     1
     0     4     1

행렬에서 0이 아닌 대각선을 추출하고 spdiags의 출력 형식을 검토합니다.

0이 아닌 대각선과 0으로 이루어진 대각선이 모두 포함된 행렬을 만듭니다.

A = [0     5     0    10     0     0
     0     0     6     0    11     0
     3     0     0     7     0    12
     1     4     0     0     8     0
     0     2     5     0     0     9];

행렬에서 0이 아닌 대각선을 추출합니다. 대각선 번호를 반환할 2개 출력값을 지정합니다.

[Bout,d] = spdiags(A)
Bout = 5×4

     0     0     5    10
     0     0     6    11
     0     3     7    12
     1     4     8     0
     2     5     9     0

d = 4×1

    -3
    -2
     1
     3

첫 번째 출력값 Bout의 열에는 A의 0이 아닌 대각선이 포함됩니다. 두 번째 출력값 dA의 0이 아닌 대각선의 인덱스를 나열합니다. A에서 0이 아닌 대각선 중 가장 긴 것은 Bout의 세 번째 열에 있습니다. Bout에서 모든 열 길이를 같아지도록 하기 위해, A의 그 외 0이 아닌 대각선은 Bout에서 대응하는 열에 추가적으로 0을 갖게 됩니다. mxn 행렬(m < n)의 경우 다음 규칙이 적용됩니다.

  • A의 주대각선 아래에 있는 0이 아닌 대각선에 대해서는 (Bout의 처음 두 열에서처럼) 열 상부에 0이 추가됩니다.

  • A의 주대각선 에 있는 0이 아닌 대각선에 대해서는 (Bout의 마지막 열에서처럼) 열 하부에 0이 추가됩니다.

spdiagsBout에 가장 긴 대각선이 반환되지 않더라도 이런 방식으로 Bout을 0으로 채웁니다.

5x5 확률 행렬을 만듭니다.

A = randi(10,5,5)
A = 5×5

     9     1     2     2     7
    10     3    10     5     1
     2     6    10    10     9
    10    10     5     8    10
     7    10     9    10     7

주대각선과 주대각선 바로 위와 바로 아래에 있는 첫 번째 대각선을 추출합니다.

d = [-1 0 1];
Bout = spdiags(A,d)
Bout = 5×3

    10     9     0
     6     3     1
     5    10    10
    10     8    10
     0     7    10

5번째 상부대각선(d = 5)을 추출해 봅니다. A에는 상부대각선이 4개밖에 없으므로, spdiags는 주대각선(d = 0)과 같은 길이의 0을 대각선으로 반환합니다.

B5 = spdiags(A,5)
B5 = 5×1

     0
     0
     0
     0
     0

입력 행렬의 열이 대체하는 대각선보다 길 경우 spdiags가 어떻게 대각선을 만드는지 살펴봅니다.

숫자 1~6으로 구성된 6x7 행렬을 만듭니다.

Bin = repmat((1:6)',[1 7])
Bin = 6×7

     1     1     1     1     1     1     1
     2     2     2     2     2     2     2
     3     3     3     3     3     3     3
     4     4     4     4     4     4     4
     5     5     5     5     5     5     5
     6     6     6     6     6     6     6

spdiags를 사용하여 Bin의 몇몇 열을 대각선으로 갖는 정사각 6x6 행렬을 만듭니다. 대각선의 일부는 요소가 하나 또는 두 개뿐이므로, Bin의 열 크기와 A의 대각선 크기가 일치하지 않습니다.

d = [-4 -2 -1 0 3 4 5];
A = spdiags(Bin,d,6,6);
full(A)
ans = 6×6

     1     0     0     4     5     6
     1     2     0     0     5     6
     1     2     3     0     0     6
     0     2     3     4     0     0
     1     0     3     4     5     0
     0     2     0     4     5     6

Bin에 있는 각 열은 6개 요소를 갖지만, A에서는 주대각선에만 6개 요소가 있습니다. 따라서 A의 다른 모든 대각선에서는 해당 대각선에 맞도록 Bin의 열에 있는 요소를 자릅니다.

spdiags가 대각선을 자르는 방식은 mxn 행렬 A의 크기에 따라 달라집니다. mn인 경우 위 그림과 같이 동작합니다.

  • 주대각선 아래의 대각선은 열의 상부에서부터 요소를 가져옵니다.

  • 주대각선 의 대각선은 열의 하부에서부터 요소를 가져옵니다.

이 동작은 m<n인 경우 다음과 같이 반대가 됩니다.

A = spdiags(Bin,d,5,6);
full(A)
ans = 5×6

     1     0     0     1     1     1
     2     2     0     0     2     2
     3     3     3     0     0     3
     0     4     4     4     0     0
     5     0     5     5     5     0

  • 주대각선 의 대각선은 열의 상부에서부터 요소를 가져옵니다.

  • 주대각선 아래의 대각선은 열의 하부에서부터 요소를 가져옵니다.

입력 인수

모두 축소

입력 행렬입니다. 이 행렬은 항상 그렇지는 않지만 일반적으로 비희소 행렬입니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
복소수 지원 여부:

대각선 번호로, 스칼라 또는 양의 정수로 구성된 벡터로 지정됩니다. 대각선 번호는 다음과 같이 diag와 동일한 규칙을 따릅니다.

  • d < 0은 주대각선 아래쪽이고 d >= -(m-1)을 충족합니다.

  • d = 0은 주대각선을 나타냅니다.

  • d > 0은 주대각선 위쪽이고 d <= (n-1)을 충족합니다.

mxn 행렬 A에는 (m + n - 1)개의 대각선이 있습니다. -(m-1)에서 (n-1) 사이의 인덱스로 이러한 대각선을 벡터 d에 지정합니다. 예를 들어, A가 5x6인 경우, 이 행렬에는 10개의 대각선이 있을 수 있으며, 원하는 대각선을 인덱스 -4, -3, ... 4, 5를 사용하여 벡터 d에 지정할 수 있습니다. 다음 도식은 이러한 대각선 번호 체계를 보여줍니다.

A를 벗어나는 대각선(예: 위 예제의 경우 d = 7)을 지정할 경우 spdiags는 해당 대각선을 모두 0으로 반환합니다.

예: spdiags(A,[3 5])A에서 세 번째 및 다섯 번째 대각선을 추출합니다.

대각선 요소로, 행렬로 지정됩니다. 이 행렬은 항상 그렇지는 않지만 일반적으로 비희소 행렬입니다. spdiags는 지정한 A의 대각선을 Bin의 열을 사용하여 대체합니다. 요청된 출력값의 크기가 mxn일 경우 Bin에는 min(m,n)개의 열이 있어야 합니다.

S = spdiags(Bin,d,m,n) 구문에서 Bin의 열 요소가 대체하려는 대각선의 요소보다 많고 m >= n이면, spdiags는 상부대각선 요소를 Bin의 열의 에서부터 가져오고 하부대각선 요소를 Bin의 열의 에서부터 가져옵니다. 하지만 m < n이면, 상부대각선 요소를 Bin의 열의 에서부터 가져오고 하부대각선 요소를 열의 에서부터 가져옵니다. 이 동작에 대한 예는 서로 다른 크기의 열과 대각선 항목을 참조하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
복소수 지원 여부:

차원 크기로, 음이 아닌 정수 스칼라로 지정됩니다. spdiags는 이러한 입력값을 사용하여 생성할 행렬의 크기를 결정합니다.

예: spdiags(Bin,d,300,400)은 지정한 대각선 dB의 열을 배치한 300x400 행렬을 생성합니다.

출력 인수

모두 축소

대각선 요소로, 비희소 행렬로 반환됩니다. Bout의 열에는 A에서 추출한 대각선이 포함됩니다. A를 벗어나는 위치에 대응하는 요소는 Bout에서 모두 0으로 설정됩니다.

대각선 번호로, 열 벡터로 반환됩니다. 대각선 번호 체계에 대한 설명은 d를 참조하십시오.

출력 행렬 S는 다음과 같은 형식으로 생성됩니다.

  • S = spdiags(Bin,d,A)의 경우, 지정한 A의 대각선이 Bin에 있는 열로 바뀌어 S가 생성됩니다.

  • S = spdiags(Bin,d,m,n)의 경우, d가 지정하는 대각선에 Bin의 열이 배치되어 mxn 희소 행렬 S가 생성됩니다.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

참고 항목

|

R2006a 이전에 개발됨