We’re halfway there!
The past two weeks were supposed to be for implementing Matrices. But as I mentioned in the previous post, things got complicated with evalf methods, and I could not start working on the Matrices. This week PR #987 was merged up for evalf CWrappers. (The spec for the Ruby Wrapper needs some changes, which I have kept aside for now)
In SymEngine, matrices are of two forms, the DenseMatrix and the SparseMatrix. I have implemented the following constructors for them:
mat = SymEngine::DenseMatrix.new() mat = SymEngine::DenseMatrix.new(SymEngine::DenseMatrix) mat = SymEngine::DenseMatrix.new(Array) mat = SymEngine::DenseMatrix.new(no_rows, no_columns) mat = SymEngine::SparseMatrix.new() mat = SymEngine::SparseMatrix.new(no_rows, no_columns)
Apart from that, for the DenseMatrix, the following methods were wrapped:
DenseMatrix.get(row, col) DenseMatrix.set(row, col, SymEngine::Basic) DenseMatrix.inv DenseMatrix.det DenseMatrix.transpose DenseMatrix.submatrix(row_start, col_start, row_end, col_end, row_step, col_step) DenseMatrix.rows DenseMatrix.cols + operator for Matrix and Scalar addition * operator for Matrix and Scalar addition DenseMatrix.to_s DenseMatrix.inspect
Soon to be wrapped are:
DenseMatrix.LU DenseMatrix.LDLDenseMatrix.LU_solve # (to solve Ax = B type equations with LU decomposition) DenseMatrix.FFLU # (fraction free LU) DenseMatrix.FFLDU # (fraction free LDU)
This week was really nice for me in getting significant parts of the Matrices done,and with the luck continuing I will be able to wrap the necessary methods for SparseMatrix, get done with the tests and finish the Matrix part within the coming week, putting me back in track with the time-line.
Wish me luck!