malge 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+