ChebyRuby 0.0.2.pre → 0.0.3.pre

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ce9e90673dcb994d2b9e512a949a173a875c3264
4
- data.tar.gz: bd39e0f58ac5668df89c99ae1f255c1eea25458c
3
+ metadata.gz: 7a3b71091027ccab487114bd6bbdeb2dd47dddce
4
+ data.tar.gz: 9545f1e34a6e515bdb9343e893852a1acb3b1b10
5
5
  SHA512:
6
- metadata.gz: 25c353b12eee3bc7c9799b319fe04c469d53b9c3db0cc80eae5f4d97b1d7f2a7606c78ebe780d617e2f5b027f3ae2047248ae03a53efcbcc9d28830fcf46409a
7
- data.tar.gz: 053d27aac92aed0404ee6c49f4700917ac609594a9e18263c46c22af27745b5e22a967f6d96adc6ee3d3084b1ef34919140a9664ef01eea0945de4da3a8df76d
6
+ metadata.gz: 5de743407a61d1199cea8a825a94a8f83f29c78bb34419cbb07195c74fc37faf74293432d7d13c50106921d4e8266d368cdb372a1e3061bb89fb27c477583be6
7
+ data.tar.gz: a509277ec4e7dec53edd9d78fe3d9b8bfe4df9d3a3516147d419f9832166f891d3e1e1dc10bb7b8dd411f6367430d48d9c546529b60e153b35005191b027273c
@@ -0,0 +1,43 @@
1
+ # require_relative 'univariate_function'
2
+
3
+ class Expression
4
+ attr_accessor :left, :op, :right
5
+
6
+ def initialize(left, op, right)
7
+ @left = left
8
+ @op = op
9
+ @right = right
10
+ end
11
+
12
+ def method_missing(method, *args)
13
+ Expression.new(self, method, Variable.new(args[0]))
14
+ end
15
+
16
+ def vars
17
+ a = []
18
+ nested?[:left] ? a << left.vars : a << left.x
19
+ nested?[:right] ? a << right.vars : a << right.x
20
+ a.flatten
21
+ end
22
+
23
+ def nested?
24
+ {:right => (Expression === right),
25
+ :left => (Expression === left)}
26
+ end
27
+
28
+ def to_s
29
+ if nested?[:left]
30
+ s = "#{left.to_s} #{op}"
31
+ else
32
+ s = "#{left} #{op}"
33
+ end
34
+ case right
35
+ when Variable then "#{s} #{right.x}".strip
36
+ when Expression then "#{s} #{right.to_s}".strip
37
+ else "#{s} #{right}".strip
38
+ end
39
+ end
40
+
41
+ def to_func
42
+ end
43
+ end
@@ -18,4 +18,5 @@ class ChebyRuby::UnivariateFunction
18
18
  def value(x)
19
19
  func.call(x.to_f)
20
20
  end
21
- end
21
+
22
+ end
@@ -0,0 +1,64 @@
1
+ require_relative 'expression'
2
+
3
+ class Variable
4
+ attr_accessor :x, :neg
5
+
6
+ def initialize(x)
7
+ @x = x
8
+ @neg = false
9
+ end
10
+
11
+ def method_missing(method, *args)
12
+ Expression.new(self, method, Variable.new(args[0]))
13
+ end
14
+
15
+ def to_a
16
+ if x.class == Array
17
+ x
18
+ else
19
+ [x]
20
+ end
21
+ end
22
+
23
+ def -@
24
+ @neg = true
25
+ end
26
+
27
+ def to_enum
28
+ Array.new(to_ary).to_enum
29
+ end
30
+
31
+ def right
32
+ nil
33
+ end
34
+
35
+ def to_s
36
+ "#{x}"
37
+ end
38
+
39
+ def parseable
40
+ to_enum.map do |i|
41
+ if Array === i
42
+ i.parseable
43
+ elsif Symbol === i
44
+ i
45
+ else
46
+ i.x
47
+ end
48
+ end
49
+ end
50
+
51
+ alias to_ary to_a
52
+ end
53
+
54
+ class Array
55
+ def parseable
56
+ Variable.new(self).parseable
57
+ end
58
+ end
59
+
60
+ class Symbol
61
+ def parseable
62
+ self
63
+ end
64
+ end
@@ -0,0 +1,16 @@
1
+ require 'minitest/autorun'
2
+ require 'chebyruby'
3
+
4
+ class TestIntegration < Minitest::Test
5
+ include ChebyRuby::Integration
6
+ def setup
7
+ @sin = ChebyRuby::UnivariateFunction.new {|x| Math.sin(x)}
8
+ @exp = ChebyRuby::UnivariateFunction.new {|x| Math.exp(x)}
9
+ @pol = ChebyRuby::UnivariateFunction.new {|x| x**2 + 2*x + 1}
10
+ @x = ChebyRuby::UnivariateFunction.new {|x| x}
11
+ end
12
+
13
+ def test_integration
14
+ assert_in_delta 0, trap_integrate(@sin, 0, Math::PI * 2), 1e-8
15
+ end
16
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ChebyRuby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.pre
4
+ version: 0.0.3.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eli Sadoff
@@ -20,12 +20,15 @@ files:
20
20
  - bin/chebyruby
21
21
  - lib/chebyruby.rb
22
22
  - lib/chebyruby/differentiation.rb
23
+ - lib/chebyruby/expression.rb
23
24
  - lib/chebyruby/finite_differencing.rb
24
25
  - lib/chebyruby/integration.rb
25
26
  - lib/chebyruby/romberg_integration.rb
26
27
  - lib/chebyruby/simpsons_integration.rb
27
28
  - lib/chebyruby/univariate_function.rb
29
+ - lib/chebyruby/variable.rb
28
30
  - test/test_function.rb
31
+ - test/test_integration.rb
29
32
  homepage: https://github.com/snood1205/chebyruby
30
33
  licenses:
31
34
  - MIT
@@ -46,10 +49,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
46
49
  version: '0'
47
50
  requirements: []
48
51
  rubyforge_project:
49
- rubygems_version: 2.5.1
52
+ rubygems_version: 2.6.6
50
53
  signing_key:
51
54
  specification_version: 4
52
55
  summary: A gem for numerical analysis and scientific computing.This is a pre-release
53
56
  so beware.
54
57
  test_files:
55
58
  - test/test_function.rb
59
+ - test/test_integration.rb