integration 0.1.0 → 0.1.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7ad161dae6d8cd737f33db6844ab3f345c95fb82
4
+ data.tar.gz: d098810e0c476442e1495586d229251fffd37d9c
5
+ SHA512:
6
+ metadata.gz: e2ad2678eb811bf5ae28f81e1d7e59fa118b4bef2ba995155f9ac3be109ee9caca9ea54479f86924e49edbf5fcacbf2c8831f6cf64d53b562df7e8af2b75791c
7
+ data.tar.gz: d258396d5f21736dd665afc554b2b086cb39ab4126f996fd77ddf7bd54c1c0b11e62cb02a02b5457d8e765cac9e1311e5d6d629ce8145aacebfd066dcca56280
@@ -0,0 +1,3 @@
1
+ *~
2
+ coverage/*
3
+ pkg/*
@@ -1,3 +1,2 @@
1
1
  --color
2
- -f s
3
2
  -b
@@ -0,0 +1,15 @@
1
+ language: ruby
2
+ rvm:
3
+ - '1.9.3'
4
+ - '2.0.0'
5
+ - '2.1.1'
6
+ # - jruby-19mode # JRuby in 1.9 mode -> Problems with bigint
7
+ # - rbx-19mode
8
+ # script: bundle exec rspec spec
9
+
10
+ script:
11
+ bundle exec rspec
12
+
13
+ before_install:
14
+ - sudo apt-get update -qq
15
+ - sudo apt-get install -y libgsl0-dev
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "https://www.rubygems.org"
2
+ gem "rspec", '~>3.0'
3
+ gem "rb-gsl", :platforms=>[:mri, :mswin, :mingw]
4
+
5
+ gemspec
@@ -0,0 +1,38 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ integration (0.1.1)
5
+ rb-gsl (~> 1.2)
6
+ text-table (~> 1.2)
7
+
8
+ GEM
9
+ remote: https://www.rubygems.org/
10
+ specs:
11
+ diff-lcs (1.2.5)
12
+ narray (0.6.0.9)
13
+ rake (10.3.2)
14
+ rb-gsl (1.16.0.2)
15
+ narray (>= 0.5.9)
16
+ rspec (3.0.0)
17
+ rspec-core (~> 3.0.0)
18
+ rspec-expectations (~> 3.0.0)
19
+ rspec-mocks (~> 3.0.0)
20
+ rspec-core (3.0.3)
21
+ rspec-support (~> 3.0.0)
22
+ rspec-expectations (3.0.3)
23
+ diff-lcs (>= 1.2.0, < 2.0)
24
+ rspec-support (~> 3.0.0)
25
+ rspec-mocks (3.0.3)
26
+ rspec-support (~> 3.0.0)
27
+ rspec-support (3.0.3)
28
+ text-table (1.2.3)
29
+
30
+ PLATFORMS
31
+ ruby
32
+
33
+ DEPENDENCIES
34
+ bundler (~> 1.3)
35
+ integration!
36
+ rake (~> 10)
37
+ rb-gsl
38
+ rspec (~> 3.0)
@@ -1,3 +1,5 @@
1
+ === 0.2.0 / 2014-08-09
2
+ * New version, with methods ruby methods: rectangle,:trapezoid,:simpson, :adaptive_quadrature , :gauss, :romberg, :monte_carlo, :gauss_kronrod, :simpson3by8, :boole, :open_trapezoid, :milne
1
3
  === 0.1.0 / 2011-08-23
2
4
 
3
5
  * Get code from http://rubyforge.org/projects/integral/ and converted to a gem.
@@ -1,19 +1,19 @@
1
- = integration
1
+ # integration
2
2
 
3
3
  * http://github.com/clbustos/integration
4
4
 
5
- == DESCRIPTION:
5
+ ## DESCRIPTION:
6
6
 
7
7
  Numerical integration for Ruby, with a simple interface
8
8
 
9
- == FEATURES/PROBLEMS:
9
+ ## FEATURES/PROBLEMS:
10
10
 
11
11
  * Use only one method: Integration.integrate
12
12
  * Rectangular, Trapezoidal, Simpson, Adaptive quadrature, Monte Carlo and Romberg integration methods available on pure Ruby.
13
13
  * If available, uses Ruby/GSL QNG non-adaptive Gauss-Kronrod integration and QAG adaptive integration, with support for Infinity+ and Infinity-
14
14
 
15
15
 
16
- == SYNOPSIS:
16
+ ## SYNOPSIS:
17
17
 
18
18
  Integration.integrate(1,2,{:tolerance=>1e-10,:method=>:simpson}) {|x| x**2} => 2.333333
19
19
 
@@ -23,18 +23,18 @@ Numerical integration for Ruby, with a simple interface
23
23
  Integration.integrate(Integration::MInfinity, 0 , {:tolerance=>1e-10}, &normal_pdf) => 0.5
24
24
  Integration.integrate(0, Integration::Infinity , {:tolerance=>1e-10}, &normal_pdf) => 0.5
25
25
 
26
- == REQUIREMENTS:
26
+ ## REQUIREMENTS:
27
27
 
28
28
  * Ruby/GSL, for better performance and support for infinite bounds
29
29
 
30
- == INSTALL:
30
+ ## INSTALL:
31
31
 
32
32
  gem install integration
33
33
 
34
- == LICENSE:
34
+ ## LICENSE:
35
35
 
36
36
  Copyright (c) 2005 Beng
37
- 2011 clbustos
37
+ 2011.2014 clbustos
38
38
 
39
39
  Permission is hereby granted, free of charge, to any person obtaining a
40
40
  copy of this software and associated documentation files (the "Software"),
data/Rakefile CHANGED
@@ -1,23 +1,45 @@
1
1
  # -*- ruby -*-
2
2
  $:.unshift(File.expand_path(File.dirname(__FILE__)+"/lib/"))
3
3
  require 'rubygems'
4
- require 'hoe'
5
4
  require 'integration'
6
- require 'rubyforge'
7
- # Hoe.plugin :compiler
8
- # Hoe.plugin :gem_prelude_sucks
9
- Hoe.plugin :git
10
- # Hoe.plugin :inline
11
- # Hoe.plugin :racc
12
- # Hoe.plugin :rubyforge
13
-
14
- Hoe.spec 'integration' do
15
- self.developer('Ben Gimpert', 'NO_EMAIL')
16
- self.developer('Claudio Bustos', 'clbustos_at_gmail.com')
17
- self.version=Integration::VERSION
18
- self.extra_dev_deps << ["rspec",">=2.0"] << ["rubyforge",">=0"]
5
+ require 'bundler'
19
6
 
7
+ Bundler::GemHelper.install_tasks
8
+
9
+
10
+ gemspec = eval(IO.read("integration.gemspec"))
11
+
12
+
13
+ begin
14
+ Bundler.setup(:default, :development)
15
+ rescue Bundler::BundlerError => e
16
+ $stderr.puts e.message
17
+ $stderr.puts "Run `bundle install` to install missing gems"
18
+ exit e.status_code
20
19
  end
21
- # git log --pretty=format:"*%s[%cn]" v0.5.0..HEAD >> History.txt
22
- # vim: syntax=ruby
23
20
 
21
+
22
+
23
+ require "rubygems/package_task"
24
+ Gem::PackageTask.new(gemspec).define
25
+
26
+ desc "install the gem locally"
27
+ task :install => [:package] do
28
+ sh %{gem install pkg/integration-#{Integration::VERSION}.gem}
29
+ end
30
+
31
+ require 'rspec/core/rake_task'
32
+ require 'rspec/core'
33
+ require 'rspec/core/rake_task'
34
+ RSpec::Core::RakeTask.new(:spec) do |spec|
35
+ spec.pattern = FileList['spec/**/*_spec.rb']
36
+ end
37
+
38
+
39
+ desc "Open an irb session preloaded with integration"
40
+ task :console do
41
+ sh "irb -rubygems -I lib -r integration.rb"
42
+ end
43
+
44
+ task :default => :spec
45
+ # vim: syntax=ruby
@@ -0,0 +1,24 @@
1
+ # Comparing the accuracy of different integraiton methods
2
+ # text table is required to display the results in a nice table
3
+ require 'integration'
4
+ require 'text-table'
5
+
6
+ # put the funtion you want to benchmark here
7
+ func = lambda{|x| x}
8
+ #put the actual result of the integration here
9
+ actual_result = 5/2.0 + 2* Math::sin(1)
10
+
11
+ table = Text::Table.new
12
+ table.head = ['Method','Result','Actual Result','Error','Accuracy']
13
+
14
+ for method in [:rectangle,:trapezoid,:simpson,:romberg,:adaptive_quadrature, :gauss, :gauss_kronrod, :simpson3by8, :boole, :open_trapezoid, :milne,:qng, :qag]
15
+ result = Integration.integrate(0,1,{:method=>method},&func)
16
+ if result == nil
17
+ puts method
18
+ else
19
+ error = (actual_result-result).abs
20
+ table.rows << [method,result,actual_result,error,100*(1-error/actual_result.to_f)]
21
+ end
22
+ end
23
+ puts table.to_s
24
+
@@ -0,0 +1,20 @@
1
+ # Checking the speed of different integraiton methods
2
+
3
+ require 'benchmark'
4
+ require 'integration'
5
+
6
+ # set the number of iterations
7
+ iterations = 100
8
+ puts "Benchmarking with #{iterations} iterations"
9
+
10
+ # put the function to be benchmarked here
11
+ func = lambda{|x| x}
12
+ for method in [:rectangle,:trapezoid,:simpson,:romberg, :adaptive_quadrature, :gauss, :gauss_kronrod, :simpson3by8, :boole, :open_trapezoid, :milne, :qng, :qag]
13
+ Benchmark.bm(25) do |bm|
14
+ bm.report(method.to_s) do
15
+ iterations.times do
16
+ Integration.integrate(0,1,{:method=>method},&func)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib/', __FILE__)
3
+ $:.unshift lib unless $:.include?(lib)
4
+
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "integration"
8
+ s.version = "0.1.1"
9
+ s.authors = ["Claudio Bustos","Ben Gimpert"]
10
+ s.description = "Numerical integration for Ruby, with a simple interface"
11
+ s.email = ["clbustos@gmail.com", "No Email"]
12
+ s.files = `git ls-files`.split("\n")
13
+ s.test_files = `git ls-files -- {test,spec,features,benchmark}/*`.split("\n")
14
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
15
+ s.require_paths = ["lib"]
16
+ s.summary = "A suite for integration in Ruby"
17
+ s.add_runtime_dependency 'text-table', '~>1.2'
18
+ s.add_runtime_dependency 'rb-gsl', '~>1.2'
19
+ s.add_development_dependency 'rake', '~>10'
20
+ s.add_development_dependency 'bundler', '~>1.3'
21
+ s.add_development_dependency 'rspec', '~>2.0'
22
+ end
@@ -1,6 +1,6 @@
1
1
  # Copyright (c) 2005 Beng (original code)
2
- # 2011 clbustos
3
- #
2
+ # 2011 Claudio Bustos
3
+ # XXXX -> Add new developers
4
4
  # Permission is hereby granted, free of charge, to any person obtaining a
5
5
  # copy of this software and associated documentation files (the "Software"),
6
6
  # to deal in the Software without restriction, including without limitation
@@ -30,7 +30,7 @@
30
30
  #
31
31
 
32
32
  class Integration
33
- VERSION = '0.1.0'
33
+ VERSION = '0.2.0'
34
34
  # Minus Infinity
35
35
  MInfinity=:minfinity
36
36
  # Infinity
@@ -54,65 +54,80 @@ class Integration
54
54
  class_variable_get(cv)
55
55
  end
56
56
  end
57
-
58
57
  # Rectangle method
59
58
  # +n+ implies number of subdivisions
60
- def rectangle(t1, t2, n)
61
- total_area = 0
62
- t = t1
63
- dt = (t2 - t1) / n.to_f
64
- dt_half = dt / 2
65
-
66
- while (t + dt_half) <= t2
67
- height = yield(t + dt_half)
68
- area = dt * height
69
- total_area += area
70
- t += dt
71
- end
72
- return total_area
73
-
59
+ # Source:
60
+ # * Ayres : Outline of calculus
61
+ def rectangle(t1, t2, n, &f)
62
+ d=(t2-t1) / n.to_f
63
+ n.times.inject(0) {|ac,i|
64
+ ac+f[t1+d*(i+0.5)]
65
+ }*d
74
66
  end
75
67
  alias_method :midpoint, :rectangle
76
-
77
- def trapezoid(t1, t2, n)
78
- total_area = 0
79
- t = t1
80
- dt = (t2 - t1) / n.to_f
81
- prev_height = nil
82
- while (t + dt) <= t2
83
- if prev_height.nil?
84
- height1 = yield(t)
85
- else
86
- height1 = prev_height
87
- end
88
- height2 = yield(t + dt)
89
- area = dt * ((height1 + height2) / 2)
90
- total_area += area
91
- t += dt
92
- prev_height = height2
93
- end
94
- return total_area
68
+ # Trapezoid method
69
+ # +n+ implies number of subdivisions
70
+ # Source:
71
+ # * Ayres : Outline of calculus
72
+ def trapezoid(t1, t2, n, &f)
73
+ d=(t2-t1) / n.to_f
74
+ (d/2.0)*(f[t1]+
75
+ 2*(1..(n-1)).inject(0){|ac,i|
76
+ ac+f[t1+d*i]
77
+ }+f[t2])
95
78
  end
96
-
97
- def simpson(t1, t2, n)
79
+ # Simpson's rule
80
+ # +n+ implies number of subdivisions
81
+ # Source:
82
+ # * Ayres : Outline of calculus
83
+ def simpson(t1, t2, n, &f)
98
84
  n += 1 unless n % 2 == 0
99
- dt = (t2.to_f - t1) / n
100
- total_area = 0
101
- (0..n).each do |i|
102
- t = t1 + (dt * i)
103
- if i.zero? || (i == n)
104
- total_area += yield(t)
105
- elsif i % 2 == 0
106
- total_area += 2 * yield(t)
107
- else
108
- total_area += 4 * yield(t)
109
- end
85
+ d=(t2-t1) / n.to_f
86
+ out= (d / 3.0)*(f[t1.to_f].to_f+
87
+ ((1..(n-1)).inject(0) {|ac,i|
88
+ ac+((i%2==0) ? 2 : 4)*f[t1+d*i]
89
+ })+f[t2.to_f].to_f)
90
+ out
91
+ end
92
+ # TODO: Document method
93
+ def simpson3by8(t1, t2, n, &f)
94
+ d = (t2-t1) / n.to_f
95
+ ac = 0
96
+ (0..n-1).each do |i|
97
+ ac+=(d/8.0)*(f[t1+i*d]+3*f[t1+i*d+d/3]+3*f[t1+i*d+2*d/3]+f[t1+(i+1)*d])
98
+ end
99
+ ac
100
+ end
101
+ # TODO: Document method
102
+ def boole(t1, t2, n, &f)
103
+ d = (t2-t1) / n.to_f
104
+ ac = 0
105
+ (0..n-1).each do |i|
106
+ ac+=(d/90.0)*(7*f[t1+i*d]+32*f[t1+i*d+d/4]+12*f[t1+i*d+d/2]+32*f[t1+i*d+3*d/4]+7*f[t1+(i+1)*d])
107
+ end
108
+ ac
109
+ end
110
+
111
+ # TODO: Document method
112
+ def open_trapezoid(t1, t2, n, &f)
113
+ d = (t2-t1) / n.to_f
114
+ ac = 0
115
+ (0..n-1).each do |i|
116
+ ac+=(d/2.0)*(f[t1+i*d+d/3]+f[t1+i*d+2*d/3])
110
117
  end
111
- total_area *= dt / 3
112
- return total_area
118
+ ac
113
119
  end
114
-
115
- def adaptive_quadrature(a, b, tolerance)
120
+ # TODO: Document method
121
+ def milne(t1, t2, n, &f)
122
+ d = (t2-t1) / n.to_f
123
+ ac = 0
124
+ (0..n-1).each do |i|
125
+ ac+=(d/3.0)*(2*f[t1+i*d+d/4]-f[t1+i*d+d/2]+2*f[t1+i*d+3*d/4])
126
+ end
127
+ ac
128
+ end
129
+ # TODO: Document method
130
+ def adaptive_quadrature(a, b, tolerance)
116
131
  h = (b.to_f - a) / 2
117
132
  fa = yield(a)
118
133
  fc = yield(a + h)
@@ -136,7 +151,7 @@ class Integration
136
151
  }
137
152
  return helper.call(a, b, fa, fb, fc, h, s, 1)
138
153
  end
139
-
154
+ # TODO: Document method
140
155
  def gauss(t1, t2, n)
141
156
  case n
142
157
  when 1
@@ -172,41 +187,72 @@ class Integration
172
187
  else
173
188
  raise "Invalid number of spaced abscissas #{n}, should be 1-10"
174
189
  end
190
+
175
191
  sum = 0
176
192
  (0...n).each do |i|
177
- t = ((t1.to_f + t2) / 2) + (((t2 - t1) / 2) * z[i])
193
+ t = ((t1.to_f + t2) / 2.0) + (((t2 - t1) / 2.0) * z[i])
178
194
  sum += w[i] * yield(t)
179
195
  end
180
196
  return ((t2 - t1) / 2.0) * sum
181
197
  end
182
-
183
- def romberg(a, b, tolerance)
198
+ # TODO: Document method
199
+ def gauss_kronrod(t1,t2,n,points)
200
+ #g7k15
201
+ case points
202
+ when 15
203
+ z = [-0.9914553711208126, -0.9491079123427585, -0.8648644233597691, -0.7415311855993945, -0.5860872354676911, -0.4058451513773972, -0.20778495500789848, 0.0, 0.20778495500789848, 0.4058451513773972, 0.5860872354676911, 0.7415311855993945, 0.8648644233597691, 0.9491079123427585, 0.9914553711208126]
204
+ w = [0.022935322010529224, 0.06309209262997856, 0.10479001032225019, 0.14065325971552592, 0.1690047266392679, 0.19035057806478542, 0.20443294007529889, 0.20948214108472782, 0.20443294007529889, 0.19035057806478542, 0.1690047266392679, 0.14065325971552592, 0.10479001032225019, 0.06309209262997856, 0.022935322010529224]
205
+ when 21
206
+ #g10k21
207
+ z = [-0.9956571630258081, -0.9739065285171717, -0.9301574913557082, -0.8650633666889845, -0.7808177265864169, -0.6794095682990244, -0.5627571346686047, -0.4333953941292472, -0.2943928627014602, -0.14887433898163122, 0.0, 0.14887433898163122, 0.2943928627014602, 0.4333953941292472, 0.5627571346686047, 0.6794095682990244, 0.7808177265864169, 0.8650633666889845, 0.9301574913557082, 0.9739065285171717, 0.9956571630258081]
208
+ w = [0.011694638867371874, 0.032558162307964725, 0.054755896574351995, 0.07503967481091996, 0.0931254545836976, 0.10938715880229764, 0.12349197626206584, 0.13470921731147334, 0.14277593857706009, 0.14773910490133849, 0.1494455540029169, 0.14773910490133849, 0.14277593857706009, 0.13470921731147334, 0.12349197626206584, 0.10938715880229764, 0.0931254545836976, 0.07503967481091996, 0.054755896574351995, 0.032558162307964725, 0.011694638867371874]
209
+ when 31
210
+ #g15k31
211
+ z = [-0.9980022986933971, -0.9879925180204854, -0.9677390756791391, -0.937273392400706, -0.8972645323440819, -0.8482065834104272, -0.790418501442466, -0.7244177313601701, -0.650996741297417, -0.5709721726085388, -0.4850818636402397, -0.3941513470775634, -0.29918000715316884, -0.20119409399743451, -0.1011420669187175, 0.0, 0.1011420669187175, 0.20119409399743451, 0.29918000715316884, 0.3941513470775634, 0.4850818636402397, 0.5709721726085388, 0.650996741297417, 0.7244177313601701, 0.790418501442466, 0.8482065834104272, 0.8972645323440819, 0.937273392400706, 0.9677390756791391, 0.9879925180204854, 0.9980022986933971]
212
+ w = [0.005377479872923349, 0.015007947329316122, 0.02546084732671532, 0.03534636079137585, 0.04458975132476488, 0.05348152469092809, 0.06200956780067064, 0.06985412131872826, 0.07684968075772038, 0.08308050282313302, 0.08856444305621176, 0.09312659817082532, 0.09664272698362368, 0.09917359872179196, 0.10076984552387559, 0.10133000701479154, 0.10076984552387559, 0.09917359872179196, 0.09664272698362368, 0.09312659817082532, 0.08856444305621176, 0.08308050282313302, 0.07684968075772038, 0.06985412131872826, 0.06200956780067064, 0.05348152469092809, 0.04458975132476488, 0.03534636079137585, 0.02546084732671532, 0.015007947329316122, 0.005377479872923349]
213
+ when 41
214
+ #g20k41
215
+ z = [-0.9988590315882777, -0.9931285991850949, -0.9815078774502503, -0.9639719272779138, -0.9408226338317548, -0.912234428251326, -0.878276811252282, -0.8391169718222188, -0.7950414288375512, -0.7463319064601508, -0.6932376563347514, -0.636053680726515, -0.5751404468197103, -0.5108670019508271, -0.4435931752387251, -0.37370608871541955, -0.301627868114913, -0.22778585114164507, -0.15260546524092267, -0.07652652113349734, 0.0, 0.07652652113349734, 0.15260546524092267, 0.22778585114164507, 0.301627868114913, 0.37370608871541955, 0.4435931752387251, 0.5108670019508271, 0.5751404468197103, 0.636053680726515, 0.6932376563347514, 0.7463319064601508, 0.7950414288375512, 0.8391169718222188, 0.878276811252282, 0.912234428251326, 0.9408226338317548, 0.9639719272779138, 0.9815078774502503, 0.9931285991850949, 0.9988590315882777]
216
+ w = [0.0030735837185205317, 0.008600269855642943, 0.014626169256971253, 0.020388373461266523, 0.02588213360495116, 0.0312873067770328, 0.036600169758200796, 0.041668873327973685, 0.04643482186749767, 0.05094457392372869, 0.05519510534828599, 0.05911140088063957, 0.06265323755478117, 0.06583459713361842, 0.06864867292852161, 0.07105442355344407, 0.07303069033278667, 0.07458287540049918, 0.07570449768455667, 0.07637786767208074, 0.07660071191799965, 0.07637786767208074, 0.07570449768455667, 0.07458287540049918, 0.07303069033278667, 0.07105442355344407, 0.06864867292852161, 0.06583459713361842, 0.06265323755478117, 0.05911140088063957, 0.05519510534828599, 0.05094457392372869, 0.04643482186749767, 0.041668873327973685, 0.036600169758200796, 0.0312873067770328, 0.02588213360495116, 0.020388373461266523, 0.014626169256971253, 0.008600269855642943, 0.0030735837185205317]
217
+ when 61
218
+ #g30k61
219
+ z = [-0.9994844100504906, -0.9968934840746495, -0.9916309968704046, -0.9836681232797472, -0.9731163225011262, -0.9600218649683075, -0.94437444474856, -0.9262000474292743, -0.9055733076999078, -0.8825605357920527, -0.8572052335460612, -0.8295657623827684, -0.799727835821839, -0.7677774321048262, -0.7337900624532268, -0.6978504947933158, -0.6600610641266269, -0.6205261829892429, -0.5793452358263617, -0.5366241481420199, -0.49248046786177857, -0.44703376953808915, -0.4004012548303944, -0.3527047255308781, -0.30407320227362505, -0.25463692616788985, -0.20452511668230988, -0.15386991360858354, -0.10280693796673702, -0.0514718425553177, 0.0, 0.0514718425553177, 0.10280693796673702, 0.15386991360858354, 0.20452511668230988, 0.25463692616788985, 0.30407320227362505, 0.3527047255308781, 0.4004012548303944, 0.44703376953808915, 0.49248046786177857, 0.5366241481420199, 0.5793452358263617, 0.6205261829892429, 0.6600610641266269, 0.6978504947933158, 0.7337900624532268, 0.7677774321048262, 0.799727835821839, 0.8295657623827684, 0.8572052335460612, 0.8825605357920527, 0.9055733076999078, 0.9262000474292743, 0.94437444474856, 0.9600218649683075, 0.9731163225011262, 0.9836681232797472, 0.9916309968704046, 0.9968934840746495, 0.9994844100504906]
220
+ w = [0.0013890136986770077, 0.003890461127099884, 0.0066307039159312926, 0.009273279659517764, 0.011823015253496341, 0.014369729507045804, 0.01692088918905327, 0.019414141193942382, 0.021828035821609193, 0.0241911620780806, 0.0265099548823331, 0.02875404876504129, 0.030907257562387762, 0.03298144705748372, 0.034979338028060025, 0.03688236465182123, 0.038678945624727595, 0.040374538951535956, 0.041969810215164244, 0.04345253970135607, 0.04481480013316266, 0.04605923827100699, 0.04718554656929915, 0.04818586175708713, 0.04905543455502978, 0.04979568342707421, 0.05040592140278235, 0.05088179589874961, 0.051221547849258774, 0.05142612853745902, 0.05149472942945157, 0.05142612853745902, 0.051221547849258774, 0.05088179589874961, 0.05040592140278235, 0.04979568342707421, 0.04905543455502978, 0.04818586175708713, 0.04718554656929915, 0.04605923827100699, 0.04481480013316266, 0.04345253970135607, 0.041969810215164244, 0.040374538951535956, 0.038678945624727595, 0.03688236465182123, 0.034979338028060025, 0.03298144705748372, 0.030907257562387762, 0.02875404876504129, 0.0265099548823331, 0.0241911620780806, 0.021828035821609193, 0.019414141193942382, 0.01692088918905327, 0.014369729507045804, 0.011823015253496341, 0.009273279659517764, 0.0066307039159312926, 0.003890461127099884, 0.0013890136986770077]
221
+ else # using 15 point quadrature
222
+ n = 15
223
+ z = [-0.9914553711208126, -0.9491079123427585, -0.8648644233597691, -0.7415311855993945, -0.5860872354676911, -0.4058451513773972, -0.20778495500789848, 0.0, 0.20778495500789848, 0.4058451513773972, 0.5860872354676911, 0.7415311855993945, 0.8648644233597691, 0.9491079123427585, 0.9914553711208126]
224
+ w = [0.022935322010529224, 0.06309209262997856, 0.10479001032225019, 0.14065325971552592, 0.1690047266392679, 0.19035057806478542, 0.20443294007529889, 0.20948214108472782, 0.20443294007529889, 0.19035057806478542, 0.1690047266392679, 0.14065325971552592, 0.10479001032225019, 0.06309209262997856, 0.022935322010529224]
225
+ end
226
+ sum = 0
227
+ (0...n).each do |i|
228
+ t = ((t1.to_f + t2) / 2.0) + (((t2 - t1) / 2.0) * z[i])
229
+ sum += w[i] * yield(t)
230
+ end
231
+ return ((t2 - t1) / 2.0) * sum
232
+ end
233
+ # TODO: Document method
234
+ def romberg(a, b, tolerance,max_iter=20)
184
235
  # NOTE one-based arrays are used for convenience
185
-
186
236
  h = b.to_f - a
187
237
  m = 1
188
238
  close = 1
189
- r = [[], [], [], [], [], [], [], [], [], [], [], [], []];
190
- r[1][1] = (h / 2) * (yield(a) + yield(b))
191
- j = 1
192
- while j <= 11 && tolerance < close
193
- j += 1
194
- r[j][0] = 0
195
- h /= 2
196
- sum = 0
197
- (1..m).each do |k|
198
- sum += yield(a + (h * ((2 * k) - 1)))
199
- end
200
- m *= 2
201
- r[j][1] = r[j-1][1] / 2 + (h * sum)
202
- (1..j-1).each do |k|
203
- r[j][k+1] = r[j][k] + ((r[j][k] - r[j-1][k]) / ((4 ** k) - 1))
239
+ r = [[(h / 2) * (yield(a) + yield(b))]]
240
+ j = 0
241
+ hn=lambda {|n| h/(2**n)}
242
+ while j <= max_iter && tolerance < close
243
+ j+=1
244
+ r.push((j+1).times.map{[]})
245
+ ul=2**(j-1)
246
+ r[j][0]=r[j-1][0] / 2.0 + hn[j] * (1..ul).inject(0) {|ac,k| ac+yield(a + (2*k-1)* hn[j])}
247
+ (1..j).each do |k|
248
+ r[j][k] = ( (4**k) * r[j][k-1] - r[j-1][k-1]) / ((4**k)-1)
204
249
  end
205
250
  close = (r[j][j] - r[j-1][j-1])
206
251
  end
207
- return r[j][j]
252
+ r[j][j]
208
253
  end
209
-
254
+
255
+ # TODO: Document method
210
256
  def monte_carlo(t1, t2, n)
211
257
  width = (t2 - t1).to_f
212
258
  height = nil
@@ -227,7 +273,7 @@ class Integration
227
273
  v==Infinity or v==MInfinity
228
274
  end
229
275
  # Methods available on pure ruby
230
- RUBY_METHOD=[:rectangle,:trapezoid,:simpson, :adaptive_quadrature , :gauss, :romberg, :monte_carlo]
276
+ RUBY_METHOD=[:rectangle,:trapezoid,:simpson, :adaptive_quadrature , :gauss, :romberg, :monte_carlo, :gauss_kronrod, :simpson3by8, :boole, :open_trapezoid, :milne]
231
277
  # Methods available with Ruby/GSL library
232
278
  GSL_METHOD=[:qng, :qag]
233
279
  # Get the integral for a function +f+, with bounds +t1+ and
@@ -263,7 +309,7 @@ class Integration
263
309
  upper_bound = [t1, t2].max
264
310
  end
265
311
  def_method=(has_gsl?) ? :qag : :simpson
266
- default_opts={:tolerance=>1e-10, :initial_step=>16,:step=>16, :method=>def_method}
312
+ default_opts={:tolerance=>1e-10, :initial_step=>16, :step=>16, :method=>def_method}
267
313
  options=default_opts.merge(options)
268
314
  if RUBY_METHOD.include? options[:method]
269
315
  raise "Ruby methods doesn't support infinity bounds" if inf_bounds
@@ -274,6 +320,7 @@ class Integration
274
320
  raise "Unknown integration method \"#{options[:method]}\""
275
321
  end
276
322
  end
323
+ # TODO: Document method
277
324
  def integrate_gsl(lower_bound,upper_bound,options,&f)
278
325
 
279
326
  f = GSL::Function.alloc(&f)
@@ -307,7 +354,7 @@ class Integration
307
354
  tolerance=options[:tolerance]
308
355
  initial_step=options[:initial_step]
309
356
  step=options[:step]
310
-
357
+ points = options[:points]
311
358
  begin
312
359
  method_obj = Integration.method(method.to_s.downcase)
313
360
  rescue
@@ -315,23 +362,37 @@ class Integration
315
362
  end
316
363
  current_step=initial_step
317
364
 
318
- if(method==:adaptive_quadrature or method==:romberg or method==:gauss)
319
- if(method==:gauss)
365
+ if(method==:adaptive_quadrature or method==:romberg or method==:gauss or method== :gauss_kronrod)
366
+ if(method==:gauss )
367
+ initial_step=10 if initial_step>10
368
+ tolerance = initial_step
369
+ method_obj.call(lower_bound, upper_bound, tolerance, &f)
370
+ elsif (method==:gauss_kronrod)
320
371
  initial_step=10 if initial_step>10
321
372
  tolerance=initial_step
373
+ points = points if points != nil
374
+ method_obj.call(lower_bound, upper_bound, tolerance, points, &f)
375
+ else
376
+ method_obj.call(lower_bound, upper_bound, tolerance, &f)
322
377
  end
323
- method_obj.call(lower_bound, upper_bound, tolerance, &f)
324
378
  else
325
379
  #puts "iniciando"
326
380
  value=method_obj.call(lower_bound, upper_bound, current_step, &f)
327
381
  previous=value+(tolerance*2)
382
+ diffs=[]
328
383
  while((previous-value).abs > tolerance) do
329
- #puts(value)
384
+ #puts("Valor:#{value}, paso:#{current_step}")
330
385
  #puts(current_step)
386
+ diffs.push((previous-value).abs)
387
+ #diffs.push value
331
388
  current_step+=step
332
389
  previous=value
390
+ #puts "Llamando al metodo"
391
+
333
392
  value=method_obj.call(lower_bound, upper_bound, current_step, &f)
334
393
  end
394
+ #p diffs
395
+
335
396
  value
336
397
  end
337
398
  end
@@ -0,0 +1,55 @@
1
+ $LOAD_PATH<<'.'
2
+ require 'java'
3
+ require '/home/rajat/jscience.jar'
4
+ java_import Java::OrgJscienceMathematicsFunction.Variable
5
+ java_import Java::OrgJscienceMathematicsFunction.Polynomial
6
+ import 'org.jscience.mathematics.number.Real'
7
+
8
+
9
+ class Var #variable and symbol are already class in ruby
10
+ def initialize(sym)
11
+ @sym = sym
12
+ @var = Variable::Local.new(@sym)
13
+ end
14
+
15
+ def show_symbol
16
+ puts @sym
17
+ end
18
+ end
19
+
20
+ class Polynomial
21
+ def initialize(poly, vars)
22
+ @poly = poly # Write parser? or ask the user to write full poly?
23
+
24
+
25
+ end
26
+ #java_import Java::OrgJscienceMathematicsFunction.Variable
27
+ #java_import Java::OrgJscienceMathematicsFunction.Polynomial
28
+ #import 'org.jscience.mathematics.number.Real'
29
+
30
+ ##declaring 'x' and 'y' as symbols
31
+ #varX = Variable::Local.new('x')
32
+ #varY = Variable::Local.new('y')
33
+
34
+ #creating a polynomial x
35
+ # x = Polynomial.valueOf(Real::ONE,varX)
36
+ #creating a polynomial fx = 1(x^5) + 6(x^2)
37
+ #fx = x.pow(5).plus(x.pow(2).times(Real.valueOf(6)))
38
+
39
+ #integrating with respect to variable 'x'
40
+ #puts fx.integrate(varX)
41
+ #integrating with respect to variable 'y'
42
+ #puts fx.integrate(varY)
43
+
44
+ #def polynomial(&block)
45
+ # varX = Variable::Local.new('x')
46
+ # x = Polynomial.valueOf(Real::ONE,varX)
47
+ yield x
48
+ #end
49
+
50
+ # Creating a polynomial fx = 1(x^5) + 6(x^2).
51
+ #fx = polynomial do |x|
52
+ # x.pow(5).plus(x.pow(2).times(Real.valueOf(6)))
53
+ # end
54
+ # Integrating with respect to variable 'x'.
55
+ #puts fx.integrate(varX)
@@ -1,25 +1,42 @@
1
1
  require File.expand_path(File.dirname(__FILE__)+"/spec_helper.rb")
2
2
  describe Integration do
3
- it "should respond integration based on ruby methods" do
4
- a=lambda {|x| x**2}
5
- # Integration over [1,2]=x^3/3=7/3
6
-
7
- methods=[:rectangle,:trapezoid, :simpson, :adaptive_quadrature, :romberg]
8
- methods.each do |m|
9
- Integration.integrate(1,2,{:method=>m,:tolerance=>1e-7},&a).should be_within(1e-6).of(7/3.0)
3
+ a=lambda {|x| x**2}
4
+ b=lambda {|x| Math.log(x)/x**2}
5
+ b2=lambda {|x| -(Math.log(x)+1)/x}
6
+ # Integration over [1,2]=x^3/3=7/3
7
+ methods=[:rectangle,:trapezoid, :simpson, :adaptive_quadrature, :romberg, :gauss, :gauss_kronrod, :simpson3by8, :boole, :open_trapezoid, :milne]
8
+ methods.each do |m|
9
+ it "should integrate int_{1}^2{2} x^2 correctly with ruby method #{m}" do
10
+ Integration.integrate(1,2,{:method=>m,:tolerance=>1e-8},&a).should be_within(1e-6).of(7.0 / 3 )
11
+ end
12
+ it "should integrate int_{1}^2{2} log(x)/x^2 correctly with ruby method #{m}" do
13
+ Integration.integrate(1,2,{:method=>m,:tolerance=>1e-8},&b).should be_within(1e-6).of(
14
+ b2[2]-b2[1]
15
+ )
10
16
  end
11
17
 
12
18
  end
13
-
19
+
20
+
21
+ it "should return correct for trapezoid" do
22
+ a=rand()
23
+ b=rand()*10
24
+ f=lambda {|x| x*a}
25
+ Integration.trapezoid(0,b,2,&f).should be_within(1e-14).of((a*b**2) / 2.0)
26
+ end
14
27
  it "should return a correct value for a complex integration with ruby methods" do
15
28
  normal_pdf=lambda {|x| (1/Math.sqrt(2*Math::PI))*Math.exp(-(x**2/2))}
16
29
  Integration.integrate(0,1,{:tolerance=>1e-12,:method=>:simpson},&normal_pdf).should be_within(1e-11).of(0.341344746068)
17
30
  Integration.integrate(0,1,{:tolerance=>1e-12,:method=>:adaptive_quadrature},&normal_pdf).should be_within(1e-11).of(0.341344746068)
18
31
  end
19
32
  it "should return a correct value for a complex integration with gsl methods" do
20
- normal_pdf=lambda {|x| (1/Math.sqrt(2*Math::PI))*Math.exp(-(x**2/2))}
21
- Integration.integrate(0,1,{:tolerance=>1e-12,:method=>:qng},&normal_pdf).should be_within(1e-11).of(0.341344746068)
22
- Integration.integrate(0,1,{:tolerance=>1e-12,:method=>:qag},&normal_pdf).should be_within(1e-11).of(0.341344746068)
33
+ if Integration.has_gsl?
34
+ normal_pdf=lambda {|x| (1/Math.sqrt(2*Math::PI))*Math.exp(-(x**2/2))}
35
+ Integration.integrate(0,1,{:tolerance=>1e-12,:method=>:qng},&normal_pdf).should be_within(1e-11).of(0.341344746068)
36
+ Integration.integrate(0,1,{:tolerance=>1e-12,:method=>:qag},&normal_pdf).should be_within(1e-11).of(0.341344746068)
37
+ else
38
+ skip("GSL not available")
39
+ end
23
40
  end
24
41
 
25
42
 
@@ -29,7 +46,7 @@ describe Integration do
29
46
 
30
47
  Integration.integrate(Integration::MInfinity, Integration::Infinity,{:tolerance=>1e-10}, &normal_pdf).should be_within(1e-09).of(1)
31
48
  else
32
- pending("GSL not available")
49
+ skip("GSL not available")
33
50
  end
34
51
  end
35
52
  it "should return correct integration for infinity lower bound" do
@@ -39,7 +56,7 @@ describe Integration do
39
56
  Integration.integrate(Integration::MInfinity, 0 , {:tolerance=>1e-10}, &normal_pdf).should be_within(1e-09).of(0.5)
40
57
 
41
58
  else
42
- pending("GSL not available")
59
+ skip("GSL not available")
43
60
  end
44
61
  end
45
62
  it "should return correct integration for infinity upper bound" do
@@ -49,7 +66,7 @@ describe Integration do
49
66
  Integration.integrate(0,Integration::Infinity,{:tolerance=>1e-10}, &normal_pdf).should be_within(1e-09).of(0.5)
50
67
 
51
68
  else
52
- pending("GSL not available")
69
+ skip("GSL not available")
53
70
  end
54
71
  end
55
72
  it "should raise an error if a ruby methods is called with infinite bounds" do
@@ -9,3 +9,20 @@ rescue LoadError
9
9
  end
10
10
  require 'rspec'
11
11
  require 'integration'
12
+
13
+
14
+
15
+ RSpec.configure do |config|
16
+ config.expect_with :rspec do |c|
17
+ c.syntax = [:should, :expect]
18
+ end
19
+
20
+ # Use color in STDOUT
21
+ config.color = true
22
+
23
+ # Use color not only in STDOUT but also in pagers and files
24
+ config.tty = true
25
+
26
+ # Use the specified formatter
27
+ config.formatter = :documentation # :progress, :html, :textmate
28
+ end
metadata CHANGED
@@ -1,124 +1,132 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: integration
3
- version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
6
5
  platform: ruby
7
- authors:
8
- - Ben Gimpert
6
+ authors:
9
7
  - Claudio Bustos
8
+ - Ben Gimpert
10
9
  autorequire:
11
10
  bindir: bin
12
- cert_chain:
13
- - |
14
- -----BEGIN CERTIFICATE-----
15
- MIIDMjCCAhqgAwIBAgIBADANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhjbGJ1
16
- c3RvczEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t
17
- MB4XDTEwMDMyOTIxMzg1NVoXDTExMDMyOTIxMzg1NVowPzERMA8GA1UEAwwIY2xi
18
- dXN0b3MxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
19
- bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf8JVMGqE7m5kYb+PNN
20
- neZv2pcXV5fQCi6xkyG8bi2/SIFy/LyxuvLzEeOxBeaz1Be93bayIUquOIqw3dyw
21
- /KXWa31FxuNuvAm6CN8fyeRYX/ou4cw3OIUUnIvB7RMNIu4wbgeM6htV/QEsNLrv
22
- at1/mh9JpqawPrcjIOVMj4BIp67vmzJCaUf+S/H2uYtSO09F+YQE3tv85TPeRmqU
23
- yjyXyTc/oJiw1cXskUL8UtMWZmrwNLHXuZWWIMzkjiz3UNdhJr/t5ROk8S2WPznl
24
- 0bMy/PMIlAbqWolRn1zl2VFJ3TaXScbqImY8Wf4g62b/1ZSUlGrtnLNsCYXrWiso
25
- UPUCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFGu9
26
- rrJ1H64qRmNNu3Jj/Qjvh0u5MA0GCSqGSIb3DQEBBQUAA4IBAQCV0Unka5isrhZk
27
- GjqSDqY/6hF+G2pbFcbWUpjmC8NWtAxeC+7NGV3ljd0e1SLfoyBj4gnFtFmY8qX4
28
- K02tgSZM0eDV8TpgFpWXzK6LzHvoanuahHLZEtk/+Z885lFene+nHadkem1n9iAB
29
- cs96JO9/JfFyuXM27wFAwmfHCmJfPF09R4VvGHRAvb8MGzSVgk2i06OJTqkBTwvv
30
- JHJdoyw3+8bw9RJ+jLaNoQ+xu+1pQdS2bb3m7xjZpufml/m8zFCtjYM/7qgkKR8z
31
- /ZZt8lCiKfFArppRrZayE2FVsps4X6WwBdrKTMZ0CKSXTRctbEj1BAZ67eoTvBBt
32
- rpP0jjs0
33
- -----END CERTIFICATE-----
34
-
35
- date: 2011-08-24 00:00:00 -03:00
36
- default_executable:
37
- dependencies:
38
- - !ruby/object:Gem::Dependency
39
- name: rspec
11
+ cert_chain: []
12
+ date: 2014-08-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: text-table
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.2'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.2'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rb-gsl
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '1.2'
35
+ type: :runtime
40
36
  prerelease: false
41
- requirement: &id001 !ruby/object:Gem::Requirement
42
- none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: "2.0"
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.2'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rake
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '10'
47
49
  type: :development
48
- version_requirements: *id001
49
- - !ruby/object:Gem::Dependency
50
- name: rubyforge
51
50
  prerelease: false
52
- requirement: &id002 !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: "0"
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '10'
56
+ - !ruby/object:Gem::Dependency
57
+ name: bundler
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '1.3'
58
63
  type: :development
59
- version_requirements: *id002
60
- - !ruby/object:Gem::Dependency
61
- name: hoe
62
64
  prerelease: false
63
- requirement: &id003 !ruby/object:Gem::Requirement
64
- none: false
65
- requirements:
66
- - - ~>
67
- - !ruby/object:Gem::Version
68
- version: "2.12"
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.3'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '2.0'
69
77
  type: :development
70
- version_requirements: *id003
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '2.0'
71
84
  description: Numerical integration for Ruby, with a simple interface
72
- email:
73
- - NO_EMAIL
74
- - clbustos_at_gmail.com
85
+ email:
86
+ - clbustos@gmail.com
87
+ - No Email
75
88
  executables: []
76
-
77
89
  extensions: []
78
-
79
- extra_rdoc_files:
80
- - History.txt
81
- - Manifest.txt
82
- - README.txt
83
- files:
84
- - .autotest
90
+ extra_rdoc_files: []
91
+ files:
92
+ - ".autotest"
93
+ - ".gitignore"
94
+ - ".rspec"
95
+ - ".travis.yml"
96
+ - Gemfile
97
+ - Gemfile.lock
85
98
  - History.txt
86
99
  - Manifest.txt
87
- - README.txt
100
+ - README.md
88
101
  - Rakefile
102
+ - benchmark/accuracy.rb
103
+ - benchmark/speed.rb
104
+ - integration.gemspec
89
105
  - lib/integration.rb
106
+ - lib/symbolic.rb
90
107
  - spec/integration_spec.rb
91
- - spec/spec.opts
92
108
  - spec/spec_helper.rb
93
- - .gemtest
94
- has_rdoc: true
95
- homepage: http://github.com/clbustos/integration
109
+ homepage:
96
110
  licenses: []
97
-
111
+ metadata: {}
98
112
  post_install_message:
99
- rdoc_options:
100
- - --main
101
- - README.txt
102
- require_paths:
113
+ rdoc_options: []
114
+ require_paths:
103
115
  - lib
104
- required_ruby_version: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
116
+ required_ruby_version: !ruby/object:Gem::Requirement
117
+ requirements:
107
118
  - - ">="
108
- - !ruby/object:Gem::Version
109
- version: "0"
110
- required_rubygems_version: !ruby/object:Gem::Requirement
111
- none: false
112
- requirements:
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ required_rubygems_version: !ruby/object:Gem::Requirement
122
+ requirements:
113
123
  - - ">="
114
- - !ruby/object:Gem::Version
115
- version: "0"
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
116
126
  requirements: []
117
-
118
- rubyforge_project: integration
119
- rubygems_version: 1.6.0
127
+ rubyforge_project:
128
+ rubygems_version: 2.2.2
120
129
  signing_key:
121
- specification_version: 3
122
- summary: Numerical integration for Ruby, with a simple interface
130
+ specification_version: 4
131
+ summary: A suite for integration in Ruby
123
132
  test_files: []
124
-
data.tar.gz.sig DELETED
Binary file
data/.gemtest DELETED
File without changes
metadata.gz.sig DELETED
@@ -1 +0,0 @@
1
- �mV݈5�H�Ȗ�279s�Z�Q�eY�ڇ&����9CKy��*�p�����z�"��m�<����/��_��[!�6��a$mzj6`��Z���0�� 6��S