malge 0.0.3 → 0.0.4

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.
data/CHANGES CHANGED
@@ -1,6 +1,9 @@
1
1
  = vasputils changelog
2
2
 
3
- == Master (for 0.0.4)
3
+ == Master (for 0.0.5)
4
+
5
+ == Version 0.0.4
6
+ * Add Malge::ErrorFittedFunction and inherited classes.
4
7
 
5
8
  == Version 0.0.3
6
9
  * Add Malge::LeastSquare::a_exp_bx
data/Gemfile CHANGED
@@ -10,5 +10,5 @@ group :development do
10
10
  gem "bundler", "~> 1.2.2"
11
11
  gem "jeweler", "~> 1.8.3"
12
12
  gem "simplecov", ">= 0"
13
- #gem "psych", ">= 0"
13
+ gem "psych", ">= 0"
14
14
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -1,6 +1,11 @@
1
1
  module Malge; end
2
2
 
3
- require "malge/simultaneousequations.rb"
3
+ require "malge/errorfittedfunction.rb"
4
+ require "malge/errorfittedfunction/aexpbx.rb"
5
+ require "malge/errorfittedfunction/aexpbx32.rb"
6
+ require "malge/errorfittedfunction/axinv.rb"
7
+ require "malge/errorfittedfunction/axinv32.rb"
4
8
  require "malge/leastsquare.rb"
5
9
  require "malge/matrix.rb"
10
+ require "malge/simultaneousequations.rb"
6
11
  require "malge/vector.rb"
@@ -0,0 +1,87 @@
1
+ #! /usr/bin/env ruby
2
+ #coding: utf-8
3
+
4
+ #Class for function to which x[i] and y[i] fit.
5
+ #This class include mathematical dealing for errors.
6
+ #Not simple fitting;
7
+ #this class assume true value with the expected most precise value and
8
+ #use absolute value of difference between a data point and the assumed true value.
9
+ class Malge::ErrorFittedFunction
10
+ attr_reader :coefficients
11
+
12
+ class TypeError < Exception; end
13
+ class SizeMismatchError < Exception; end
14
+ class NotImplementedError < Exception; end
15
+
16
+ #Generate error fitted function from x[i] and y[i].
17
+ #Errors are generated y[i] and y_true assumed by the expected most precise y[i].
18
+ def initialize(data_pairs)
19
+
20
+ raise TypeError unless data_pairs.class == Array
21
+ data_pairs.each do |pair|
22
+ raise TypeError unless pair.class == Array
23
+ raise SizeMismatchError unless pair.size == 2
24
+ end
25
+
26
+ @raw_pairs = data_pairs
27
+ #pp finest_y
28
+ @diff_abs_pairs = data_pairs.map { |pair| [pair[0], (pair[1] - finest_y).abs] }
29
+ @diff_abs_pairs.delete_at(-1)
30
+ fit
31
+ end
32
+
33
+ ##Return expected error
34
+ #def expected_errors(x)
35
+ # raise NotImplementedError, "Define #{__method__}() in the inherited class."
36
+ #end
37
+
38
+ #Return expected error at x, condition variable, on the fitted function.
39
+ #Note that this method does not return the error between actual and true value.
40
+ def expected_error(x)
41
+ raise NotImplementedError, "Define #{__method__}() in the inherited class."
42
+ end
43
+
44
+ #Return variance of distribution between each pair
45
+ #of expected error and y[i], actual data point.
46
+ #Note that this method does not return variance of difference
47
+ #between each pair of TRUE value and y[i].
48
+ #Ignore last value of x[i] and y[i].
49
+ def variance
50
+ sum = 0.0
51
+ #pp @diff_abs_pairs
52
+ @diff_abs_pairs.each do |pair|
53
+ #pp pair
54
+ sum += (pair[1] - expected_error(pair[0]) )**2
55
+ end
56
+ sum
57
+ end
58
+
59
+ #Return value of 'x', assumed condition value, correspond to extpected value of 'y'.
60
+ def x(y)
61
+ raise NotImplementedError, "Define #{__method__}() in the inherited class."
62
+ end
63
+
64
+ #Return the value of y[i] at which the most precise data is expected to be obtained.
65
+ def finest_y
66
+ raise NotImplementedError, "Define #{__method__}() in the inherited class."
67
+
68
+ #In the most case, it would be sufficient to select belows.
69
+ @raw_pairs.max_by { |pair| pair[0] }[1]
70
+ @raw_pairs.min_by { |pair| pair[0] }[1]
71
+ end
72
+
73
+ private
74
+
75
+ #Fit the data pairs to a certain function.
76
+ #Call from initalize().
77
+ #You need to design to set @coefficients.
78
+ def fit
79
+ #raise NotImplementedError, "Define fit() in the inherited class."
80
+ raise NotImplementedError, "Define #{__method__}() in the inherited class."
81
+ end
82
+
83
+ #Return the most precise y[i].
84
+ #This depends on each data and function.
85
+ #E.g., does a higher or lower value lead precise?
86
+ end
87
+
@@ -0,0 +1,39 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ #Assumed y = a[0] * exp(a[1] *x)
5
+ #
6
+ #NOTE: @coefficients[0] might become negative value.
7
+ # Need discussion for dealing?
8
+ class Malge::ErrorFittedFunction::AExpBX < Malge::ErrorFittedFunction
9
+
10
+ def fit
11
+ inv_pairs = @diff_abs_pairs.map {|pair|
12
+ x = pair[0]
13
+ y = Math::log(pair[1])
14
+ [x,y]
15
+ }
16
+ @coefficients = Malge::LeastSquare.least_square_1st_degree(inv_pairs)
17
+ @coefficients[0] = Math::exp @coefficients[0]
18
+ end
19
+
20
+ def expected_error(x)
21
+ @coefficients[0] * Math::exp( @coefficients[1] * x)
22
+ end
23
+
24
+ #y = a[0] * exp(a[1] *x)
25
+ #a[0] * exp(a[1] *x) = y
26
+ #exp(a[1] *x) = y/a[0]
27
+ #a[1] *x = log( y/a[0])
28
+ #x = log( y/a[0])/a[1]
29
+ def x(y)
30
+ return Math::log( y / @coefficients[0])/@coefficients[1]
31
+ end
32
+
33
+ def finest_y
34
+ @raw_pairs.max_by { |pair| pair[0] }[1]
35
+ end
36
+
37
+ end
38
+
39
+
@@ -0,0 +1,40 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ #Assumed y = a[0] * exp(a[1] *x)
5
+ #
6
+ #NOTE: @coefficients[0] might become negative value.
7
+ # Need discussion for dealing?
8
+ class Malge::ErrorFittedFunction::AExpBX32 < Malge::ErrorFittedFunction
9
+
10
+ def fit
11
+ inv_pairs = @diff_abs_pairs.map {|pair|
12
+ x = pair[0] ** (3.0/2.0)
13
+ y = Math::log(pair[1])
14
+ [x,y]
15
+ }
16
+ @coefficients = Malge::LeastSquare.least_square_1st_degree(inv_pairs)
17
+ @coefficients[0] = Math::exp @coefficients[0]
18
+ end
19
+
20
+ def expected_error(x)
21
+ @coefficients[0] * Math::exp( @coefficients[1] * x **(3.0/2.0))
22
+ end
23
+
24
+ #y = a[0] * exp(a[1] *x^(3/2))
25
+ #a[0] * exp(a[1] *x^(3/2)) = y
26
+ #exp(a[1] *x^(3/2)) = y/a[0]
27
+ #a[1] *x^(3/2) = log( y/a[0])
28
+ #x^(3/2) = log( y/a[0])/a[1]
29
+ #x = (log( y/a[0])/a[1])^(2/3)
30
+ def x(y)
31
+ return (Math::log( y / @coefficients[0])/@coefficients[1]) **(2.0/3.0)
32
+ end
33
+
34
+ def finest_y
35
+ @raw_pairs.max_by { |pair| pair[0] }[1]
36
+ end
37
+
38
+ end
39
+
40
+
@@ -0,0 +1,32 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ #Assumed y = a[0] + a[1]/x
5
+ #
6
+ #NOTE: @coefficients[0] might become negative value.
7
+ # Need discussion for dealing?
8
+ class Malge::ErrorFittedFunction::AXInv < Malge::ErrorFittedFunction
9
+
10
+ def fit
11
+ inv_pairs = @diff_abs_pairs.map {|pair| [1.0/pair[0], pair[1]]}
12
+ @coefficients = Malge::LeastSquare.least_square_1st_degree(inv_pairs)
13
+ end
14
+
15
+ def expected_error(x)
16
+ #@coefficients[0] + @coefficients[1] * x
17
+ @coefficients[0] + @coefficients[1] * (1.0/x)
18
+ end
19
+
20
+ # y = a[0] + a[1]/x
21
+ # y - a[0] = a[1]/x
22
+ # x = a[1] / (y - a[0])
23
+ def x(y)
24
+ return @coefficients[1] / (y - @coefficients[0])
25
+ end
26
+
27
+ def finest_y
28
+ @raw_pairs.max_by { |pair| pair[0] }[1]
29
+ end
30
+
31
+ end
32
+
@@ -0,0 +1,32 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ #Assumed y = a[0] + a[1]/x^{3/2}
5
+ #
6
+ #NOTE: @coefficients[0] might become negative value.
7
+ # Need discussion for dealing?
8
+ class Malge::ErrorFittedFunction::AXInv32 < Malge::ErrorFittedFunction
9
+
10
+ def fit
11
+ inv32_pairs =
12
+ @diff_abs_pairs.map {|pair| [1.0/(pair[0] ** (3.0/2.0)), pair[1]]}
13
+ @coefficients = Malge::LeastSquare.least_square_1st_degree(inv32_pairs)
14
+ end
15
+
16
+ def expected_error(x)
17
+ @coefficients[0] + @coefficients[1] * (1.0/(x** (3.0/2.0)))
18
+ end
19
+
20
+ # y = a[0] + a[1]/x
21
+ # y - a[0] = a[1]/x
22
+ # x = a[1] / (y - a[0])
23
+ def x(y)
24
+ return (@coefficients[1] / (y - @coefficients[0])) ** (2.0/3.0)
25
+ end
26
+
27
+ def finest_y
28
+ @raw_pairs.max_by { |pair| pair[0] }[1]
29
+ end
30
+
31
+ end
32
+
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "malge"
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["ippei94da"]
12
- s.date = "2013-02-08"
12
+ s.date = "2013-02-14"
13
13
  s.description = "Mathematical library to deal with basic problems in algebla.\n "
14
14
  s.email = "ippei94da@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -25,19 +25,29 @@ Gem::Specification.new do |s|
25
25
  "Rakefile",
26
26
  "VERSION",
27
27
  "lib/malge.rb",
28
+ "lib/malge/errorfittedfunction.rb",
29
+ "lib/malge/errorfittedfunction/aexpbx.rb",
30
+ "lib/malge/errorfittedfunction/aexpbx32.rb",
31
+ "lib/malge/errorfittedfunction/axinv.rb",
32
+ "lib/malge/errorfittedfunction/axinv32.rb",
28
33
  "lib/malge/leastsquare.rb",
29
34
  "lib/malge/matrix.rb",
30
35
  "lib/malge/simultaneousequations.rb",
31
36
  "lib/malge/vector.rb",
32
37
  "malge.gemspec",
33
38
  "test/helper.rb",
39
+ "test/test_errorfittedfunction.rb",
40
+ "test/test_errorfittedfunction_aexpbx.rb",
41
+ "test/test_errorfittedfunction_aexpbx32.rb",
42
+ "test/test_errorfittedfunction_axinv.rb",
43
+ "test/test_errorfittedfunction_axinv32.rb",
34
44
  "test/test_leastsquare.rb",
35
45
  "test/test_simultaneousequations.rb"
36
46
  ]
37
47
  s.homepage = "http://github.com/ippei94da/malge"
38
48
  s.licenses = ["MIT"]
39
49
  s.require_paths = ["lib"]
40
- s.rubygems_version = "1.8.11"
50
+ s.rubygems_version = "1.8.23"
41
51
  s.summary = "Math ALGEbra library."
42
52
 
43
53
  if s.respond_to? :specification_version then
@@ -48,17 +58,20 @@ Gem::Specification.new do |s|
48
58
  s.add_development_dependency(%q<bundler>, ["~> 1.2.2"])
49
59
  s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
50
60
  s.add_development_dependency(%q<simplecov>, [">= 0"])
61
+ s.add_development_dependency(%q<psych>, [">= 0"])
51
62
  else
52
63
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
53
64
  s.add_dependency(%q<bundler>, ["~> 1.2.2"])
54
65
  s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
55
66
  s.add_dependency(%q<simplecov>, [">= 0"])
67
+ s.add_dependency(%q<psych>, [">= 0"])
56
68
  end
57
69
  else
58
70
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
59
71
  s.add_dependency(%q<bundler>, ["~> 1.2.2"])
60
72
  s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
61
73
  s.add_dependency(%q<simplecov>, [">= 0"])
74
+ s.add_dependency(%q<psych>, [">= 0"])
62
75
  end
63
76
  end
64
77
 
@@ -0,0 +1,87 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "test/unit"
5
+ require "malge.rb"
6
+ require "malge/errorfittedfunction.rb"
7
+
8
+ class Malge::ErrorFittedFunction::Dummy00 < Malge::ErrorFittedFunction
9
+ def fit; end
10
+ end
11
+
12
+ class Malge::ErrorFittedFunction::Dummy01 < Malge::ErrorFittedFunction
13
+ def expected_error(x)
14
+ @coefficients[0] + @coefficients[1] * x
15
+ end
16
+
17
+ #Assume: y = 1.0 + 2.0 * x
18
+ #x = 1/2( y - 1.0)
19
+ def x(y)
20
+ return 1.0/2.0 * (y - 1.0)
21
+ end
22
+
23
+ #Assume: y = 1.0 + 2.0 * x
24
+ def fit
25
+ @coefficients = [1.0, 2.0]
26
+ end
27
+
28
+ def finest_y
29
+ #max
30
+ finest_pair = @raw_pairs.max_by { |pair| pair[0] }
31
+ finest_pair[1]
32
+
33
+ #@raw_pairs[x][1]
34
+ end
35
+
36
+ end
37
+
38
+ class TC_ErrorFittedFunction < Test::Unit::TestCase
39
+ def setup
40
+ #@eff00 = Malge::ErrorFittedFunction::Dummy00.new([], [])
41
+ @eff01 = Malge::ErrorFittedFunction::Dummy01.new(
42
+ #2x+1 = 1, -1
43
+ #2x+1 = 3, +2
44
+ #2x+1 = 5, -1
45
+ #[0.0, 1.0, 2.0],
46
+ #[0.0, 5.0, 4.0]
47
+ [
48
+ [0.0, 0.0],
49
+ [1.0, 5.0],
50
+ [2.0, 4.0],
51
+ ]
52
+ )
53
+ end
54
+
55
+ def test_variance
56
+ assert_equal(13.0, @eff01.variance)
57
+ #diff_abs = [4,1]
58
+ #expected = [1,3]
59
+ end
60
+
61
+ def test_expected_error
62
+ assert_equal(1.0, @eff01.expected_error(0.0))
63
+ assert_equal(3.0, @eff01.expected_error(1.0))
64
+ assert_equal(5.0, @eff01.expected_error(2.0))
65
+ end
66
+
67
+ def test_initialize
68
+ assert_raise(Malge::ErrorFittedFunction::NotImplementedError){
69
+ Malge::ErrorFittedFunction.new([])
70
+ }
71
+ assert_raise(Malge::ErrorFittedFunction::SizeMismatchError){
72
+ Malge::ErrorFittedFunction.new([[1,2], [1,3, 3]])
73
+ }
74
+ assert_raise(Malge::ErrorFittedFunction::TypeError){
75
+ Malge::ErrorFittedFunction.new([2, [1,2,3]])
76
+ }
77
+ assert_raise(Malge::ErrorFittedFunction::TypeError){
78
+ Malge::ErrorFittedFunction.new([[1,2], 1])
79
+ }
80
+ end
81
+
82
+ def test_finest_y
83
+ assert_equal(4.0, @eff01.finest_y)
84
+ end
85
+
86
+ end
87
+
@@ -0,0 +1,73 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "test/unit"
5
+ require "malge.rb"
6
+ require "malge/errorfittedfunction.rb"
7
+
8
+ class Malge::ErrorFittedFunction::AExpBX
9
+ public :fit
10
+ end
11
+
12
+ class TC_ErrorFittedFunction_AExpBX < Test::Unit::TestCase
13
+ TOLERANCE = 1.0E-10
14
+ def setup
15
+ @aebx00 = Malge::ErrorFittedFunction::AExpBX.new(
16
+ [
17
+ [ 0.0, 104.0],
18
+ [ 1.0, 102.0],
19
+ [ 2.0, 101.0],
20
+ [ 3.0, 100.0],
21
+ ]
22
+ )
23
+
24
+ @aebx01 = Malge::ErrorFittedFunction::AExpBX.new(
25
+ [
26
+ [ 0.0, 104.0],
27
+ [ 1.0, 98.0],
28
+ [ 2.0, 101.0],
29
+ [ 3.0, 100.0],
30
+ ]
31
+ )
32
+ end
33
+
34
+ #def test_initialize
35
+ #end
36
+
37
+ def test_fit
38
+ corrects = [4.0, - Math::log(2.0)]
39
+ results = @aebx00.coefficients
40
+ assert_equal(2, results.size)
41
+ assert_in_delta(corrects[0] , results[0], TOLERANCE)
42
+ assert_in_delta(corrects[1] , results[1], TOLERANCE)
43
+
44
+ results = @aebx01.coefficients
45
+ corrects = [4.0, - Math::log(2.0)]
46
+ assert_equal(2, results.size)
47
+ assert_in_delta(corrects[0] , results[0], TOLERANCE)
48
+ assert_in_delta(corrects[1] , results[1], TOLERANCE)
49
+ end
50
+
51
+ def test_expected_error
52
+ assert_in_delta(4.0, @aebx00.expected_error(0.0), TOLERANCE)
53
+ assert_in_delta(2.0, @aebx00.expected_error(1.0), TOLERANCE)
54
+ assert_in_delta(1.0, @aebx00.expected_error(2.0), TOLERANCE)
55
+ assert_in_delta(0.5, @aebx00.expected_error(3.0), TOLERANCE)
56
+ end
57
+
58
+ def test_finest_y
59
+ assert_equal(100.0, @aebx00.finest_y)
60
+ end
61
+
62
+ def test_variance
63
+ assert_in_delta( 0.0, @aebx00.variance, TOLERANCE)
64
+ #diff_abs = [4,1]
65
+ #expected = [1,3]
66
+ end
67
+
68
+ def test_x
69
+ assert_in_delta(1.0, @aebx00.x(2.0), TOLERANCE)
70
+ end
71
+
72
+ end
73
+
@@ -0,0 +1,92 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "test/unit"
5
+ require "malge.rb"
6
+ #require "malge/errorfittedfunction.rb"
7
+
8
+ class Malge::ErrorFittedFunction::AExpBX32
9
+ public :fit
10
+ end
11
+
12
+ class TC_ErrorFittedFunction_AExpBX32 < Test::Unit::TestCase
13
+ TOLERANCE = 1.0E-09 #very large error in calculation at x()
14
+ def setup
15
+ @aebx00 = Malge::ErrorFittedFunction::AExpBX32.new(
16
+ [
17
+ [ 0.0, 100.0 + 3.0* 2.0**(-2.0 * 0 )],
18
+ [ 1.0, 100.0 + 3.0* 2.0**(-2.0 * 1.0 ) ],
19
+ [ 2.0, 100.0 + 3.0* 2.0**(-2.0 * (2.0**(3.0/2.0)))],
20
+ [ 3.0, 100.0 ],
21
+ ]
22
+ )
23
+
24
+ @aebx01 = Malge::ErrorFittedFunction::AExpBX32.new(
25
+ [
26
+ [ 0.0, 100.0 + 3.0* 2.0**(-2.0 * 0 )],
27
+ [ 1.0, 100.0 - 3.0* 2.0**(-2.0 * 1.0 ) ],
28
+ [ 2.0, 100.0 + 3.0* 2.0**(-2.0 * (2.0**(3.0/2.0)))],
29
+ [ 3.0, 100.0 ],
30
+ ]
31
+ )
32
+ end
33
+
34
+ #def test_initialize
35
+ #end
36
+
37
+ def test_fit
38
+ corrects = [3.0, - 2.0*Math::log(2.0)]
39
+ results = @aebx00.coefficients
40
+ assert_equal(2, results.size)
41
+ assert_in_delta(corrects[0] , results[0], TOLERANCE)
42
+ assert_in_delta(corrects[1] , results[1], TOLERANCE)
43
+
44
+ corrects = [3.0, - 2.0*Math::log(2.0)]
45
+ results = @aebx01.coefficients
46
+ assert_equal(2, results.size)
47
+ assert_in_delta(corrects[0] , results[0], TOLERANCE)
48
+ assert_in_delta(corrects[1] , results[1], TOLERANCE)
49
+ end
50
+
51
+ def test_expected_error
52
+ corrects =
53
+ [
54
+ 3.0* 2.0**(-2.0 * 0.0) ,
55
+ 3.0* 2.0**(-2.0 * 1.0),
56
+ 3.0* 2.0**(-2.0 * (2.0**(3.0/2.0)))
57
+ ]
58
+ assert_in_delta(corrects[0], @aebx00.expected_error(0.0), TOLERANCE)
59
+ assert_in_delta(corrects[1], @aebx00.expected_error(1.0), TOLERANCE)
60
+ assert_in_delta(corrects[2], @aebx00.expected_error(2.0), TOLERANCE)
61
+
62
+ corrects =
63
+ [
64
+ 3.0* 2.0**(-2.0 * 0.0) ,
65
+ 3.0* 2.0**(-2.0 * 1.0),
66
+ 3.0* 2.0**(-2.0 * (2.0**(3.0/2.0)))
67
+ ]
68
+ assert_in_delta(corrects[0], @aebx01.expected_error(0.0), TOLERANCE)
69
+ assert_in_delta(corrects[1], @aebx01.expected_error(1.0), TOLERANCE)
70
+ assert_in_delta(corrects[2], @aebx01.expected_error(2.0), TOLERANCE)
71
+
72
+ end
73
+
74
+ def test_finest_y
75
+ assert_equal(100.0, @aebx00.finest_y)
76
+ assert_equal(100.0, @aebx01.finest_y)
77
+ end
78
+
79
+ def test_variance
80
+ assert_in_delta( 0.0, @aebx00.variance, TOLERANCE)
81
+ assert_in_delta( 0.0, @aebx01.variance, TOLERANCE)
82
+ end
83
+
84
+ def test_x
85
+ assert_in_delta(0.0, @aebx00.x(3.00), TOLERANCE)
86
+ assert_in_delta(1.0, @aebx00.x(0.75), TOLERANCE)
87
+ assert_in_delta(0.0, @aebx01.x(3.00), TOLERANCE)
88
+ assert_in_delta(1.0, @aebx01.x(0.75), TOLERANCE)
89
+ end
90
+
91
+ end
92
+
@@ -0,0 +1,57 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "test/unit"
5
+ require "malge.rb"
6
+ require "malge/errorfittedfunction.rb"
7
+
8
+ #class Malge::ErrorFittedFunction::AXInv
9
+ # public :fit
10
+ #end
11
+
12
+ class TC_ErrorFittedFunction_AXInv < Test::Unit::TestCase
13
+ def setup
14
+ @axi01 = Malge::ErrorFittedFunction::AXInv.new(
15
+ #2x+1 = 1, -1
16
+ #2x+1 = 3, +2
17
+ #2x+1 = 5, -1
18
+ #[0.0, 1.0, 2.0],
19
+ #[0.0, 5.0, 4.0]
20
+ [
21
+ [1.0, 8.0],
22
+ [2.0, 6.0],
23
+ [4.0, 5.0],
24
+ [8.0, 4.0],
25
+ ]
26
+ )
27
+ end
28
+
29
+ #def test_initialize
30
+ #end
31
+
32
+ #def test_fit
33
+ #end
34
+
35
+ def test_expected_error
36
+ assert_equal(4.0, @axi01.expected_error(1.0))
37
+ assert_equal(2.0, @axi01.expected_error(2.0))
38
+ assert_equal(1.0, @axi01.expected_error(4.0))
39
+ assert_equal(0.5, @axi01.expected_error(8.0))
40
+ end
41
+
42
+ def test_finest_y
43
+ assert_equal(4.0, @axi01.finest_y)
44
+ end
45
+
46
+ def test_variance
47
+ assert_equal( 0.0, @axi01.variance)
48
+ #diff_abs = [4,1]
49
+ #expected = [1,3]
50
+ end
51
+
52
+ def test_x
53
+ assert_equal(2.0, @axi01.x(2.0))
54
+ end
55
+
56
+ end
57
+
@@ -0,0 +1,71 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "test/unit"
5
+ require "malge.rb"
6
+ #require "malge/errorfittedfunction.rb"
7
+
8
+ #class Malge::ErrorFittedFunction::AXInv32
9
+ # public :fit
10
+ #end
11
+
12
+ class TC_ErrorFittedFunction_AXInv32 < Test::Unit::TestCase
13
+ TOLERANCE = 1.0E-10
14
+
15
+ def setup
16
+ @axi00 = Malge::ErrorFittedFunction::AXInv32.new(
17
+ [
18
+ [ 1, 164.0],
19
+ [ 4, 108.0],
20
+ [16, 101.0],
21
+ [64, 100.0],
22
+ ]
23
+ )
24
+
25
+ @axi01 = Malge::ErrorFittedFunction::AXInv32.new(
26
+ [
27
+ [ 1, 164.0],
28
+ [ 4, 92.0],
29
+ [16, 101.0],
30
+ [64, 100.0],
31
+ ]
32
+ )
33
+
34
+ end
35
+
36
+ #def test_initialize
37
+ #end
38
+
39
+ def test_fit
40
+ corrects = [0.0, 64.0]
41
+ results = @axi00.coefficients
42
+ assert_in_delta(corrects[0], results[0], TOLERANCE)
43
+ assert_in_delta(corrects[1], results[1], TOLERANCE)
44
+ end
45
+
46
+ def test_expected_error
47
+ assert_equal(64.0, @axi00.expected_error(1.0))
48
+ assert_equal( 8.0, @axi00.expected_error(4.0))
49
+ assert_equal( 1.0, @axi00.expected_error(16.0))
50
+
51
+ assert_equal(64.0, @axi01.expected_error(1.0))
52
+ assert_equal( 8.0, @axi01.expected_error(4.0))
53
+ assert_equal( 1.0, @axi01.expected_error(16.0))
54
+ end
55
+
56
+ def test_finest_y
57
+ assert_equal(100.0, @axi00.finest_y)
58
+ assert_equal(100.0, @axi01.finest_y)
59
+ end
60
+
61
+ def test_variance
62
+ assert_equal( 0.0, @axi00.variance)
63
+ assert_equal( 0.0, @axi01.variance)
64
+ end
65
+
66
+ def test_x
67
+ assert_in_delta(16.0, @axi00.x(1.0), TOLERANCE)
68
+ end
69
+
70
+ end
71
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: malge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-08 00:00:00.000000000 Z
12
+ date: 2013-02-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rdoc
16
- requirement: &86230380 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '3.12'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *86230380
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '3.12'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: bundler
27
- requirement: &86229650 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 1.2.2
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *86229650
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.2.2
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: jeweler
38
- requirement: &86229110 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: 1.8.3
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *86229110
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.8.3
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: simplecov
49
- requirement: &86228170 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,7 +69,28 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *86228170
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: psych
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
58
94
  description: ! "Mathematical library to deal with basic problems in algebla.\n "
59
95
  email: ippei94da@gmail.com
60
96
  executables: []
@@ -71,12 +107,22 @@ files:
71
107
  - Rakefile
72
108
  - VERSION
73
109
  - lib/malge.rb
110
+ - lib/malge/errorfittedfunction.rb
111
+ - lib/malge/errorfittedfunction/aexpbx.rb
112
+ - lib/malge/errorfittedfunction/aexpbx32.rb
113
+ - lib/malge/errorfittedfunction/axinv.rb
114
+ - lib/malge/errorfittedfunction/axinv32.rb
74
115
  - lib/malge/leastsquare.rb
75
116
  - lib/malge/matrix.rb
76
117
  - lib/malge/simultaneousequations.rb
77
118
  - lib/malge/vector.rb
78
119
  - malge.gemspec
79
120
  - test/helper.rb
121
+ - test/test_errorfittedfunction.rb
122
+ - test/test_errorfittedfunction_aexpbx.rb
123
+ - test/test_errorfittedfunction_aexpbx32.rb
124
+ - test/test_errorfittedfunction_axinv.rb
125
+ - test/test_errorfittedfunction_axinv32.rb
80
126
  - test/test_leastsquare.rb
81
127
  - test/test_simultaneousequations.rb
82
128
  homepage: http://github.com/ippei94da/malge
@@ -94,7 +140,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
140
  version: '0'
95
141
  segments:
96
142
  - 0
97
- hash: -142397791
143
+ hash: 215000701
98
144
  required_rubygems_version: !ruby/object:Gem::Requirement
99
145
  none: false
100
146
  requirements:
@@ -103,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
149
  version: '0'
104
150
  requirements: []
105
151
  rubyforge_project:
106
- rubygems_version: 1.8.11
152
+ rubygems_version: 1.8.23
107
153
  signing_key:
108
154
  specification_version: 3
109
155
  summary: Math ALGEbra library.