Sha256: 35c4e76739ca5db8d546d714978e2ca3582d9ef1f69fb711df3a89f0f9e7677a

Contents?: true

Size: 1.51 KB

Versions: 5

Compression:

Stored size: 1.51 KB

Contents

# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Numo::Linalg do
  describe 'cholesky' do
    let(:m) { 5 }
    let(:mat_a) do
      a = rand_symmetric_mat(m)
      a.dot(a.transpose)
    end
    let(:mat_b) do
      b = rand_hermitian_mat(m)
      b.dot(b.transpose.conj)
    end

    it 'raises ShapeError given a vector' do
      expect { described_class.cholesky(Numo::DFloat.new(3).rand) }.to raise_error(Numo::NArray::ShapeError)
    end

    it 'raises ShapeError given a rectangular matrix' do
      expect { described_class.cholesky(Numo::DFloat.new(2, 4).rand) }.to raise_error(Numo::NArray::ShapeError)
    end

    it 'raises ArgumentError given an invalid uplo option' do
      expect { described_class.cholesky(mat_a, uplo: 'A') }.to raise_error(ArgumentError)
    end

    it 'calculates the cholesky factorization of a symmetric positive-definite matrix' do
      mat_u = described_class.cholesky(mat_a, uplo: 'U')
      expect((mat_a - mat_u.transpose.dot(mat_u)).abs.max).to be < ERR_TOL
      mat_l = described_class.cholesky(mat_a, uplo: 'L')
      expect((mat_a - mat_l.dot(mat_l.transpose)).abs.max).to be < ERR_TOL
    end

    it 'calculates the cholesky factorization of a hermitian positive-definite matrix' do
      mat_u = described_class.cholesky(mat_b, uplo: 'U')
      expect((mat_b - mat_u.transpose.conj.dot(mat_u)).abs.max).to be < ERR_TOL
      mat_l = described_class.cholesky(mat_b, uplo: 'L')
      expect((mat_b - mat_l.dot(mat_l.transpose.conj)).abs.max).to be < ERR_TOL
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
numo-linalg-0.1.7 spec/linalg/function/cholesky_spec.rb
numo-linalg-0.1.6 spec/linalg/function/cholesky_spec.rb
numo-linalg-0.1.5 spec/linalg/function/cholesky_spec.rb
numo-linalg-0.1.4 spec/linalg/function/cholesky_spec.rb
numo-linalg-0.1.3 spec/linalg/function/cholesky_spec.rb