ruby-mpfi 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/Manifest.txt +0 -4
- data/README.rdoc +21 -25
- data/Rakefile +2 -1
- data/ext/mpfi/ruby_mpfi.c +242 -102
- data/ext/mpfi_complex/mpfi/ruby_mpfi_complex.c +34 -14
- data/ext/mpfi_matrix/mpfi/func_mpfi_matrix.c +2 -86
- data/ext/mpfi_matrix/mpfi/func_mpfi_matrix.h +0 -6
- data/ext/mpfi_matrix/mpfi/ruby_mpfi_matrix.c +99 -35
- data/lib/mpfi/version.rb +1 -3
- data/ruby-mpfi.gemspec +8 -5
- data/spec/mpfi/mpfi_math_functions_spec.rb +2 -2
- metadata +14 -7
- data/ext/mpfi/make_c_source.rb +0 -115
- data/ext/mpfi/yasnippet_mpfi.el +0 -44
- data/ext/mpfi_matrix/mpfi/func_ruby_mpfi_complex.h +0 -35
- data/ext/mpfi_matrix/mpfi/ruby_mpfi_complex.h +0 -15
@@ -14,10 +14,8 @@ static VALUE r_mpfi_complex_alloc (VALUE self){
|
|
14
14
|
return self;
|
15
15
|
}
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
MPFIComplex *ptr;
|
20
|
-
r_mpfi_get_complex_struct(ptr, self);
|
17
|
+
static void r_mpfi_complex_set_initial_value(MPFIComplex *ptr, int argc, VALUE *argv)
|
18
|
+
{
|
21
19
|
mpfi_complex_init(ptr);
|
22
20
|
switch (argc) {
|
23
21
|
case 0:
|
@@ -34,7 +32,24 @@ static VALUE r_mpfi_complex_initialize (int argc, VALUE *argv, VALUE self){
|
|
34
32
|
default:
|
35
33
|
rb_raise(rb_eArgError, "Number of MPF::Complex.new arguments must be lesser than three.");
|
36
34
|
break;
|
37
|
-
}
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
/* Return new MPFI::Complex instance. The same arguments as MPFI::Complex.new is acceptable. */
|
39
|
+
static VALUE r_mpfi_complex_global_new(int argc, VALUE *argv, VALUE self)
|
40
|
+
{
|
41
|
+
MPFIComplex *ptr;
|
42
|
+
VALUE val;
|
43
|
+
r_mpfi_make_complex_struct(val, ptr);
|
44
|
+
r_mpfi_complex_set_initial_value(ptr, argc, argv);
|
45
|
+
return val;
|
46
|
+
}
|
47
|
+
|
48
|
+
/* Initialization function for MPF::Complex. */
|
49
|
+
static VALUE r_mpfi_complex_initialize (int argc, VALUE *argv, VALUE self){
|
50
|
+
MPFIComplex *ptr;
|
51
|
+
r_mpfi_get_complex_struct(ptr, self);
|
52
|
+
r_mpfi_complex_set_initial_value(ptr, argc, argv);
|
38
53
|
return Qtrue;
|
39
54
|
}
|
40
55
|
|
@@ -48,7 +63,7 @@ static VALUE r_mpfi_complex_initialize_copy (VALUE self, VALUE other){
|
|
48
63
|
return Qtrue;
|
49
64
|
}
|
50
65
|
|
51
|
-
|
66
|
+
/* Return real part. */
|
52
67
|
static VALUE r_mpfi_complex_real (VALUE self){
|
53
68
|
MPFIComplex *ptr_self;
|
54
69
|
r_mpfi_get_complex_struct(ptr_self, self);
|
@@ -59,6 +74,7 @@ static VALUE r_mpfi_complex_real (VALUE self){
|
|
59
74
|
return ret;
|
60
75
|
}
|
61
76
|
|
77
|
+
/* Return imaginary part. */
|
62
78
|
static VALUE r_mpfi_complex_imaginary (VALUE self){
|
63
79
|
MPFIComplex *ptr_self;
|
64
80
|
r_mpfi_get_complex_struct(ptr_self, self);
|
@@ -69,6 +85,7 @@ static VALUE r_mpfi_complex_imaginary (VALUE self){
|
|
69
85
|
return ret;
|
70
86
|
}
|
71
87
|
|
88
|
+
/* If _p1_ is 0, return real part. If _p1_ is 1, return imaginary part. */
|
72
89
|
static VALUE r_mpfi_complex_element (VALUE self, VALUE arg){
|
73
90
|
MPFIComplex *ptr_self;
|
74
91
|
r_mpfi_get_complex_struct(ptr_self, self);
|
@@ -89,6 +106,7 @@ static VALUE r_mpfi_complex_element (VALUE self, VALUE arg){
|
|
89
106
|
return ret;
|
90
107
|
}
|
91
108
|
|
109
|
+
/* Return conjugate complex number. */
|
92
110
|
static VALUE r_mpfi_complex_conjugate (VALUE self){
|
93
111
|
MPFIComplex *ptr_self, *ptr_ret;
|
94
112
|
r_mpfi_get_complex_struct(ptr_self, self);
|
@@ -109,7 +127,7 @@ static VALUE r_mpfi_complex_conjugate (VALUE self){
|
|
109
127
|
/* } */
|
110
128
|
|
111
129
|
|
112
|
-
|
130
|
+
/* String for inspect. */
|
113
131
|
static VALUE r_mpfi_complex_inspect(VALUE self){
|
114
132
|
MPFIComplex *ptr_s;
|
115
133
|
r_mpfi_get_complex_struct(ptr_s, self);
|
@@ -122,7 +140,7 @@ static VALUE r_mpfi_complex_inspect(VALUE self){
|
|
122
140
|
return ret_val;
|
123
141
|
}
|
124
142
|
|
125
|
-
/* Return array which
|
143
|
+
/* Return array including strings which the elements is converted to by _p1_. */
|
126
144
|
static VALUE r_mpfi_complex_str_ary(VALUE self, VALUE format_str){
|
127
145
|
MPFIComplex *ptr_self;
|
128
146
|
r_mpfi_get_complex_struct(ptr_self, self);
|
@@ -137,8 +155,7 @@ static VALUE r_mpfi_complex_str_ary(VALUE self, VALUE format_str){
|
|
137
155
|
return rb_ary_new4(2, ret_val);
|
138
156
|
}
|
139
157
|
|
140
|
-
|
141
|
-
|
158
|
+
/* Return _self_ + _p1_.*/
|
142
159
|
static VALUE r_mpfi_complex_add (VALUE self, VALUE other){
|
143
160
|
MPFIComplex *ptr_self, *ptr_other, *ptr_ret;
|
144
161
|
r_mpfi_get_complex_struct(ptr_self, self);
|
@@ -149,6 +166,7 @@ static VALUE r_mpfi_complex_add (VALUE self, VALUE other){
|
|
149
166
|
return ret;
|
150
167
|
}
|
151
168
|
|
169
|
+
/* Return _self_ - _p1_.*/
|
152
170
|
static VALUE r_mpfi_complex_sub (VALUE self, VALUE other){
|
153
171
|
MPFIComplex *ptr_self, *ptr_other, *ptr_ret;
|
154
172
|
r_mpfi_get_complex_struct(ptr_self, self);
|
@@ -159,6 +177,7 @@ static VALUE r_mpfi_complex_sub (VALUE self, VALUE other){
|
|
159
177
|
return ret;
|
160
178
|
}
|
161
179
|
|
180
|
+
/* Return _self_ * _p1_.*/
|
162
181
|
static VALUE r_mpfi_complex_mul (VALUE self, VALUE other){
|
163
182
|
MPFIComplex *ptr_self, *ptr_other, *ptr_ret;
|
164
183
|
r_mpfi_get_complex_struct(ptr_self, self);
|
@@ -169,6 +188,7 @@ static VALUE r_mpfi_complex_mul (VALUE self, VALUE other){
|
|
169
188
|
return ret;
|
170
189
|
}
|
171
190
|
|
191
|
+
/* Return _self_ / _p1_.*/
|
172
192
|
static VALUE r_mpfi_complex_div (VALUE self, VALUE other){
|
173
193
|
MPFIComplex *ptr_self, *ptr_other, *ptr_ret;
|
174
194
|
r_mpfi_get_complex_struct(ptr_self, self);
|
@@ -180,16 +200,16 @@ static VALUE r_mpfi_complex_div (VALUE self, VALUE other){
|
|
180
200
|
}
|
181
201
|
|
182
202
|
|
183
|
-
|
184
|
-
|
185
203
|
void Init_complex(){
|
186
|
-
|
204
|
+
VALUE tmp_mpfi_class = rb_define_class("MPFI", rb_cNumeric);
|
187
205
|
|
206
|
+
r_mpfi_complex = rb_define_class_under(tmp_mpfi_class, "Complex", rb_cObject);
|
207
|
+
|
208
|
+
rb_define_singleton_method(r_mpfi_complex, "Complex", r_mpfi_complex_global_new, -1);
|
188
209
|
rb_define_alloc_func(r_mpfi_complex, r_mpfi_complex_alloc);
|
189
210
|
rb_define_private_method(r_mpfi_complex, "initialize", r_mpfi_complex_initialize, -1);
|
190
211
|
rb_define_private_method(r_mpfi_complex, "initialize_copy", r_mpfi_complex_initialize_copy, 1);
|
191
212
|
|
192
|
-
|
193
213
|
rb_define_method(r_mpfi_complex, "real", r_mpfi_complex_real, 0);
|
194
214
|
rb_define_method(r_mpfi_complex, "imaginary", r_mpfi_complex_imaginary, 0);
|
195
215
|
rb_define_method(r_mpfi_complex, "element", r_mpfi_complex_element, 1);
|
@@ -582,7 +582,7 @@ int mpfi_square_matrix_lu_decomp (MPFIMatrix *ret, int *indx, MPFIMatrix *x){
|
|
582
582
|
return ret_val;
|
583
583
|
}
|
584
584
|
|
585
|
-
void mpfi_2d_square_matrix_determinant(MPFI *det, MPFIMatrix *x){
|
585
|
+
static void mpfi_2d_square_matrix_determinant(MPFI *det, MPFIMatrix *x){
|
586
586
|
MPFI *tmp;
|
587
587
|
r_mpfi_temp_alloc_init(tmp);
|
588
588
|
mpfi_mul(det, x->data, x->data + 3);
|
@@ -591,7 +591,7 @@ void mpfi_2d_square_matrix_determinant(MPFI *det, MPFIMatrix *x){
|
|
591
591
|
r_mpfi_temp_free(tmp);
|
592
592
|
}
|
593
593
|
|
594
|
-
void mpfi_3d_square_matrix_determinant(MPFI *det, MPFIMatrix *x){
|
594
|
+
static void mpfi_3d_square_matrix_determinant(MPFI *det, MPFIMatrix *x){
|
595
595
|
MPFI *tmp;
|
596
596
|
r_mpfi_temp_alloc_init(tmp);
|
597
597
|
|
@@ -695,90 +695,6 @@ void mpfi_square_matrix_qr_decomp(MPFIMatrix *q, MPFIMatrix *r, MPFIMatrix *x){
|
|
695
695
|
r_mpfi_temp_free(tmp);
|
696
696
|
}
|
697
697
|
|
698
|
-
/* If inverse matrix does not exist, return 1. Otherwise return 0. */
|
699
|
-
int mpfi_2d_square_matrix_inverse_matrix(MPFIMatrix *inv, MPFIMatrix *x){
|
700
|
-
MPFIMatrix *t_mat;
|
701
|
-
r_mpfi_matrix_temp_alloc_init(t_mat, inv->row, inv->column);
|
702
|
-
MPFI *t_fi;
|
703
|
-
r_mpfi_temp_alloc_init(t_fi);
|
704
|
-
mpfi_2d_square_matrix_determinant(t_fi, x);
|
705
|
-
if(mpfi_has_zero(t_fi) > 0){
|
706
|
-
return 1;
|
707
|
-
}else{
|
708
|
-
mpfi_ui_div(t_fi, 1, t_fi);
|
709
|
-
mpfi_mul(t_mat->data, x->data + 3, t_fi);
|
710
|
-
mpfi_mul(t_mat->data + 3, x->data, t_fi);
|
711
|
-
mpfi_neg(t_fi, t_fi);
|
712
|
-
mpfi_mul(t_mat->data + 1, x->data + 1, t_fi);
|
713
|
-
mpfi_mul(t_mat->data + 2, x->data + 2, t_fi);
|
714
|
-
}
|
715
|
-
mpfi_matrix_set(inv, t_mat);
|
716
|
-
r_mpfi_matrix_temp_free(t_mat);
|
717
|
-
r_mpfi_temp_free(t_fi);
|
718
|
-
return 0;
|
719
|
-
}
|
720
|
-
|
721
|
-
/* x = -(sqrt(a11**2-2*a00*a11+4*a01*a10+a00**2)-a11-a00)/2.0E+0 */
|
722
|
-
/* x = (sqrt(a11**2-2*a00*a11+4*a01*a10+a00**2)+a11+a00)/2.0E+0 */
|
723
|
-
/* If there are two real eigenvalues, return positive number. */
|
724
|
-
/* If only one eigenvalue exists, return 0. */
|
725
|
-
/* If there are two complex eigenvalues, this functionreturn negative number and */
|
726
|
-
/* first returned value is real part and second one is imaginary part. */
|
727
|
-
int mpfi_2d_square_matrix_eigenvalue(MPFI *val1, MPFI *val2, MPFIMatrix *x){
|
728
|
-
int ret;
|
729
|
-
MPFI *d;
|
730
|
-
r_mpfi_temp_alloc_init(d);
|
731
|
-
|
732
|
-
mpfi_sub(val1, x->data, x->data + 3);
|
733
|
-
mpfi_mul(val1, val1, val1);
|
734
|
-
mpfi_mul(d, x->data + 1, x->data + 2);
|
735
|
-
mpfi_mul_ui(d, d, 4);
|
736
|
-
mpfi_add(d, d, val1);
|
737
|
-
|
738
|
-
mpfi_add(val1, x->data, x->data + 3);
|
739
|
-
mpfi_div_ui(val1, val1, 2);
|
740
|
-
if(mpfr_cmp_si(r_mpfi_right_ptr(d), 0) > 0){
|
741
|
-
ret = 1;
|
742
|
-
mpfi_sqrt(d, d);
|
743
|
-
mpfi_div_ui(d, d, 2);
|
744
|
-
mpfi_sub(val2, val1, d);
|
745
|
-
mpfi_add(val1, val1, d);
|
746
|
-
}else if(mpfr_cmp_si(r_mpfi_right_ptr(d), 0) < 0){
|
747
|
-
ret = -1;
|
748
|
-
mpfi_neg(d, d);
|
749
|
-
mpfi_sqrt(d, d);
|
750
|
-
mpfi_div_ui(val2, d, 2);
|
751
|
-
}else{
|
752
|
-
ret = 0;
|
753
|
-
mpfi_set(val2, val1);
|
754
|
-
}
|
755
|
-
|
756
|
-
r_mpfi_temp_free(d);
|
757
|
-
return ret;
|
758
|
-
}
|
759
|
-
|
760
|
-
void mpfi_2d_square_matrix_real_eigenvector(MPFIMatrix *vec, MPFIMatrix *x, MPFI *eigenval){
|
761
|
-
MPFIMatrix *tmp;
|
762
|
-
r_mpfi_matrix_temp_alloc_init(tmp, 2, 1);
|
763
|
-
MPFI *tmp_fi;
|
764
|
-
r_mpfi_temp_alloc_init(tmp_fi);
|
765
|
-
mpfi_sub(tmp_fi, x->data + 3, eigenval);
|
766
|
-
if(mpfi_has_zero(x->data + 1) > 0 && mpfi_has_zero(tmp_fi) > 0){
|
767
|
-
mpfi_set(tmp->data, x->data + 2);
|
768
|
-
mpfi_sub(tmp->data + 1, eigenval, x->data);
|
769
|
-
}else{
|
770
|
-
mpfi_sub(tmp->data, eigenval, x->data + 3);
|
771
|
-
mpfi_set(tmp->data + 1, x->data + 1);
|
772
|
-
}
|
773
|
-
if(mpfi_vector_normalize(vec, tmp) == 1){
|
774
|
-
gmp_printf("Argument matrix\n%.Ff\n%.Ff\n%.Ff\n%.Ff\n", x->data, x->data + 1, x->data + 2, x->data + 3);
|
775
|
-
gmp_printf("Argument eigenvalue\n%.Ff\n", eigenval);
|
776
|
-
rb_raise(rb_eArgError, "Invalid eigenvalue or eigenvector.");
|
777
|
-
}
|
778
|
-
r_mpfi_matrix_temp_free(tmp);
|
779
|
-
r_mpfi_temp_free(tmp_fi);
|
780
|
-
}
|
781
|
-
|
782
698
|
void mpfi_square_matrix_identity(MPFIMatrix *id){
|
783
699
|
int i, j, index;
|
784
700
|
for (j = 0; j < id->column; j++) {
|
@@ -5,7 +5,6 @@
|
|
5
5
|
#include <mpfi_io.h>
|
6
6
|
#include "ruby_mpfr_matrix.h"
|
7
7
|
#include "ruby_mpfi.h"
|
8
|
-
#include "ruby_mpfi_complex.h"
|
9
8
|
|
10
9
|
typedef struct __MPFIMatrix{
|
11
10
|
int row, column, size;
|
@@ -92,12 +91,7 @@ int mpfi_vector_set_length(MPFIMatrix *new, MPFIMatrix *x, MPFR *l);
|
|
92
91
|
|
93
92
|
/* ----------------- square matrix ----------------- */
|
94
93
|
int mpfi_square_matrix_lu_decomp (MPFIMatrix *ret, int *indx, MPFIMatrix *x);
|
95
|
-
void mpfi_2d_square_matrix_determinant(MPFI *det, MPFIMatrix *x);
|
96
|
-
void mpfi_3d_square_matrix_determinant(MPFI *det, MPFIMatrix *x);
|
97
94
|
void mpfi_square_matrix_determinant(MPFI *det, MPFIMatrix *x);
|
98
95
|
void mpfi_square_matrix_qr_decomp(MPFIMatrix *q, MPFIMatrix *r, MPFIMatrix *x);
|
99
|
-
int mpfi_2d_square_matrix_inverse_matrix(MPFIMatrix *inv, MPFIMatrix *x);
|
100
|
-
int mpfi_2d_square_matrix_eigenvalue(MPFI *val1, MPFI *val2, MPFIMatrix *x);
|
101
|
-
void mpfi_2d_square_matrix_real_eigenvector(MPFIMatrix *vec, MPFIMatrix *x, MPFI *eigenval);
|
102
96
|
void mpfi_square_matrix_identity(MPFIMatrix *id);
|
103
97
|
|
@@ -42,7 +42,7 @@ VALUE r_mpfi_matrix_robj(MPFIMatrix *x){
|
|
42
42
|
return ret;
|
43
43
|
}
|
44
44
|
|
45
|
-
/* Allocation function for
|
45
|
+
/* Allocation function for MPFI::Matrix. */
|
46
46
|
static VALUE r_mpfi_matrix_alloc (VALUE self){
|
47
47
|
MPFIMatrix *ptr;
|
48
48
|
r_mpfi_make_matrix_struct(self, ptr);
|
@@ -56,10 +56,8 @@ static VALUE r_mpfi_matrix_alloc (VALUE self){
|
|
56
56
|
/* mpfi_matrix_set(x, ptr_src); */
|
57
57
|
/* } */
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
MPFIMatrix *ptr;
|
62
|
-
r_mpfi_get_matrix_struct(ptr, self);
|
59
|
+
static void r_mpfi_matrix_set_initial_value(MPFIMatrix *ptr, int argc, VALUE *argv)
|
60
|
+
{
|
63
61
|
int row, column, i, j;
|
64
62
|
VALUE row_ary;
|
65
63
|
switch (argc) {
|
@@ -70,7 +68,7 @@ static VALUE r_mpfi_matrix_initialize (int argc, VALUE *argv, VALUE self){
|
|
70
68
|
for (i = 0; i < row; i++) {
|
71
69
|
row_ary = rb_ary_entry(argv[0], i);
|
72
70
|
if (column != RARRAY_LEN(row_ary)) {
|
73
|
-
rb_raise(rb_eArgError, "
|
71
|
+
rb_raise(rb_eArgError, "MPFI::Matrix.new needs Array which has arrays of same sizes.");
|
74
72
|
}
|
75
73
|
for (j = 0; j < column; j++) {
|
76
74
|
r_mpfi_set_robj(mpfi_matrix_get_element(ptr, i, j), rb_ary_entry(row_ary, j));
|
@@ -82,23 +80,38 @@ static VALUE r_mpfi_matrix_initialize (int argc, VALUE *argv, VALUE self){
|
|
82
80
|
mpfi_matrix_set_zeros(ptr);
|
83
81
|
break;
|
84
82
|
default:
|
85
|
-
rb_raise(rb_eArgError, "
|
83
|
+
rb_raise(rb_eArgError, "MPFI::Matrix.new needs one or two arguments.");
|
86
84
|
break;
|
87
85
|
}
|
86
|
+
}
|
87
|
+
|
88
|
+
/* Return new MPFI::Matrix instance. The same arguments as MPFI::Matrix.new is acceptable. */
|
89
|
+
static VALUE r_mpfi_matrix_global_new(int argc, VALUE *argv, VALUE self)
|
90
|
+
{
|
91
|
+
MPFIMatrix *ptr;
|
92
|
+
VALUE val;
|
93
|
+
r_mpfi_make_matrix_struct(val, ptr);
|
94
|
+
r_mpfi_matrix_set_initial_value(ptr, argc, argv);
|
95
|
+
return val;
|
96
|
+
}
|
97
|
+
|
98
|
+
/* Initialization function for MPFI::Matrix. */
|
99
|
+
static VALUE r_mpfi_matrix_initialize (int argc, VALUE *argv, VALUE self){
|
100
|
+
MPFIMatrix *ptr;
|
101
|
+
r_mpfi_get_matrix_struct(ptr, self);
|
102
|
+
r_mpfi_matrix_set_initial_value(ptr, argc, argv);
|
88
103
|
return Qtrue;
|
89
104
|
}
|
90
105
|
|
91
|
-
/* Allocation function for
|
106
|
+
/* Allocation function for MPFI::SquareMatrix. */
|
92
107
|
static VALUE r_mpfi_square_matrix_alloc (VALUE self){
|
93
108
|
MPFIMatrix *ptr;
|
94
109
|
r_mpfi_make_square_matrix_struct(self, ptr);
|
95
110
|
return self;
|
96
111
|
}
|
97
112
|
|
98
|
-
|
99
|
-
|
100
|
-
MPFIMatrix *ptr;
|
101
|
-
r_mpfi_get_matrix_struct(ptr, self);
|
113
|
+
static void r_mpfi_square_matrix_set_initial_value(MPFIMatrix *ptr, VALUE arg)
|
114
|
+
{
|
102
115
|
int row, column, i, j;
|
103
116
|
VALUE row_ary;
|
104
117
|
switch(TYPE(arg)){
|
@@ -110,14 +123,14 @@ static VALUE r_mpfi_square_matrix_initialize (VALUE self, VALUE arg){
|
|
110
123
|
for (i = 0; i < row; i++) {
|
111
124
|
row_ary = rb_ary_entry(arg, i);
|
112
125
|
if (column != RARRAY_LEN(row_ary)) {
|
113
|
-
rb_raise(rb_eArgError, "
|
126
|
+
rb_raise(rb_eArgError, "MPFI::Matrix.new needs Array which has arrays of same sizes.");
|
114
127
|
}
|
115
128
|
for (j = 0; j < column; j++) {
|
116
129
|
r_mpfi_set_robj(mpfi_matrix_get_element(ptr, i, j), rb_ary_entry(row_ary, j));
|
117
130
|
}
|
118
131
|
}
|
119
132
|
}else{
|
120
|
-
rb_raise(rb_eArgError, "
|
133
|
+
rb_raise(rb_eArgError, "MPFI::SquareMatrix.new needs two dimensinal Array which has the same sizes of row and column.");
|
121
134
|
}
|
122
135
|
break;
|
123
136
|
case T_FIXNUM:
|
@@ -126,9 +139,26 @@ static VALUE r_mpfi_square_matrix_initialize (VALUE self, VALUE arg){
|
|
126
139
|
mpfi_matrix_set_zeros(ptr);
|
127
140
|
break;
|
128
141
|
default:
|
129
|
-
rb_raise(rb_eArgError, "
|
142
|
+
rb_raise(rb_eArgError, "MPFI::SquareMatrix.new needs Array or Fixnum.");
|
130
143
|
break;
|
131
144
|
}
|
145
|
+
}
|
146
|
+
|
147
|
+
/* Return new MPFI::SquareMatrix instance. The same arguments as MPFI::SquareMatrix.new is acceptable. */
|
148
|
+
static VALUE r_mpfi_square_matrix_global_new(int argc, VALUE arg)
|
149
|
+
{
|
150
|
+
MPFIMatrix *ptr;
|
151
|
+
VALUE val;
|
152
|
+
r_mpfi_make_matrix_struct(val, ptr);
|
153
|
+
r_mpfi_square_matrix_set_initial_value(ptr, arg);
|
154
|
+
return val;
|
155
|
+
}
|
156
|
+
|
157
|
+
/* Initialization function for MPFI::SquareMatrix. */
|
158
|
+
static VALUE r_mpfi_square_matrix_initialize (VALUE self, VALUE arg){
|
159
|
+
MPFIMatrix *ptr;
|
160
|
+
r_mpfi_get_matrix_struct(ptr, self);
|
161
|
+
r_mpfi_square_matrix_set_initial_value(ptr, arg);
|
132
162
|
return Qtrue;
|
133
163
|
}
|
134
164
|
|
@@ -142,17 +172,15 @@ static VALUE r_mpfi_matrix_initialize_copy (VALUE self, VALUE other){
|
|
142
172
|
return Qtrue;
|
143
173
|
}
|
144
174
|
|
145
|
-
/* Allocation function for
|
175
|
+
/* Allocation function for MPFI::ColumnVector. */
|
146
176
|
static VALUE r_mpfi_col_vector_alloc (VALUE self){
|
147
177
|
MPFIMatrix *ptr;
|
148
178
|
r_mpfi_make_col_vector_struct(self, ptr);
|
149
179
|
return self;
|
150
180
|
}
|
151
181
|
|
152
|
-
|
153
|
-
|
154
|
-
MPFIMatrix *ptr;
|
155
|
-
r_mpfi_get_matrix_struct(ptr, self);
|
182
|
+
static void r_mpfi_col_vector_set_initial_value(MPFIMatrix *ptr, VALUE arg)
|
183
|
+
{
|
156
184
|
int row, i;
|
157
185
|
switch(TYPE(arg)){
|
158
186
|
case T_ARRAY:
|
@@ -170,23 +198,38 @@ static VALUE r_mpfi_col_vector_initialize (VALUE self, VALUE arg){
|
|
170
198
|
}
|
171
199
|
break;
|
172
200
|
default:
|
173
|
-
rb_raise(rb_eArgError, "
|
201
|
+
rb_raise(rb_eArgError, "MPFI::ColumnVector.new needs Array or Fixnum.");
|
174
202
|
break;
|
175
203
|
}
|
204
|
+
}
|
205
|
+
|
206
|
+
/* Return new MPFI::ColumnVector instance. The same arguments as MPFI::ColumnVector.new is acceptable. */
|
207
|
+
static VALUE r_mpfi_col_vector_global_new(int argc, VALUE arg)
|
208
|
+
{
|
209
|
+
MPFIMatrix *ptr;
|
210
|
+
VALUE val;
|
211
|
+
r_mpfi_make_matrix_struct(val, ptr);
|
212
|
+
r_mpfi_col_vector_set_initial_value(ptr, arg);
|
213
|
+
return val;
|
214
|
+
}
|
215
|
+
|
216
|
+
/* Initialization function for MPFI::ColumnVector. */
|
217
|
+
static VALUE r_mpfi_col_vector_initialize (VALUE self, VALUE arg){
|
218
|
+
MPFIMatrix *ptr;
|
219
|
+
r_mpfi_get_matrix_struct(ptr, self);
|
220
|
+
r_mpfi_col_vector_set_initial_value(ptr, arg);
|
176
221
|
return Qtrue;
|
177
222
|
}
|
178
223
|
|
179
|
-
/* Allocation function for
|
224
|
+
/* Allocation function for MPFI::RowVector. */
|
180
225
|
static VALUE r_mpfi_row_vector_alloc (VALUE self){
|
181
226
|
MPFIMatrix *ptr;
|
182
227
|
r_mpfi_make_row_vector_struct(self, ptr);
|
183
228
|
return self;
|
184
229
|
}
|
185
230
|
|
186
|
-
|
187
|
-
|
188
|
-
MPFIMatrix *ptr;
|
189
|
-
r_mpfi_get_matrix_struct(ptr, self);
|
231
|
+
static void r_mpfi_row_vector_set_initial_value(MPFIMatrix *ptr, VALUE arg)
|
232
|
+
{
|
190
233
|
int column, i;
|
191
234
|
switch(TYPE(arg)){
|
192
235
|
case T_ARRAY:
|
@@ -204,9 +247,26 @@ static VALUE r_mpfi_row_vector_initialize (VALUE self, VALUE arg){
|
|
204
247
|
}
|
205
248
|
break;
|
206
249
|
default:
|
207
|
-
rb_raise(rb_eArgError, "
|
250
|
+
rb_raise(rb_eArgError, "MPFI::RowVector.new needs Array or Fixnum.");
|
208
251
|
break;
|
209
|
-
}
|
252
|
+
}
|
253
|
+
}
|
254
|
+
|
255
|
+
/* Return new MPFI::RowVector instance. The same arguments as MPFI::RowVector.new is acceptable. */
|
256
|
+
static VALUE r_mpfi_row_vector_global_new(int argc, VALUE arg)
|
257
|
+
{
|
258
|
+
MPFIMatrix *ptr;
|
259
|
+
VALUE val;
|
260
|
+
r_mpfi_make_matrix_struct(val, ptr);
|
261
|
+
r_mpfi_row_vector_set_initial_value(ptr, arg);
|
262
|
+
return val;
|
263
|
+
}
|
264
|
+
|
265
|
+
/* Initialization function for MPFI::RowVector. */
|
266
|
+
static VALUE r_mpfi_row_vector_initialize (VALUE self, VALUE arg){
|
267
|
+
MPFIMatrix *ptr;
|
268
|
+
r_mpfi_get_matrix_struct(ptr, self);
|
269
|
+
r_mpfi_row_vector_set_initial_value(ptr, arg);
|
210
270
|
return Qtrue;
|
211
271
|
}
|
212
272
|
|
@@ -1079,22 +1139,26 @@ static VALUE r_mpfr_matrix_to_fi_matrix(VALUE self){
|
|
1079
1139
|
void Init_matrix(){
|
1080
1140
|
|
1081
1141
|
/* Initialization of MPFI::Matrix, MPFI::SquareMatrix, MPFI::ColumnVector and MPFI::RowVector */
|
1082
|
-
VALUE
|
1083
|
-
r_mpfi_matrix = rb_define_class_under(
|
1084
|
-
r_mpfi_square_matrix = rb_define_class_under(
|
1085
|
-
r_mpfi_col_vector = rb_define_class_under(
|
1086
|
-
r_mpfi_row_vector = rb_define_class_under(
|
1142
|
+
VALUE tmp_r_mpfi_class = rb_define_class("MPFI", rb_cNumeric);
|
1143
|
+
r_mpfi_matrix = rb_define_class_under(tmp_r_mpfi_class, "Matrix", rb_cObject);
|
1144
|
+
r_mpfi_square_matrix = rb_define_class_under(tmp_r_mpfi_class, "SquareMatrix", r_mpfi_matrix);
|
1145
|
+
r_mpfi_col_vector = rb_define_class_under(tmp_r_mpfi_class, "ColumnVector", r_mpfi_matrix);
|
1146
|
+
r_mpfi_row_vector = rb_define_class_under(tmp_r_mpfi_class, "RowVector", r_mpfi_matrix);
|
1087
1147
|
|
1148
|
+
rb_define_singleton_method(r_mpfi_matrix, "Matrix", r_mpfi_matrix_global_new, -1);
|
1088
1149
|
rb_define_alloc_func(r_mpfi_matrix, r_mpfi_matrix_alloc);
|
1089
1150
|
rb_define_private_method(r_mpfi_matrix, "initialize", r_mpfi_matrix_initialize, -1);
|
1090
1151
|
rb_define_private_method(r_mpfi_matrix, "initialize_copy", r_mpfi_matrix_initialize_copy, 1);
|
1091
1152
|
|
1153
|
+
rb_define_singleton_method(tmp_r_mpfi_class, "SquareMatrix", r_mpfi_square_matrix_global_new, 1);
|
1092
1154
|
rb_define_alloc_func(r_mpfi_square_matrix, r_mpfi_square_matrix_alloc);
|
1093
1155
|
rb_define_private_method(r_mpfi_square_matrix, "initialize", r_mpfi_square_matrix_initialize, 1);
|
1094
|
-
|
1156
|
+
|
1157
|
+
rb_define_singleton_method(tmp_r_mpfi_class, "ColumnVector", r_mpfi_col_vector_global_new, 1);
|
1095
1158
|
rb_define_alloc_func(r_mpfi_col_vector, r_mpfi_col_vector_alloc);
|
1096
1159
|
rb_define_private_method(r_mpfi_col_vector, "initialize", r_mpfi_col_vector_initialize, 1);
|
1097
1160
|
|
1161
|
+
rb_define_singleton_method(tmp_r_mpfi_class, "RowVector", r_mpfi_row_vector_global_new, 1);
|
1098
1162
|
rb_define_alloc_func(r_mpfi_row_vector, r_mpfi_row_vector_alloc);
|
1099
1163
|
rb_define_private_method(r_mpfi_row_vector, "initialize", r_mpfi_row_vector_initialize, 1);
|
1100
1164
|
|
@@ -1161,7 +1225,7 @@ void Init_matrix(){
|
|
1161
1225
|
rb_define_singleton_method(r_mpfi_square_matrix, "identity", r_mpfi_square_matrix_identity, 1);
|
1162
1226
|
|
1163
1227
|
/* Initialization of MPFI::Vector module */
|
1164
|
-
r_mpfi_vector_module = rb_define_module_under(
|
1228
|
+
r_mpfi_vector_module = rb_define_module_under(tmp_r_mpfi_class, "Vector");
|
1165
1229
|
|
1166
1230
|
rb_include_module(r_mpfi_col_vector, r_mpfi_vector_module);
|
1167
1231
|
rb_include_module(r_mpfi_row_vector, r_mpfi_vector_module);
|
data/lib/mpfi/version.rb
CHANGED
data/ruby-mpfi.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{ruby-mpfi}
|
5
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.3"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Takayuki YAMAGUCHI"]
|
9
|
-
s.date = %q{2009-12-
|
9
|
+
s.date = %q{2009-12-19}
|
10
10
|
s.description = %q{FIX (describe your package)}
|
11
11
|
s.email = ["d@ytak.info"]
|
12
12
|
s.extensions = ["ext/mpfi/extconf.rb", "ext/mpfi_complex/mpfi/extconf.rb", "ext/mpfi_matrix/mpfi/extconf.rb"]
|
13
|
-
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "PostInstall.txt"]
|
14
|
-
s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "ext/mpfi/extconf.rb", "ext/mpfi/func_mpfi_extention.c", "ext/mpfi/func_mpfi_extention.h", "ext/mpfi/
|
15
|
-
s.homepage = %q{http://
|
13
|
+
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc"]
|
14
|
+
s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "ext/mpfi/extconf.rb", "ext/mpfi/func_mpfi_extention.c", "ext/mpfi/func_mpfi_extention.h", "ext/mpfi/ruby_mpfi.c", "ext/mpfi/ruby_mpfi.h", "ext/mpfi/ruby_mpfr.h", "ext/mpfi_complex/mpfi/extconf.rb", "ext/mpfi_complex/mpfi/func_mpfi_extention.h", "ext/mpfi_complex/mpfi/func_ruby_mpfi_complex.c", "ext/mpfi_complex/mpfi/func_ruby_mpfi_complex.h", "ext/mpfi_complex/mpfi/ruby_mpfi.h", "ext/mpfi_complex/mpfi/ruby_mpfi_complex.c", "ext/mpfi_complex/mpfi/ruby_mpfi_complex.h", "ext/mpfi_complex/mpfi/ruby_mpfr.h", "ext/mpfi_matrix/mpfi/extconf.rb", "ext/mpfi_matrix/mpfi/func_mpfi_extention.h", "ext/mpfi_matrix/mpfi/func_mpfi_matrix.c", "ext/mpfi_matrix/mpfi/func_mpfi_matrix.h", "ext/mpfi_matrix/mpfi/func_mpfr_matrix.h", "ext/mpfi_matrix/mpfi/ruby_mpfi.h", "ext/mpfi_matrix/mpfi/ruby_mpfi_matrix.c", "ext/mpfi_matrix/mpfi/ruby_mpfi_matrix.h", "ext/mpfi_matrix/mpfi/ruby_mpfr.h", "ext/mpfi_matrix/mpfi/ruby_mpfr_matrix.h", "lib/mpfi/matrix.rb", "lib/mpfi/version.rb", "ruby-mpfi.gemspec", "script/console", "script/destroy", "script/generate", "spec/mpfi/generate_number_module.rb", "spec/mpfi/mpfi_alloc_spec.rb", "spec/mpfi/mpfi_diam_arithmetic_spec.rb", "spec/mpfi/mpfi_interval_arithmetic_spec.rb", "spec/mpfi/mpfi_interval_functions_spec.rb", "spec/mpfi/mpfi_math_functions_spec.rb", "spec/mpfi/mpfi_set_operation_spec.rb", "spec/mpfi/ruby-mpfi_spec.rb", "spec/mpfi/spec_helper.rb", "spec/mpfi_complex/spec_helper.rb", "spec/mpfi_matrix/generate_matrix_arguments.rb", "spec/mpfi_matrix/mpfi_matrix_alloc_spec.rb", "spec/mpfi_matrix/mpfi_matrix_arithmetic_spec.rb", "spec/mpfi_matrix/mpfi_matrix_interval_func_spec.rb", "spec/mpfi_matrix/mpfi_matrix_set_element_spec.rb", "spec/mpfi_matrix/mpfi_matrix_set_operation_spec.rb", "spec/mpfi_matrix/mpfi_matrix_string_spec.rb", "spec/mpfi_matrix/mpfi_matrix_subdivision_spec.rb", "spec/mpfi_matrix/mpfi_square_matrix_spec.rb", "spec/mpfi_matrix/mpfi_vector_spec.rb", "spec/mpfi_matrix/spec_helper.rb", "spec/spec.opts", "tasks/extconf.rake"]
|
15
|
+
s.homepage = %q{http://rubyforge.org/projects/ruby-mpfr/}
|
16
16
|
s.post_install_message = %q{PostInstall.txt}
|
17
17
|
s.rdoc_options = ["--main", "README.rdoc"]
|
18
18
|
s.require_paths = ["lib", "ext"]
|
@@ -25,11 +25,14 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.specification_version = 3
|
26
26
|
|
27
27
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
|
+
s.add_runtime_dependency(%q<ruby-mpfr>, [">= 0.0.4"])
|
28
29
|
s.add_development_dependency(%q<hoe>, [">= 2.4.0"])
|
29
30
|
else
|
31
|
+
s.add_dependency(%q<ruby-mpfr>, [">= 0.0.4"])
|
30
32
|
s.add_dependency(%q<hoe>, [">= 2.4.0"])
|
31
33
|
end
|
32
34
|
else
|
35
|
+
s.add_dependency(%q<ruby-mpfr>, [">= 0.0.4"])
|
33
36
|
s.add_dependency(%q<hoe>, [">= 2.4.0"])
|
34
37
|
end
|
35
38
|
end
|
@@ -9,8 +9,8 @@ describe MPFI, "when calculating mathematical functions" do
|
|
9
9
|
it "should not raise error" do
|
10
10
|
MPFR.set_default_prec(256)
|
11
11
|
num = MPFI.new('4.2184930258398098')
|
12
|
-
p MPFI::Math.sqr(num)
|
13
|
-
p MPFI::Math.sqrt(num)
|
12
|
+
# p MPFI::Math.sqr(num)
|
13
|
+
# p MPFI::Math.sqrt(num)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-mpfi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takayuki YAMAGUCHI
|
@@ -9,9 +9,19 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-12-
|
12
|
+
date: 2009-12-19 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: ruby-mpfr
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.4
|
24
|
+
version:
|
15
25
|
- !ruby/object:Gem::Dependency
|
16
26
|
name: hoe
|
17
27
|
type: :development
|
@@ -35,6 +45,7 @@ extra_rdoc_files:
|
|
35
45
|
- History.txt
|
36
46
|
- Manifest.txt
|
37
47
|
- PostInstall.txt
|
48
|
+
- README.rdoc
|
38
49
|
files:
|
39
50
|
- History.txt
|
40
51
|
- Manifest.txt
|
@@ -44,11 +55,9 @@ files:
|
|
44
55
|
- ext/mpfi/extconf.rb
|
45
56
|
- ext/mpfi/func_mpfi_extention.c
|
46
57
|
- ext/mpfi/func_mpfi_extention.h
|
47
|
-
- ext/mpfi/make_c_source.rb
|
48
58
|
- ext/mpfi/ruby_mpfi.c
|
49
59
|
- ext/mpfi/ruby_mpfi.h
|
50
60
|
- ext/mpfi/ruby_mpfr.h
|
51
|
-
- ext/mpfi/yasnippet_mpfi.el
|
52
61
|
- ext/mpfi_complex/mpfi/extconf.rb
|
53
62
|
- ext/mpfi_complex/mpfi/func_mpfi_extention.h
|
54
63
|
- ext/mpfi_complex/mpfi/func_ruby_mpfi_complex.c
|
@@ -62,9 +71,7 @@ files:
|
|
62
71
|
- ext/mpfi_matrix/mpfi/func_mpfi_matrix.c
|
63
72
|
- ext/mpfi_matrix/mpfi/func_mpfi_matrix.h
|
64
73
|
- ext/mpfi_matrix/mpfi/func_mpfr_matrix.h
|
65
|
-
- ext/mpfi_matrix/mpfi/func_ruby_mpfi_complex.h
|
66
74
|
- ext/mpfi_matrix/mpfi/ruby_mpfi.h
|
67
|
-
- ext/mpfi_matrix/mpfi/ruby_mpfi_complex.h
|
68
75
|
- ext/mpfi_matrix/mpfi/ruby_mpfi_matrix.c
|
69
76
|
- ext/mpfi_matrix/mpfi/ruby_mpfi_matrix.h
|
70
77
|
- ext/mpfi_matrix/mpfi/ruby_mpfr.h
|
@@ -99,7 +106,7 @@ files:
|
|
99
106
|
- spec/spec.opts
|
100
107
|
- tasks/extconf.rake
|
101
108
|
has_rdoc: true
|
102
|
-
homepage: http://
|
109
|
+
homepage: http://rubyforge.org/projects/ruby-mpfr/
|
103
110
|
licenses: []
|
104
111
|
|
105
112
|
post_install_message: PostInstall.txt
|