bibun 0.0.0

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,129 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bibun
4
+ class DifferentialEquationSystem
5
+ # A single object of this class tracks positions relative to the step and the independent variable both for
6
+ # walking forward and logging each step. Separated from the DifferentialStepper to avoid excessive cluttering.
7
+ class StepTracker
8
+ # @return [Numeric] Stores the step size defined for the integration, which may change through it for
9
+ # adaptive methods.
10
+ attr_accessor :step_size
11
+ # @return [Numeric] The timespan set for a full integration.
12
+ attr_accessor :duration
13
+ # @return [Numeric] The independent variable interval for logging entries.
14
+ attr_accessor :logging_interval
15
+ # @return [Numeric] The number of steps to record a log entry when the logging interval differs from the step
16
+ # size.
17
+ attr_reader :steps_to_log
18
+
19
+ # @!group This attributes pertain keeping track of the logging and walking steps.
20
+ # @return [Numeric] For adaptive methods, stores the future value of the step size since logging still requires
21
+ # the previous value.
22
+ attr_accessor :next_step_size
23
+ # @return [Integer] The ordinal (number) of the current step of the integration.
24
+ attr_reader :current_step
25
+ # @return [Numeric] The initial value for the independent variable.
26
+ attr_reader :starting_point
27
+ # @return [Numeric] The current position of the independent value during the integration run.
28
+ attr_reader :current_point
29
+ # @return [Numeric] The previous position of the independent value during the integration run.
30
+ attr_reader :previous_point
31
+ # @return [Numeric] The current or last value of the independent variable in the log.
32
+ attr_reader :current_logging_point
33
+ # @return [Numeric] The previous value of the independent variable recorded in the log.
34
+ attr_reader :previous_logging_point
35
+ # @return [Integer] The current row number of the log (differs for dense output).
36
+ attr_reader :current_logging_step
37
+ # @return [Numeric] For dense output, last logged point from the previous walking step.
38
+ attr_accessor :last_mark
39
+ # @return [Boolean] Quick way to established whether dense output has been set or not.
40
+ attr_reader :dense_output
41
+ alias dense_output? dense_output
42
+ # @!endgroup
43
+
44
+ # Sets up all values of the tracker for the integration run.
45
+ def prepare(independent_start, adaptive, single_step:)
46
+ @current_step = 0
47
+ @current_logging_step = 0
48
+ @starting_point = independent_start
49
+ @current_point = independent_start
50
+ @current_logging_point = independent_start
51
+ @last_mark = 0
52
+
53
+ if single_step
54
+ raise ArgumentError, 'Missing step size' if step_size.nil?
55
+ elsif step_size.nil? || duration.nil?
56
+ raise ArgumentError, 'Missing duration or step_size'
57
+ end
58
+ define_steps_to_log(adaptive)
59
+ @dense_output = !logging_interval.nil? && adaptive
60
+ end
61
+
62
+ # Sets how many steps are necessary for logging when the method is non adaptive.
63
+ # @param adaptive [Boolean]
64
+ def define_steps_to_log(adaptive)
65
+ return unless steps_to_log.nil? || adaptive
66
+
67
+ l = logging_interval.nil? ? 0 : logging_interval
68
+ @steps_to_log = if l < step_size
69
+ 1
70
+ else
71
+ l.fdiv(step_size).to_i
72
+ end
73
+ end
74
+
75
+ # Quick calculation of the total number of steps (only known a priori for non adaptive methods).
76
+ # @return [Integer]
77
+ def total_steps = (duration / step_size.to_f).to_i
78
+
79
+ # Calculates the end of the integration.
80
+ # @return [Numeric]
81
+ def ending_point = starting_point + duration
82
+
83
+ # For dense output, this is the fraction between the current point and the previous point a which an entry
84
+ # for logging sits. This is necessary for the polynomial interpolation.
85
+ # @param point [Integer] The independent variable value at which the theta is calculated.
86
+ # @return [Float]
87
+ def theta(point)
88
+ (point - previous_point) / (current_point - previous_point).to_f
89
+ end
90
+
91
+ # @!group This methods change the value of the walking and logging steps.
92
+ # Quick method for advancing a step. Made a method expecting future changes which may demand other actions.
93
+ def walk_forward
94
+ @current_step += 1
95
+ @previous_point = current_point
96
+ @current_point += step_size
97
+ @step_size = next_step_size unless next_step_size.nil?
98
+ end
99
+
100
+ # Method for the pointer to the current logging step and point to advance.
101
+ def log_forward(logging_mark)
102
+ @current_logging_step += 1
103
+ @current_logging_point = logging_mark
104
+ end
105
+
106
+ # @return [Integer] The number of marks to log for a given step walked.
107
+ def num_marks
108
+ ((current_point - last_mark) / logging_interval).to_i
109
+ end
110
+
111
+ # @return [Array<Numeric>] The marks (logging points) where values have to be logged.
112
+ def marks_to_advance
113
+ leaps = []
114
+ if dense_output?
115
+ (1..num_marks).each { |i| leaps << last_mark + i * logging_interval }
116
+ elsif (current_step % steps_to_log).zero?
117
+ leaps << current_point
118
+ end
119
+ leaps
120
+ end
121
+ # @!endgroup
122
+
123
+ # json converter routine for the serializer.
124
+ def to_json(*_args)
125
+ { 'step_size' => step_size, 'duration' => duration, 'logging_interval' => logging_interval }.to_json
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+ module Bibun
3
+ class DifferentialEquationSystem
4
+ # This class emcompasses all methods relative to writing and reading parameter and variable values, separated here
5
+ # to avoid cluttering the outer class. Most of the time the DifferentialEquationSystem class has shortcuts
6
+ # to access its methods.
7
+ class SymbolGroup
8
+ # Hash with all the variables of the DES
9
+ attr_accessor :variables
10
+ # Hash with all the parameters of the DES
11
+ attr_accessor :parameters
12
+ # Reference to the outer DifferentialEquationSystem object.
13
+ attr_accessor :system
14
+
15
+ def initialize(sys)
16
+ @variables = {}
17
+ @parameters = {}
18
+ @system = sys
19
+ end
20
+
21
+ # Quick way to access the independent variable regardless of the name set to it.
22
+ # @return [DifferentialSystemVariable]
23
+ def ind_var = variables.values.find(&:independent?)
24
+ # Quick accessor to the dependent variables.
25
+ # @return [Hash{String => DifferentialSystemVariable}]
26
+ def rate_variables = variables.reject { |_, v| v.independent? }
27
+ # Quick access to the SubDifferentialEquation objects.
28
+ # @return [Hash{String => SubDifferentialEquation}]
29
+ def rate_equations = rate_variables.transform_values(&:rate_equation)
30
+ # Quick access to the variable values.
31
+ # @return [Hash{String => Numeric}]
32
+ def vars_values = variables.transform_values(&:value)
33
+
34
+ # This gives a hash with the string symbols of the variables as the keys rather than the names.
35
+ # For example: {'t' => 0, 'T' => 25 } instead of { 'time' => 0, 'temperature' => 25 }.
36
+ # This is useful to provide to the calculators.
37
+ # @return [Hash{String => Numeric}]
38
+ def vars_values_hash(with_step_change: false)
39
+ variables.map { |_, v| [v.symbol, v.value + (with_step_change ? v.step_change : 0)] }.to_h
40
+ end
41
+
42
+ # @return [Hash{String => Array<Numeric>}] Terms with their changes. Useful for debugging.
43
+ def terms_changes_hash
44
+ terms_array.map { |t| [t.id, [t.step_change, t.cumulative_change]] }.to_h
45
+ end
46
+
47
+ # Cleans the last addition of the step change for all terms. Necessary for adaptive step size when it is
48
+ # rejected and recalculated.
49
+ def undo_term_changes
50
+ terms_array.each do |t|
51
+ t.cumulative_change -= t.step_change
52
+ t.step_change = 0
53
+ end
54
+ end
55
+
56
+ # This gives a hash with the string symbols of the parameters as the keys rather than the names.
57
+ # For example: {'g' => 0, 'ρ' => 25 } instead of { 'gravity' => 9.806, 'density' => 1000 }.
58
+ # This is useful to provide to the calculators.
59
+ # @return [Hash{String => Numeric}]
60
+ def pars_values_hash = parameters.values.map { |p| [p.symbol, p.value] }.to_h
61
+ # Merge of +vars_values_hash+ and +pars_values_hash+
62
+ # @return [Hash{String => Numeric}]
63
+ def syms_values_hash = pars_values_hash.merge(vars_values_hash)
64
+ # Like {#vars_values_hash} but for the buffer values. Useful for the evaluation of the ks
65
+ # @return [Hash{String => Numeric}]
66
+ def vars_buffers_hash = variables.map { |_, v| [v.symbol, v.buffer_value] }.to_h
67
+ # merge of +vars_buffers_hash+ and +pars_buffer_hash+
68
+ # @return [Hash{String => Numeric}]
69
+ def syms_buffers_hash = pars_values_hash.merge(vars_buffers_hash)
70
+ # Check if the des has any rate additive terms declared.
71
+ def terms? = rate_variables.any(&:terms?)
72
+ # Merge the variables and parameters hash.
73
+ def symbols = variables.merge(parameters)
74
+ # Check if any variable has tolerances set in for adaptive methods.
75
+ def tolerances_provided? = rate_variables.any? { |_,v| v.atol.nonzero? || v.rtol.nonzero? }
76
+ # Returns only the variables with declared tolerances.
77
+ def vars_with_tols = rate_variables.select { |_, v| v.atol.nonzero? || v.rtol.nonzero? }
78
+
79
+ # Returns an array with the rate additive terms to avoid having to traverse variable and equations each time.
80
+ # @return [Array<DifferentialTerm>]
81
+ def terms_array
82
+ rate_variables.values.each_with_object([]) { |v, ar| ar << v.terms.values unless v.terms.empty? }.flatten
83
+ end
84
+
85
+ # Method to assign values to variables and parameters in a single operation.
86
+ # Also registers those in the log buffer for logging purposes.
87
+ # @param values_hash [Hash{String => Numeric}] The hash with the variables and parameter names
88
+ # and the target values.
89
+ def assign_values(values_hash)
90
+ values_hash.each do |k, v|
91
+ symbols[k].value = v
92
+ if symbols[k].instance_of?(DifferentialSystemVariable)
93
+ symbols[k].buffer_value = v
94
+ system.logger.buffer[k] = v
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bibun
4
+ # Semver constant
5
+ VERSION = '0.0.0'
6
+ end
data/lib/bibun.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'keisan'
2
+ require 'formatador'
3
+ require 'csv'
4
+ require 'json'
5
+ require 'tomlib'
6
+
7
+ require_relative 'bibun/version'
8
+ require_relative 'bibun/differential_equation_system'
9
+ require_relative 'bibun/differential_system_symbol'
10
+ require_relative 'bibun/differential_system_variable'
11
+ require_relative 'bibun/differential_system_parameter'
12
+ require_relative 'bibun/differential_stepper'
13
+ require_relative 'bibun/differential_butcher_table'
14
+ require_relative 'bibun/differential_equation_logger'
15
+ require_relative 'bibun/step_tracker'
16
+ require_relative 'bibun/symbol_group'
17
+ require_relative 'bibun/log_entry'
18
+
19
+ # Standard container for the whole library which consists of a single module.
20
+ module Bibun
21
+
22
+ end
@@ -0,0 +1,44 @@
1
+ [midpoint]
2
+ type = 'Runge-Kuta'
3
+ adaptive = false
4
+ order = 2
5
+ stages = 2
6
+ nodes = [0, '1/2']
7
+ weights = [0, 1]
8
+ matrix_coefficients = [['1/2']]
9
+ [rk4]
10
+ type = 'Runge-Kutta'
11
+ adaptive = false
12
+ order = 4
13
+ stages = 4
14
+ nodes = [0, '1/2', '1/2', 1]
15
+ weights = ['1/6', '1/3', '1/3', '1/6']
16
+ matrix_coefficients = [['1/2'], [0, '1/2'], [0, 0, 1]]
17
+ [dopr45]
18
+ type = 'Runge-Kutta'
19
+ adaptive = true
20
+ order = 5
21
+ stages = 7
22
+ nodes = [0, '1/5', '3/10', '4/5', '8/9', 1, 1]
23
+ weights = ['35/384', 0, '500/1113', '125/192', '-2187/6784', '11/84', 0]
24
+ alternate_weights = ['5179/57600', 0, '7571/16695', '393/640', '-92097/339200', '187/2100', '1/40']
25
+ matrix_coefficients = [['1/5'], ['3/40', '9/40'], ['44/45', '-56/15', '32/9'],
26
+ ['19372/6561', '-25360/2187', '64448/6561', '-212/729'],
27
+ ['9017/3168', '-355/33', '46732/5247', '49/176', '-5103/18656'],
28
+ ['35/384', 0, '500/1113', '125/192', '-2187/6784', '11/84']]
29
+ [dopr45.interpolation.constants]
30
+ d1 = '-12715105075/11282082432'
31
+ d2 = 0
32
+ d3 = '87487479700/32700410799'
33
+ d4 = '-10690763975/1880347072'
34
+ d5 = '701980252875/199316789632'
35
+ d6 = '-1453857185/822651844'
36
+ d7 = '69997945/29380423'
37
+ [dopr45.interpolation.coefficients]
38
+ r1 = 'y0'
39
+ r2 = 'y1 - y0'
40
+ r3 = 'k1 - (y1 - y0)'
41
+ r4 = '2 * (y1 - y0) - k1 - k7'
42
+ r5 = 'd1 * k1 + d2 * k2 + d3 * k3 + d4 * k4 + d5 * k5 + d6 * k6 + d7 * k7'
43
+ [dopr45.interpolation.formula]
44
+ final = 'r1 + theta * (r2 + (1 - theta) * (r3 + theta * (r4 + (1 - theta) * r5)))'
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,255 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bibun
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Javier Oswaldo Hernández Batis
8
+ bindir: bin
9
+ cert_chain:
10
+ - |
11
+ -----BEGIN CERTIFICATE-----
12
+ MIIEojCCAwqgAwIBAgIBATANBgkqhkiG9w0BAQsFADBLMRkwFwYDVQQDDBBqb2hl
13
+ cm5hbmRlemJhdGlzMRkwFwYKCZImiZPyLGQBGRYJc3RhcnRtYWlsMRMwEQYKCZIm
14
+ iZPyLGQBGRYDY29tMB4XDTI1MTAwNDIwMjgwMVoXDTI2MTAwNDIwMjgwMVowSzEZ
15
+ MBcGA1UEAwwQam9oZXJuYW5kZXpiYXRpczEZMBcGCgmSJomT8ixkARkWCXN0YXJ0
16
+ bWFpbDETMBEGCgmSJomT8ixkARkWA2NvbTCCAaIwDQYJKoZIhvcNAQEBBQADggGP
17
+ ADCCAYoCggGBALeKx5HEeuWn5qCjxPzjDhdm+PVZZqoVBsr0zOpgLXQ1fFbcchAo
18
+ TN6N5EBBpspNPTGseSoLVkbkYgkLj8xsoGIHnqooM3NsCEl10XKBH7WrHpkqGenV
19
+ 7FU5cBhsOzyK9vHcYn6avgrivg918LBw6/jKTCpzci5g1raBn6n8ngrwVY2jOsqW
20
+ J78vwAA6VKPGpR555UmvO4lg8GrS03ktyvDdL99PlhHgzfaLDXYh4tUoy5izwM1t
21
+ JqpbiRimocklRs4jlTcZveBl4Pd/XGzNXSVmFqCmFz5lugFB+DFkyyt8ruhJ1Dtm
22
+ HZSKIy+Xmi17XcNAw+DeJeXMRGh/ddl5uAHWRxjX5tcpX7m/54QL1Hyi9uR/IQvR
23
+ L8oCHRq6l43vK8LCAoMV/LbCfzVOXHUhjtOCQnGkJJ5/27hz8MIxKhw+Sann/0jo
24
+ +KWrGFblBFp1lim477FuBbruP5SPReKjkXQ9dkU08O6woyYA0IjzWeSnXO49CpMm
25
+ 3fywTmAXgKLbjQIDAQABo4GQMIGNMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0G
26
+ A1UdDgQWBBS2ZcS8Y0Z1s0+eOUjd6hq8LSP6UzApBgNVHREEIjAggR5qb2hlcm5h
27
+ bmRlemJhdGlzQHN0YXJ0bWFpbC5jb20wKQYDVR0SBCIwIIEeam9oZXJuYW5kZXpi
28
+ YXRpc0BzdGFydG1haWwuY29tMA0GCSqGSIb3DQEBCwUAA4IBgQBvJpZUyWWtaeVw
29
+ A/UrnPCwjwM9H9W9aNUurWV8P+RJo74Th5Mpp7ZxAT2McIUveRDJNe8aZC7+D7li
30
+ NAOcGIABK8vj//iqh7WuiYIrPcCnzvwumZNtxDnnhaMjpk3DTdjJMwyOUcos7hMi
31
+ GNHX0DpWElZ1Lrkt8HaJpRefhmmDmQBrwGD3s6cztE5ynX6uKGVt1acBZNp3lrej
32
+ 9QNc1iKB6K2DfuVzwxPU6da7HC5E/nQKh1/cIAOf/fgYiJ1f3Qq1jlR9jptPdKOu
33
+ k8yqdQxomOFGpEsrtiFw7NlChWENONF20k15vyGyuTVVBBFDvKuZiEqsGemm6o1j
34
+ yDbiN5LLe5fm2a15tXbu6fhj7ITmqwteZUIIhgF8JWs1jJyonWOlaSiAkeHpsAE/
35
+ Ns9BT67XevfsONA6aGf9YTMfyCdzqW8kkhlVQt24qZBz8Ebblv7dLUxJscWIl4tW
36
+ Ek0z5JjyW9vxbdAQ1KtrTm5X+tpdfERGuyRe+q2o0BlsccV/5xc=
37
+ -----END CERTIFICATE-----
38
+ date: 1980-01-02 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: csv
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.3'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.3'
54
+ - !ruby/object:Gem::Dependency
55
+ name: formatador
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.2'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.2'
68
+ - !ruby/object:Gem::Dependency
69
+ name: keisan
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '0.9'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.9'
82
+ - !ruby/object:Gem::Dependency
83
+ name: tomlib
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.7'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.7'
96
+ - !ruby/object:Gem::Dependency
97
+ name: benchmark
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.4'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.4'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rake
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '13.3'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '13.3'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rspec
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '3.13'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '3.13'
138
+ - !ruby/object:Gem::Dependency
139
+ name: rubocop
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '1.80'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '1.80'
152
+ - !ruby/object:Gem::Dependency
153
+ name: rubocop-rspec
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '3.7'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '3.7'
166
+ - !ruby/object:Gem::Dependency
167
+ name: ruby-prof
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '1.7'
173
+ type: :development
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '1.7'
180
+ - !ruby/object:Gem::Dependency
181
+ name: super_diff
182
+ requirement: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '0.16'
187
+ type: :development
188
+ prerelease: false
189
+ version_requirements: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '0.16'
194
+ - !ruby/object:Gem::Dependency
195
+ name: yard
196
+ requirement: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: '0.9'
201
+ type: :development
202
+ prerelease: false
203
+ version_requirements: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: '0.9'
208
+ description: "This gem allows to do simulation runs of systems of ordinary differential
209
+ equations of one independent variable \nusing numerical Runge-Kutta methods for
210
+ approximation. Contains some features like calculation of separate additive\nterms
211
+ of the differential equations, calculation of custom expressions and logging and
212
+ printing runs to a csv files,\nwhich engineers may find it convenient.\n"
213
+ email: johernandezbatis@startmail.com
214
+ executables: []
215
+ extensions: []
216
+ extra_rdoc_files: []
217
+ files:
218
+ - CHANGELOG.md
219
+ - LICENSE.txt
220
+ - README.md
221
+ - lib/bibun.rb
222
+ - lib/bibun/differential_butcher_table.rb
223
+ - lib/bibun/differential_equation_logger.rb
224
+ - lib/bibun/differential_equation_system.rb
225
+ - lib/bibun/differential_stepper.rb
226
+ - lib/bibun/differential_system_parameter.rb
227
+ - lib/bibun/differential_system_symbol.rb
228
+ - lib/bibun/differential_system_variable.rb
229
+ - lib/bibun/log_entry.rb
230
+ - lib/bibun/step_tracker.rb
231
+ - lib/bibun/symbol_group.rb
232
+ - lib/bibun/version.rb
233
+ - lib/data/butcher_tables.toml
234
+ homepage: https://rubygems.org/gems/bibun_hoteishiki
235
+ licenses:
236
+ - Nonstandard
237
+ metadata: {}
238
+ rdoc_options: []
239
+ require_paths:
240
+ - lib
241
+ required_ruby_version: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: 3.3.7
246
+ required_rubygems_version: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ requirements: []
252
+ rubygems_version: 3.7.2
253
+ specification_version: 4
254
+ summary: A gem to run simulation of differential equation systems via numerical methods.
255
+ test_files: []
metadata.gz.sig ADDED
Binary file