Skip to content

Commit e00ff7f

Browse files
committed
LDL, LU_solve, FFLU, FFLDU working
1 parent 4c40373 commit e00ff7f

File tree

3 files changed

+87
-4
lines changed

3 files changed

+87
-4
lines changed

ext/symengine/ruby_matrix.c

Lines changed: 81 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,23 +427,102 @@ VALUE cmatrix_dense_LU(VALUE self)
427427
return result;
428428
}
429429

430-
/*VALUE cmatrix_dense_LDL(VALUE self)
430+
VALUE cmatrix_dense_LDL(VALUE self)
431431
{
432+
CDenseMatrix *this;
433+
Data_Get_Struct(self, CDenseMatrix, this);
434+
435+
CDenseMatrix *cresult_l;
436+
VALUE result_l;
437+
cresult_l = dense_matrix_new();
438+
439+
CDenseMatrix *cresult_d;
440+
VALUE result_d;
441+
cresult_d = dense_matrix_new();
442+
443+
dense_matrix_LDL(cresult_l, cresult_d, this);
444+
445+
result_l = Data_Wrap_Struct(c_dense_matrix, NULL, dense_matrix_free,
446+
cresult_l);
447+
result_d = Data_Wrap_Struct(c_dense_matrix, NULL, dense_matrix_free,
448+
cresult_d);
449+
450+
VALUE result;
451+
result = rb_ary_new();
452+
rb_ary_push(result, result_l);
453+
rb_ary_push(result, result_d);
432454

455+
return result;
433456
}
434457

435458
VALUE cmatrix_dense_LU_solve(VALUE self, VALUE b)
436459
{
460+
CDenseMatrix *this;
461+
Data_Get_Struct(self, CDenseMatrix, this);
462+
463+
CDenseMatrix *cresult;
464+
VALUE result;
465+
cresult = dense_matrix_new();
466+
467+
CDenseMatrix *coperand;
468+
Data_Get_Struct(b, CDenseMatrix, coperand);
437469

470+
dense_matrix_LU_solve(cresult, this, coperand);
471+
472+
result = Data_Wrap_Struct(c_dense_matrix, NULL, dense_matrix_free,
473+
cresult);
474+
return result;
438475
}
439476

440477
VALUE cmatrix_dense_FFLU(VALUE self)
441478
{
479+
CDenseMatrix *this;
480+
Data_Get_Struct(self, CDenseMatrix, this);
481+
482+
CDenseMatrix *cresult_lu;
483+
VALUE result_lu;
484+
cresult_lu = dense_matrix_new();
485+
486+
dense_matrix_FFLU(cresult_lu, this);
487+
488+
result_lu = Data_Wrap_Struct(c_dense_matrix, NULL, dense_matrix_free,
489+
cresult_lu);
442490

491+
return result_lu;
443492
}
444493

445494

446495
VALUE cmatrix_dense_FFLDU(VALUE self)
447496
{
497+
CDenseMatrix *this;
498+
Data_Get_Struct(self, CDenseMatrix, this);
499+
500+
CDenseMatrix *cresult_l;
501+
VALUE result_l;
502+
cresult_l = dense_matrix_new();
503+
504+
CDenseMatrix *cresult_d;
505+
VALUE result_d;
506+
cresult_d = dense_matrix_new();
507+
508+
CDenseMatrix *cresult_u;
509+
VALUE result_u;
510+
cresult_u = dense_matrix_new();
511+
512+
dense_matrix_LDL(cresult_l, cresult_d, this);
513+
514+
result_l = Data_Wrap_Struct(c_dense_matrix, NULL, dense_matrix_free,
515+
cresult_l);
516+
result_d = Data_Wrap_Struct(c_dense_matrix, NULL, dense_matrix_free,
517+
cresult_d);
518+
result_u = Data_Wrap_Struct(c_dense_matrix, NULL, dense_matrix_free,
519+
cresult_u);
448520

449-
}*/
521+
VALUE result;
522+
result = rb_ary_new();
523+
rb_ary_push(result, result_l);
524+
rb_ary_push(result, result_d);
525+
rb_ary_push(result, result_u);
526+
527+
return result;
528+
}

ext/symengine/ruby_matrix.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ VALUE cmatrix_dense_cols(VALUE self);
2323
VALUE cmatrix_dense_add(VALUE self, VALUE operand);
2424
VALUE cmatrix_dense_mul(VALUE self, VALUE operand);
2525
VALUE cmatrix_dense_LU(VALUE self);
26-
/*VALUE cmatrix_dense_LDL(VALUE self);
26+
VALUE cmatrix_dense_LDL(VALUE self);
2727
VALUE cmatrix_dense_LU_solve(VALUE self, VALUE b);
2828
VALUE cmatrix_dense_FFLU(VALUE self);
29-
VALUE cmatrix_dense_FFLDU(VALUE self);*/
29+
VALUE cmatrix_dense_FFLDU(VALUE self);
3030

3131
void cmatrix_sparse_free(void *ptr);
3232
VALUE cmatrix_sparse_alloc(VALUE klass);

ext/symengine/symengine.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,10 @@ void Init_symengine()
248248
rb_define_method(c_dense_matrix, "+", cmatrix_dense_add, 1);
249249
rb_define_method(c_dense_matrix, "*", cmatrix_dense_mul, 1);
250250
rb_define_method(c_dense_matrix, "LU", cmatrix_dense_LU, 0);
251+
rb_define_method(c_dense_matrix, "LDL", cmatrix_dense_LDL, 0);
252+
rb_define_method(c_dense_matrix, "LU_solve", cmatrix_dense_LU_solve, 1);
253+
rb_define_method(c_dense_matrix, "FFLU", cmatrix_dense_FFLU, 0);
254+
rb_define_method(c_dense_matrix, "FFLDU", cmatrix_dense_FFLDU, 0);
251255

252256

253257
// SparseMatrix Methods

0 commit comments

Comments
 (0)