Ruby2.2 그럼 그게 죽을수록 사용하기 쉬워진다!

그렇습니다.

....

아니 더 전해야 할 물건이 다른 곳이라는 분노가 지금도 들려올 것 같습니다만...



"죄송합니다. 오늘은 행렬을 소개 해주세요."

많은 사람들은 관심이 없지만,

Ruby에는 행렬이나 벡터를 다루는 Matrix 클래스라는 것이 있었고,

Ruby 2.2에는 다양한 새로운 기능과 버그 fix가 포함되어 있습니다.

「행렬 벡터 연산한다면 Ruby군요」



라고 말할 정도의 물건이 되는 것이 아닐까요?

오늘은 Ruby 2.2 이전에있는 것을 포함하여 Matrix

사용하지 않으면 아깝다! 대단한 Matrix, 즐겁게 배우자!



1. LU 분해



LU 분해가 가능하다는 것은 ...

n 원래 연립 방정식을 매우 쉽게 풀 수 있습니다.


# 2x + y = 2
# x + 2y = 3

Matrix[
        [2, 1],
        [1, 2]
      ].lup.solve([2, 3])

# => Vector[(1/3), (4/3)]


멋진 건?

(2.1에도 있습니다.)

2. 라플라스 전개



이것은 추구하고 싶은 다양한 수치 계산 소프트웨어를 사용해 왔지만,

라플라스 전개를 표준으로 얹고 있는 것은 많지 않은 것은?

(그에 비해 사용 빈도 높음)

게다가

전개에 사용하는 행, 열의 요소는 숫자에 한정되지 않고,
Matrix가 정의 된 객체가 들어있는 행이나 열에 대해 확장 할 수 있습니다.

쓸데없이 스게.

그래서 이런 일을 할 수 있습니다.


v1 = Vector[1, 0]
v2 = Vector[0, 1]

Matrix[
        [v1, v2],
        [2, 3]
      ].laplace_expansion(row: 0)

#=> Vector[3, -2]
* 에서 row: n 따라, n行 에서 column: n 따라 배포라는 인터페이스의 장점.

멋진 건?

(2.2에 들어갈 것 같습니다.)

3. 여인자 전개



매우 자주 사용되는 연산 중 하나 인 요인 확장이 마침내 구현되었습니다.
Matrix.diagonal(9, 5, -3, 4).cofactor(1, 1)
# => -108

통계 해석으로 분산 공분산 행렬을 취급할 때 등 편리합니다네!

(2.2에 들어갈 것 같습니다.)

4. 여인자 행렬



이것은 패치를보고있는 동안 아직 모르겠지만 넣고 싶습니다.
Matrix[ 
        [7, 6],
        [3, 9]
      ].adjugate

# => 9 -6
#    -3 7


행렬식에 대한 미분 연산과 역행렬과의 관계와 같은 중요한 상당한 특성을 갖는 연산 중 하나입니다.

(제가 제대로하면 2.2로 들어갈 것 같습니다.)

5. 스펙트럼 분해



애노, 대각 행렬과 고유 값 행렬로 나누는 것입니다.

매우 중요합니다.
A = Matrix[
            [-1, 2], 
            [-6, 6]
          ].eigensystem

P, D, P_inv = A.eigensystem

(P * D * P_inv).round(5) == A

#=> true

스테키

(Ruby2.1에도 들어 있다)

6. 행렬식이나 역행렬 등 기타 기본 연산도 당연



특히 언급 할 필요는 없지만 기본적인 선형 연산은 대부분 있습니다.

# 行列式
Matrix[
        [7, 6],
        [3, 9]
      ].det
# => 45

# 階数
Matrix[
        [7, 6],
        [3, 9]
      ].rank

# => 2

# 逆行列
A = Matrix[
            [7, 6],
            [3, 9]
          ]

A * A.inv == Matrix.I(2)
# => true

v1 = Vector[1,2,3]
v2 = Vector[4,5,6]

# 内積
v1.inner_product(v2)
# => 32

# 外積
v1.cross_product(v2)
# => Vector[-3, 6, -3]

...


7. 복소 행렬도 당연



지금까지 이야기 한 것은 모두 복소 행렬에 대해서도 말할 수 있습니다! !

(Ruby의 복소수는 수수하게 대단하다)

에르미트 전치와 유니타리 행렬이 낙승에 대처할 수 있습니다.


A = Matrix[
            [2i, 3],
            [2, 5i]
          ]
A.conjugate
# => -2i 3
#    2 -5i


A = Matrix[
            [0, (0+1i)],
            [(0+1i), 0]
          ]

A.unitary?
# => true

  • Ruby2.1부터 복소수를 n列 와 같은 형식으로 취급할 수 있다(!!

  • 그런데 이런 멋진 Ruby 2.2는 올해의 12월의 크리스마스? 출시 예정입니다.

    자전으로 빌드하면 실제로 괴롭히는 일도 할 수 있으므로, 꼭 왕따 쓰러뜨려 보면 좋습니다!
    (미리 보기 기간?

    행렬에 한정하지 않고 더 멋진 물건이 많이 들어가 있으므로 그 근처도 마음이 가면 소개합니다!

    나중에 행렬이나 2i(커미터도 누구도 아닌 나이지만 ....이 근처는 더 고조하고 싶습니다.)

    좋은 밤.

    좋은 웹페이지 즐겨찾기