malge 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,45 +4,47 @@
4
4
  require "helper"
5
5
  #require "test/unit"
6
6
  #require "malge.rb"
7
- ##require "malge/errorfittedfunction.rb"
8
7
 
9
8
  class TC_ErrorFittedFunction_AXInv32 < Test::Unit::TestCase
9
+
10
10
  $tolerance = 1E-10
11
11
 
12
12
  def setup
13
13
  @axi3200 = Malge::ErrorFittedFunction::AXInv32.new(
14
14
  [
15
- [1.0, 1.0],
16
- [2.0, 3.0],
15
+ [(2.0 ** (-2.0/3.0)), 3.0],
16
+ [(2.0 ** ( 0 )), 1.0],
17
+ [(2.0 ** ( 2.0/3.0)), 1.0],
17
18
  ]
18
19
  )
19
20
  end
20
21
 
21
22
  def test_equation
22
- assert_equal("f(x) = 1.777778 / (x^{3/2})", @axi3200.equation)
23
+ #assert_equal("1.777778 / (x**(3.0/2.0))", @axi3200.equation)
24
+ assert_equal("0.800000 / (x**(3.0/2.0))", @axi3200.equation)
23
25
  end
24
26
 
25
27
  def test_fit
26
- assert_in_delta(16.0/9.0, @axi3200.coefficients[0], $tolerance)
28
+ assert_in_delta(0.8, @axi3200.coefficients[0], $tolerance)
27
29
  end
28
30
 
29
31
  def test_expected_error
30
- assert_in_delta(16.0/9.0, @axi3200.expected_error(1.0), $tolerance)
31
- assert_in_delta(16.0/9.0 * 2.0**(-3.0/2.0), @axi3200.expected_error(2.0), $tolerance)
32
-
32
+ assert_in_delta(0.8, @axi3200.expected_error(1.0), $tolerance)
33
+ assert_in_delta(0.8 * 2.0**(-3.0/2.0), @axi3200.expected_error(2.0), $tolerance)
33
34
  end
34
35
 
35
36
  def test_most_strict_pair
36
- assert_in_delta( 2.0, @axi3200.most_strict_pair[0])
37
- assert_in_delta( 3.0, @axi3200.most_strict_pair[1])
37
+ assert_in_delta((2.0 ** ( 2.0/3.0)), @axi3200.most_strict_pair[0])
38
+ assert_in_delta(1.0, @axi3200.most_strict_pair[1])
38
39
  end
39
40
 
40
41
  def test_variance
41
- assert_equal(36.0/81.0, @axi3200.variance)
42
+ assert_equal(0.8, @axi3200.variance)
42
43
  end
43
44
 
44
45
  def test_x
45
- assert_in_delta(1.0, @axi3200.x(16.0/9.0), $tolerance)
46
+ assert_in_delta((0.8 ** (2.0/3.0)), @axi3200.x(1.0), $tolerance)
46
47
  end
48
+
47
49
  end
48
50
 
@@ -0,0 +1,50 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "helper"
5
+ #require "test/unit"
6
+ #require "malge.rb"
7
+
8
+ class TC_ErrorFittedFunction_AXInv4 < Test::Unit::TestCase
9
+
10
+ $tolerance = 1E-10
11
+
12
+ def setup
13
+ @axi400 = Malge::ErrorFittedFunction::AXInv4.new(
14
+ [
15
+ [(2.0 ** (-1.0/4.0)), 3.0],
16
+ [(2.0 ** ( 0 )), 1.0],
17
+ [(2.0 ** ( 1.0/4.0)), 1.0],
18
+ ]
19
+ )
20
+ end
21
+
22
+
23
+ def test_equation
24
+ assert_equal("0.800000 / (x**4)", @axi400.equation)
25
+ end
26
+
27
+ def test_fit
28
+ assert_in_delta(0.8, @axi400.coefficients[0], $tolerance)
29
+ end
30
+
31
+ def test_expected_error
32
+ assert_in_delta(0.8 , @axi400.expected_error(1.0), $tolerance)
33
+ assert_in_delta((0.8 )/16.0, @axi400.expected_error(2.0), $tolerance)
34
+ end
35
+
36
+ def test_most_strict_pair
37
+ assert_in_delta( (2.0 ** ( 1.0/4.0)), @axi400.most_strict_pair[0])
38
+ assert_in_delta( 1.0, @axi400.most_strict_pair[1])
39
+ end
40
+
41
+ def test_variance
42
+ assert_in_delta( 0.8, @axi400.variance, $tolerance)
43
+ end
44
+
45
+ def test_x
46
+ assert_in_delta((0.8 )**(1.0/4.0), @axi400.x(1.0), $tolerance)
47
+ end
48
+
49
+ end
50
+
@@ -18,28 +18,28 @@ class TC_Malge < Test::Unit::TestCase
18
18
  [-10.000, -12.067],
19
19
  [ -9.000, -11.490],
20
20
  [ -8.000, -10.034],
21
- [ -7.000, -9.196],
22
- [ -6.000, -7.571],
23
- [ -5.000, -6.606],
24
- [ -4.000, -6.299],
25
- [ -3.000, -5.004],
26
- [ -2.000, -3.858],
27
- [ -1.000, -3.497],
28
- [ 0.000, -2.484],
29
- [ 1.000, -1.079],
30
- [ 2.000, -0.425],
31
- [ 3.000, 0.915],
32
- [ 4.000, 2.031],
33
- [ 5.000, 3.438],
34
- [ 6.000, 4.012],
35
- [ 7.000, 5.258],
36
- [ 8.000, 5.695],
37
- [ 9.000, 6.645],
38
- [ 10.000, 7.962],
21
+ [ -7.000, -9.196],
22
+ [ -6.000, -7.571],
23
+ [ -5.000, -6.606],
24
+ [ -4.000, -6.299],
25
+ [ -3.000, -5.004],
26
+ [ -2.000, -3.858],
27
+ [ -1.000, -3.497],
28
+ [ 0.000, -2.484],
29
+ [ 1.000, -1.079],
30
+ [ 2.000, -0.425],
31
+ [ 3.000, 0.915],
32
+ [ 4.000, 2.031],
33
+ [ 5.000, 3.438],
34
+ [ 6.000, 4.012],
35
+ [ 7.000, 5.258],
36
+ [ 8.000, 5.695],
37
+ [ 9.000, 6.645],
38
+ [ 10.000, 7.962],
39
39
  ]
40
40
  #should be below, confirmed by Excel.
41
41
  a0 = -2.0787619047619
42
- a1 = 1.00077142857143
42
+ a1 = 1.00077142857143
43
43
 
44
44
  results=Malge::LeastSquare.least_square_1st_degree(data_pairs)
45
45
  assert_equal(2, results.size)
@@ -50,9 +50,9 @@ class TC_Malge < Test::Unit::TestCase
50
50
  def test_variance_1st_degree
51
51
  data_pairs = [
52
52
  [0.0, -1.0],
53
- [1.0, 2.0],
54
- [2.0, 3.0],
55
- [3.0, 2.0],
53
+ [1.0, 2.0],
54
+ [2.0, 3.0],
55
+ [3.0, 2.0],
56
56
  ]
57
57
  assert_equal( 4.0, Malge::LeastSquare::variance_1st_degree(data_pairs))
58
58
  end
@@ -60,8 +60,8 @@ class TC_Malge < Test::Unit::TestCase
60
60
  def test_least_square_proportional
61
61
  data_pairs =
62
62
  [
63
- [ 1.000, -2.000],
64
- [ 1.000, -1.000],
63
+ [ 1.000, -2.000],
64
+ [ 1.000, -1.000],
65
65
  ]
66
66
  results = Malge::LeastSquare.least_square_proportional(data_pairs)
67
67
  assert_equal(1, results.size)
@@ -69,8 +69,8 @@ class TC_Malge < Test::Unit::TestCase
69
69
 
70
70
  data_pairs =
71
71
  [
72
- [ 1.000, 0.000],
73
- [ 2.000, 2.000],
72
+ [ 1.000, 0.000],
73
+ [ 2.000, 2.000],
74
74
  ]
75
75
  results = Malge::LeastSquare.least_square_proportional(data_pairs)
76
76
  assert_equal(1, results.size)
@@ -101,16 +101,16 @@ class TC_Malge < Test::Unit::TestCase
101
101
  assert_equal(corrects, Malge::LeastSquare.a_exp_bx(data_pairs))
102
102
 
103
103
  data_pairs = [
104
- [0.0, 1.0],
105
- [1.0, 1.0],
104
+ [0.0, 1.0],
105
+ [1.0, 1.0],
106
106
  ]
107
107
  assert_raise(Malge::LeastSquare::UnableCalculationError){
108
108
  Malge::LeastSquare.a_exp_bx(data_pairs)
109
109
  }
110
110
 
111
111
  data_pairs = [
112
- [1.0, 1.0],
113
- [1.0, 2.0],
112
+ [1.0, 1.0],
113
+ [1.0, 2.0],
114
114
  ]
115
115
  assert_raise(Malge::LeastSquare::UnableCalculationError){
116
116
  Malge::LeastSquare.a_exp_bx(data_pairs)
@@ -128,25 +128,25 @@ class TC_Malge < Test::Unit::TestCase
128
128
  #y = 4.0 exp^{- log_e 2 x}
129
129
  corrects = [ 4.0, - Math::log(2.0)]
130
130
  results = Malge::LeastSquare.least_square_a_exp_bx(data_pairs)
131
- assert_equal(2 , results.size)
131
+ assert_equal(2 , results.size)
132
132
  assert_in_delta(corrects[0], results[0], TOLERANCE)
133
133
  assert_in_delta(corrects[1], results[1], TOLERANCE)
134
134
 
135
135
  data_pairs = [
136
- [0.0, 1.0],
137
- [1.0, 4.0],
136
+ [0.0, 1.0],
137
+ [1.0, 4.0],
138
138
  [2.0, 16.0],
139
139
  ]
140
140
  corrects = [ 1.0, 2.0 * Math::log(2.0)]
141
141
  results = Malge::LeastSquare.least_square_a_exp_bx(data_pairs)
142
- assert_equal(2 , results.size)
142
+ assert_equal(2 , results.size)
143
143
  assert_in_delta(corrects[0], results[0], TOLERANCE)
144
144
  assert_in_delta(corrects[1], results[1], TOLERANCE)
145
145
 
146
146
  data_pairs = [
147
147
  [0.0, 16.0],
148
- [1.0, 4.0],
149
- [2.0, 0.0],
148
+ [1.0, 4.0],
149
+ [2.0, 0.0],
150
150
  ]
151
151
  assert_raise(Malge::LeastSquare::UnableCalculationError) do
152
152
  Malge::LeastSquare.least_square_a_exp_bx(data_pairs)
@@ -0,0 +1,264 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "helper"
5
+ require "pp"
6
+ #require "test/unit"
7
+ #require "pkg/klass.rb"
8
+
9
+
10
+ class Malge::MultiVariableFunction
11
+ public :same?
12
+ end
13
+
14
+ class TC_MultiVariableFunction < Test::Unit::TestCase
15
+ def setup
16
+ @mvf00 = Malge::MultiVariableFunction.new(
17
+ [
18
+ {:a => 0.0, :b => 0.0, :c => 0.0, :z => 0.0 },
19
+ {:a => 0.0, :b => 0.0, :c => 1.0, :z => 1.0 },
20
+ {:a => 0.0, :b => 1.0, :c => 0.0, :z => 2.0 },
21
+ {:a => 0.0, :b => 1.0, :c => 1.0, :z => 3.0 },
22
+ {:a => 1.0, :b => 0.0, :c => 0.0, :z => 4.0 },
23
+ {:a => 1.0, :b => 0.0, :c => 1.0, :z => 5.0 },
24
+ {:a => 1.0, :b => 1.0, :c => 0.0, :z => 6.0 },
25
+ {:a => 1.0, :b => 1.0, :c => 1.0, :z => 7.0 },
26
+ ]
27
+ )
28
+ end
29
+
30
+ def test_abstract!
31
+ @mvf00.abstract!({:a => 0.0, :b => 0.0, :c => 0.0})
32
+ assert_equal(
33
+ [
34
+ {:a => 0.0, :b => 0.0, :c => 0.0, :z => 0.0 }
35
+ ],
36
+ @mvf00.data
37
+ )
38
+ end
39
+
40
+ def test_abstract
41
+ assert_equal(
42
+ [
43
+ {:a => 0.0, :b => 0.0, :c => 0.0, :z => 0.0 }
44
+ ],
45
+ @mvf00.abstract({:a => 0.0, :b => 0.0, :c => 0.0}).data
46
+ )
47
+ #check not destructive.
48
+ assert_equal(
49
+ [
50
+ {:a => 0.0, :b => 0.0, :c => 0.0, :z => 0.0 },
51
+ {:a => 0.0, :b => 0.0, :c => 1.0, :z => 1.0 },
52
+ {:a => 0.0, :b => 1.0, :c => 0.0, :z => 2.0 },
53
+ {:a => 0.0, :b => 1.0, :c => 1.0, :z => 3.0 },
54
+ {:a => 1.0, :b => 0.0, :c => 0.0, :z => 4.0 },
55
+ {:a => 1.0, :b => 0.0, :c => 1.0, :z => 5.0 },
56
+ {:a => 1.0, :b => 1.0, :c => 0.0, :z => 6.0 },
57
+ {:a => 1.0, :b => 1.0, :c => 1.0, :z => 7.0 },
58
+ ],
59
+ @mvf00.data
60
+ )
61
+
62
+ assert_equal(
63
+ [
64
+ {:a => 0.0, :b => 0.0, :c => 0.0, :z => 0.0 },
65
+ {:a => 0.0, :b => 0.0, :c => 1.0, :z => 1.0 },
66
+ ],
67
+ @mvf00.abstract({:a => 0.0, :b => 0.0}).data
68
+ )
69
+
70
+ assert_equal(
71
+ [
72
+ {:a => 0.0, :b => 0.0, :c => 0.0, :z => 0.0 },
73
+ {:a => 0.0, :b => 0.0, :c => 1.0, :z => 1.0 },
74
+ {:a => 0.0, :b => 1.0, :c => 0.0, :z => 2.0 },
75
+ {:a => 0.0, :b => 1.0, :c => 1.0, :z => 3.0 },
76
+ ],
77
+ @mvf00.abstract({:a => 0.0}).data
78
+ )
79
+
80
+ assert_equal(
81
+ [
82
+ {:a => 0.0, :b => 0.0, :c => 0.0, :z => 0.0 },
83
+ {:a => 0.0, :b => 0.0, :c => 1.0, :z => 1.0 },
84
+ {:a => 0.0, :b => 1.0, :c => 0.0, :z => 2.0 },
85
+ {:a => 0.0, :b => 1.0, :c => 1.0, :z => 3.0 },
86
+ {:a => 1.0, :b => 0.0, :c => 0.0, :z => 4.0 },
87
+ {:a => 1.0, :b => 0.0, :c => 1.0, :z => 5.0 },
88
+ {:a => 1.0, :b => 1.0, :c => 0.0, :z => 6.0 },
89
+ {:a => 1.0, :b => 1.0, :c => 1.0, :z => 7.0 },
90
+ ],
91
+ @mvf00.abstract({}).data
92
+ )
93
+
94
+ assert_equal( [], @mvf00.abstract({:a => 2.0}).data)
95
+ end
96
+
97
+ def test_unite_axes!
98
+ @mvf00.unite_axes!([:a, :b, :c])
99
+ assert_equal(
100
+ [
101
+ {:a => 0.0, :z => 0.0 },
102
+ {:a => 1.0, :z => 7.0 },
103
+ ],
104
+ @mvf00.data
105
+ )
106
+ end
107
+
108
+ def test_unite_axes
109
+ assert_equal(
110
+ [
111
+ {:a => 0.0, :z => 0.0 },
112
+ {:a => 1.0, :z => 7.0 },
113
+ ],
114
+ @mvf00.unite_axes([:a, :b, :c]).data
115
+ )
116
+ #check not destructive.
117
+ assert_equal(
118
+ [
119
+ {:a => 0.0, :b => 0.0, :c => 0.0, :z => 0.0 },
120
+ {:a => 0.0, :b => 0.0, :c => 1.0, :z => 1.0 },
121
+ {:a => 0.0, :b => 1.0, :c => 0.0, :z => 2.0 },
122
+ {:a => 0.0, :b => 1.0, :c => 1.0, :z => 3.0 },
123
+ {:a => 1.0, :b => 0.0, :c => 0.0, :z => 4.0 },
124
+ {:a => 1.0, :b => 0.0, :c => 1.0, :z => 5.0 },
125
+ {:a => 1.0, :b => 1.0, :c => 0.0, :z => 6.0 },
126
+ {:a => 1.0, :b => 1.0, :c => 1.0, :z => 7.0 },
127
+ ],
128
+ @mvf00.data
129
+ )
130
+
131
+ assert_equal(
132
+ [
133
+ {:ab => 0.0, :c => 0.0, :z => 0.0 },
134
+ {:ab => 0.0, :c => 1.0, :z => 1.0 },
135
+ {:ab => 1.0, :c => 0.0, :z => 6.0 },
136
+ {:ab => 1.0, :c => 1.0, :z => 7.0 },
137
+ ],
138
+ @mvf00.unite_axes([:a, :b], :ab).data
139
+ )
140
+
141
+ assert_equal(
142
+ [
143
+ {:a => 0.0, :c => 0.0, :z => 0.0 },
144
+ {:a => 0.0, :c => 1.0, :z => 1.0 },
145
+ {:a => 1.0, :c => 0.0, :z => 6.0 },
146
+ {:a => 1.0, :c => 1.0, :z => 7.0 },
147
+ ],
148
+ @mvf00.unite_axes([:a, :b]).data
149
+ )
150
+ end
151
+
152
+
153
+ def test_same?
154
+ assert_equal(
155
+ true,
156
+ @mvf00.same?({:a => 0.0, :b => 0.0, :c => 0.0, :z => 0.0 }, [:a, :b])
157
+ )
158
+
159
+ assert_equal(
160
+ true,
161
+ @mvf00.same?({:a => 0.0, :b => 0.0, :c => 1.0, :z => 1.0 }, [:a, :b])
162
+ )
163
+ assert_equal(
164
+ false,
165
+ @mvf00.same?({:a => 0.0, :b => 1.0, :c => 0.0, :z => 2.0 }, [:a, :b])
166
+ )
167
+ assert_equal(
168
+ false,
169
+ @mvf00.same?({:a => 0.0, :b => 1.0, :c => 1.0, :z => 3.0 }, [:a, :b])
170
+ )
171
+ assert_equal(
172
+ false,
173
+ @mvf00.same?({:a => 1.0, :b => 0.0, :c => 0.0, :z => 4.0 }, [:a, :b])
174
+ )
175
+ assert_equal(
176
+ false,
177
+ @mvf00.same?({:a => 1.0, :b => 0.0, :c => 1.0, :z => 5.0 }, [:a, :b])
178
+ )
179
+ assert_equal(
180
+ true,
181
+ @mvf00.same?({:a => 1.0, :b => 1.0, :c => 0.0, :z => 6.0 }, [:a, :b])
182
+ )
183
+ assert_equal(
184
+ true,
185
+ @mvf00.same?({:a => 1.0, :b => 1.0, :c => 1.0, :z => 7.0 }, [:a, :b])
186
+ )
187
+
188
+
189
+ # equal in float
190
+ assert_equal(
191
+ true,
192
+ @mvf00.same?({:a => 1E-15, :b => 0.0, :c => 0.0, :z => 0.0 }, [:a, :b])
193
+ )
194
+
195
+ end
196
+
197
+ def test_delete_axis!
198
+ @mvf00.delete_axis!(:a)
199
+ assert_equal(
200
+ [
201
+ {:b => 0.0, :c => 0.0, :z => 0.0 },
202
+ {:b => 0.0, :c => 1.0, :z => 1.0 },
203
+ {:b => 1.0, :c => 0.0, :z => 2.0 },
204
+ {:b => 1.0, :c => 1.0, :z => 3.0 },
205
+ {:b => 0.0, :c => 0.0, :z => 4.0 },
206
+ {:b => 0.0, :c => 1.0, :z => 5.0 },
207
+ {:b => 1.0, :c => 0.0, :z => 6.0 },
208
+ {:b => 1.0, :c => 1.0, :z => 7.0 },
209
+ ],
210
+ @mvf00.data
211
+ )
212
+ end
213
+
214
+ def test_delete_axis
215
+ result = @mvf00.delete_axis(:a)
216
+ assert_equal(
217
+ [
218
+ {:b => 0.0, :c => 0.0, :z => 0.0 },
219
+ {:b => 0.0, :c => 1.0, :z => 1.0 },
220
+ {:b => 1.0, :c => 0.0, :z => 2.0 },
221
+ {:b => 1.0, :c => 1.0, :z => 3.0 },
222
+ {:b => 0.0, :c => 0.0, :z => 4.0 },
223
+ {:b => 0.0, :c => 1.0, :z => 5.0 },
224
+ {:b => 1.0, :c => 0.0, :z => 6.0 },
225
+ {:b => 1.0, :c => 1.0, :z => 7.0 },
226
+ ],
227
+ result.data
228
+ )
229
+
230
+ assert_equal(
231
+ [
232
+ {:a => 0.0, :b => 0.0, :c => 0.0, :z => 0.0 },
233
+ {:a => 0.0, :b => 0.0, :c => 1.0, :z => 1.0 },
234
+ {:a => 0.0, :b => 1.0, :c => 0.0, :z => 2.0 },
235
+ {:a => 0.0, :b => 1.0, :c => 1.0, :z => 3.0 },
236
+ {:a => 1.0, :b => 0.0, :c => 0.0, :z => 4.0 },
237
+ {:a => 1.0, :b => 0.0, :c => 1.0, :z => 5.0 },
238
+ {:a => 1.0, :b => 1.0, :c => 0.0, :z => 6.0 },
239
+ {:a => 1.0, :b => 1.0, :c => 1.0, :z => 7.0 },
240
+ ],
241
+ @mvf00.data
242
+ )
243
+ end
244
+
245
+ def test_data_pairs
246
+ result = @mvf00.data_pairs(:a, :z)
247
+ assert_equal(
248
+ [
249
+ [0.0, 0.0 ],
250
+ [0.0, 1.0 ],
251
+ [0.0, 2.0 ],
252
+ [0.0, 3.0 ],
253
+ [1.0, 4.0 ],
254
+ [1.0, 5.0 ],
255
+ [1.0, 6.0 ],
256
+ [1.0, 7.0 ],
257
+ ],
258
+ result
259
+ )
260
+
261
+ end
262
+
263
+ end
264
+