differentiation 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/differentiation.rb +14 -4
- data/lib/differentiation/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f929d2f761f2c899c992ee5c1c5298c9309571832e53785b05fa363ee8e7184
|
4
|
+
data.tar.gz: 83ee712e1b681bbf9ce607ba14e6fdb2bc5b03e5e54fc6345711a94011abba12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22129a89a99a38eed921c69e8b84e7da61c6a89e102b9e8090d35faf2e8bc8b81df404f894f3e002fb43f65f8e06a49d30784962ff8039a3b6bee35b222cc0d1
|
7
|
+
data.tar.gz: 3f1c0c90283778a6a7add7cbbc4b61f07bce594aeb84241a80e0bb56b03345d42ec39b981aa016d9b09c2945221169b5d28b9ecabd78712415d8d717f3547e4f
|
data/lib/differentiation.rb
CHANGED
@@ -40,14 +40,16 @@ module Differentiation
|
|
40
40
|
end
|
41
41
|
kwargs = Hash[kwargs.map{|k,v| [k, Differentiation.convert_to_dual_number(v, key: k)] }]
|
42
42
|
if kwargs.empty?
|
43
|
-
f.call(*args)
|
43
|
+
Differentiation.convert_to_dual_number(f.call(*args))
|
44
44
|
else
|
45
|
-
f.call(*args, **kwargs)
|
45
|
+
Differentiation.convert_to_dual_number(f.call(*args, **kwargs))
|
46
46
|
end
|
47
47
|
}
|
48
48
|
end
|
49
49
|
|
50
50
|
class DualNumber
|
51
|
+
include Comparable
|
52
|
+
|
51
53
|
def initialize(n, diff=lambda{|_| 0})
|
52
54
|
@n = n
|
53
55
|
@diff = diff
|
@@ -85,6 +87,14 @@ module Differentiation
|
|
85
87
|
end
|
86
88
|
end
|
87
89
|
|
90
|
+
def <=>(other)
|
91
|
+
if other.is_a?(DualNumber)
|
92
|
+
@n <=> other.n
|
93
|
+
else
|
94
|
+
@n <=> other
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
88
98
|
def +(other)
|
89
99
|
if other.is_a?(DualNumber)
|
90
100
|
n = @n + other.n
|
@@ -132,10 +142,10 @@ module Differentiation
|
|
132
142
|
def **(other)
|
133
143
|
if other.is_a?(DualNumber)
|
134
144
|
n = @n ** other.n
|
135
|
-
diff = ->(key) { (@n ** other.n) * (other.diff(key) * Math.log(@n) + (other.n / @n)) }
|
145
|
+
diff = ->(key) { (@n ** other.n) * (other.diff.call(key) * Math.log(@n) + (other.n / @n)) }
|
136
146
|
else
|
137
147
|
n = @n ** other
|
138
|
-
diff = ->(key) { (@n ** (other-1)) * other }
|
148
|
+
diff = ->(key) { ((@n ** (other-1)) * other) * @diff.call(key) }
|
139
149
|
end
|
140
150
|
DualNumber.new(n, diff)
|
141
151
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: differentiation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nagachika
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|