Class: Matrix

### Home Classes Methods

### In Files

- lib/classifier-reborn/extensions/vector.rb

### Parent

Object

### Methods

- ::diag
- #SV_decomp
- #[]=

### Files

- LICENSE

### Class/Module Index

Quicksearch

- ClassifierReborn
- ClassifierReborn::Bayes
- ClassifierReborn::CategoryNamer
- ClassifierReborn::ContentNode
- ClassifierReborn::Hasher
- ClassifierReborn::LSI
- ClassifierReborn::Summarizer
- ClassifierReborn::WordList
- GSL
- GSL::Matrix
- GSL::Vector
- Matrix

No matching classes.

# Matrix

### Public Class Methods

diag(s) click to toggle source

    # File lib/classifier-reborn/extensions/vector.rb, line 9
    def Matrix.diag(s)
       Matrix.diagonal(*s)
    end

### Public Instance Methods

SV_decomp(maxSweeps = 20) click to toggle source

    # File lib/classifier-reborn/extensions/vector.rb, line 15
    def SV_decomp(maxSweeps = 20)
      if self.row_size >= self.column_size
        q = self.trans * self
      else
        q = self * self.trans
      end

      qrot    = q.dup
      v       = Matrix.identity(q.row_size)
      azrot   = nil
      mzrot   = nil
      cnt     = 0
      s_old   = nil
      mu      = nil

      while true do
        cnt += 1
        for row in (0...qrot.row_size-1) do
          for col in (1..qrot.row_size-1) do
            next if row == col
            h = Math.atan((2 * qrot[row,col])/(qrot[row,row]-qrot[col,col]))/2.0
            hcos = Math.cos(h)
            hsin = Math.sin(h)
            mzrot = Matrix.identity(qrot.row_size)
            mzrot[row,row] = hcos
            mzrot[row,col] = -hsin
            mzrot[col,row] = hsin
            mzrot[col,col] = hcos
            qrot = mzrot.trans * qrot * mzrot
            v = v * mzrot
          end
        end
        s_old = qrot.dup if cnt == 1
        sum_qrot = 0.0
        if cnt > 1
          qrot.row_size.times do |r|
            sum_qrot += (qrot[r,r]-s_old[r,r]).abs if (qrot[r,r]-s_old[r,r]).abs > 0.001
          end
          s_old = qrot.dup
        end
        break if (sum_qrot <= 0.001 and cnt > 1) or cnt >= maxSweeps
      end # of do while true
      s = []
      qrot.row_size.times do |r|
        s << Math.sqrt(qrot[r,r])
      end
      #puts "cnt = #{cnt}"
      if self.row_size >= self.column_size
        mu = self *  v * Matrix.diagonal(*s).inverse
        return [mu, v, s]
      else
        puts v.row_size
        puts v.column_size
        puts self.row_size
        puts self.column_size
        puts s.size

        mu = (self.trans * v *  Matrix.diagonal(*s).inverse)
        return [mu, v, s]
      end
    end

[]=(i,j,val) click to toggle source

    # File lib/classifier-reborn/extensions/vector.rb, line 76
    def []=(i,j,val)
      @rows[i][j] = val
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.