bibun 0.0.0 → 0.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bfdf2da9f4cefc3f0543ab2ea15cd57ff4839df928c5265ab239d071142cf6d3
4
- data.tar.gz: 6bd4d352e44a51a4366f0b5c145ac0dd24910439de09dc2d1ef87990c8028bb7
3
+ metadata.gz: 368fa968d06e81e87ca2b1fd0a86a88cd54384d0e04f9c2761f0471862345107
4
+ data.tar.gz: f8dea6d3c5ec670677756ade6887bbff52f67dbe04f18ebf9778fe00844478b4
5
5
  SHA512:
6
- metadata.gz: 6d5c7480c4f0d5ea6b4d0a2d9140f28ef2b8d5158b34bdad797cc63254cc4f1873a40cc9746ffe9c87b3e218674e5bedb98b5886a28efee1b534a0c27ae65a5c
7
- data.tar.gz: 4dbc784b29b1ed63e93b305d4c1523a20d2e35beaf9030934531436d397f4f4669f85af4228c3d02b10a7ec0d8446081558cad8515b3ad861e4663e4147874f0
6
+ metadata.gz: 2fe78590c4d0c1c8cb92788e8c9f07c940e6408e2f12f8625440916000dae8572c1ccea8feac860671ace583b1f2a592dd06a88241147269b9dc5c216fb958c6
7
+ data.tar.gz: b2879ade4f8c5f7250c6389ab19f99045333b62e39f570836f1721d81c10c326825eb8b97073a008b7c67091ec13d5de3ca8ef1f6fa52e0b264201e7d8381efe
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -3,5 +3,7 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [0.0.0] - 2025-10-04
6
-
7
- Initial release.
6
+ Initial release.
7
+ ## [0.0.1] - 2025-10-04
8
+ - Changed LaTEX expressions and Mermaid diagrams to embedded images so they display well on the documentation and the online repository.
9
+ - Added git repository link to the homepage attribute.
data/README.md CHANGED
@@ -2,7 +2,7 @@ Bibun (微分: differential, derivative). This gem implements Runge-Kutta explic
2
2
 
3
3
  # Quick feature overview
4
4
 
5
- Instant example for a single differential equation with one variable representing a electrical circuit $\frac{dI}{dt}=15-3*I$
5
+ Instant example for a single differential equation with one variable representing a electrical circuit dI / dt = 15 - 3 I
6
6
 
7
7
  ```ruby
8
8
  require 'bibun'
@@ -31,10 +31,8 @@ puts ode.current.value
31
31
  ```
32
32
 
33
33
  Quick example of a differential equation system of two variables, the Lotka Volterra equations with specific parameter values (p and d are the prey and predator variables):
34
- $$
35
- \frac{dp}{dt}=0.08p-0.001pd \\
36
- \frac{dd}{dt}=-0.02d+0.00001pd
37
- $$
34
+
35
+ ![](https://dl.dropboxusercontent.com/scl/fi/wf89aeu1q7s0t6gh7cmez/lotka_volterra.png?rlkey=3crlrsswmmmhepab71861ewa9&st=5b7fsdlj&dl=0)
38
36
 
39
37
 
40
38
  ```RUby
@@ -91,16 +89,7 @@ predator_data = lv.logs['predator']
91
89
 
92
90
  With the same basics, a more complex system: an salt tank receiving two inlets, one outlet and variable water volume, proportional loss rate. The concentration is calculated and tracked from the salt mass and volume variables and each flow contribution is tracked separatedly:
93
91
 
94
- ```mermaid
95
- ---
96
- title: Interface
97
- ---
98
- flowchart LR
99
- tan[Container Tank] -- fo --> out[Outlet]
100
- bri[Brine inlet cs] -- fb --> tan
101
- spw[Springwater inlet] -- fw --> tan
102
- tan -- lV --> los[Loss rate]
103
- ```
92
+ ![](https://dl.dropboxusercontent.com/scl/fi/hl6i98ycweiwfno23chga/brine_tank.png?rlkey=5ecegbv8mn6g93duqs3xbonnn&st=57rk4owp&dl=0)
104
93
 
105
94
  ```Ruby
106
95
  tank = Bibun::DifferentialEquationSystem.new
@@ -153,28 +142,15 @@ The gem uses the `json`, `tomlib` and `csv` libraries for importing and exportin
153
142
 
154
143
  `Formatador` is used to display a progress bar while doing the integration and for outputting a DES summary.
155
144
 
145
+ ## License
146
+
147
+ This gem has a MIT style license except it forbids its use for AI training purposes (see license file, based on https://github.com/non-ai-licenses/non-ai-licenses).
148
+
156
149
  # General Interface and usage
157
150
 
158
151
  The outer `DifferentialEquationSystem` class exposes enough general methods to be able to perform straightforward integration runs, but for a completely control over the integration process it is better to understand and access the inner objects that compose it. Below is the basic interface to a differential equation system object:
159
152
 
160
- ```mermaid
161
- ---
162
- title: Interface
163
- ---
164
- flowchart LR
165
- sys[System] --shortcut--> vars[variables]
166
- sys --> syms[syms]
167
- syms --> vars
168
- syms --> pars
169
- sys --shortcut--> pars[parameters]
170
- vars --> eq[rate_equations]
171
- vars --shortcut--> rt[terms]
172
- eq --> rt
173
- sys --> st[stepper]
174
- st --> bc[butcher_table]
175
- sys --> log[logger]
176
- sys --> tr[tracker]
177
- ```
153
+ ![](https://dl.dropboxusercontent.com/scl/fi/h9ssqhvo8v06qo1kqukyv/bibun_interface.png?rlkey=se11fn4a7qxj00f52fz1936cc&st=zkskxt9s&dl=0)
178
154
 
179
155
  For easier access there are shortcut methods such as System -> Variables or Variable -> Terms even if the strict relationship lies between adjacent classes.
180
156
 
@@ -183,11 +159,10 @@ For easier access there are shortcut methods such as System -> Variables or Vari
183
159
  The Lotka-Volterra equations will be used as the working example for the documentation.
184
160
 
185
161
  The Lotka-Volterra equations model the change across time in the populations of a prey and a predator species:
186
- $$
187
- \frac{dp}{dt}=kp-apd \\
188
- \frac{dd}{dt}=-rd+bpd
189
- $$
190
- $p$ and $d$ are the variables for the prey and predator populations and $k$, $a$, $r$ and $b$ are constant parameters or coefficients.
162
+
163
+ ![](https://dl.dropboxusercontent.com/scl/fi/c0jil0apjimwmah20lpvi/Lotka-Volterra-with-parameters.png?rlkey=bq460iw7f6nfdlwimmo8j61c4&st=yszk2x5h&dl=0)
164
+
165
+ p and d are the variables for the prey and predator populations and k, a, r and b are constant parameters or coefficients.
191
166
 
192
167
  This differential equation system is nonlinear and cyclical, with prey and predator population oscillating around their own maximum and minimum and with a phase shift between them.
193
168
 
@@ -290,7 +265,7 @@ lv.add_variable 'predator', 'd', rate_equation: '0.02 * d - 0.00001 * p * d '
290
265
  lv.predator.rate_equation.rate_function = '-0.02 * d + 0.00001 * p * d'
291
266
  ```
292
267
 
293
- The expression of the rate function must be provided with the form $dx_i/dt = f(X)$ and using the symbols previously assigned to the variables and parameters.
268
+ The expression of the rate function must be provided with the form dxi/dt = f(X) and using the symbols previously assigned to the variables and parameters.
294
269
 
295
270
  ## Adding rate additive terms
296
271
 
@@ -343,7 +318,7 @@ lv.integrate starting_values: { 'prey_growth' => 0.08, 'prey_consumption' => 0.0
343
318
 
344
319
  ## Constant step, non adaptive
345
320
 
346
- The method `integrate` is the main method to perform the integration, that is, starts a run where the variable values at each step are calculated numerically using a numerical method. The `starting_values:` parameter allows a last chance to introduce initial values; `step_size:` is used to input the desired step size ($h$) and the `duration:` parameter determines the lenght of the run. For a non adaptive method, the total number of steps performed will be total_steps = duration / step_size since the step size is held constant.
321
+ The method `integrate` is the main method to perform the integration, that is, starts a run where the variable values at each step are calculated numerically using a numerical method. The `starting_values:` parameter allows a last chance to introduce initial values; `step_size:` is used to input the desired step size (h) and the `duration:` parameter determines the lenght of the run. For a non adaptive method, the total number of steps performed will be total_steps = duration / step_size since the step size is held constant.
347
322
 
348
323
  ```Ruby
349
324
  lv.integrate starting_values: { 'time' => 0, 'prey' => 1000, 'predator' => 50 }, step_size: 1, duration: 100
@@ -501,7 +476,7 @@ Checking some rows of the generated file:
501
476
  | 38 | 82.7 | -1.67 | 3.57 | 2137.5 | 170.72 | -178.41 | 25.86 |
502
477
  | 39 | 84.6 | -1.71 | 3.63 | 2129.8 | 169.94 | -181.66 | 25.19 |
503
478
 
504
- The sums of the terms for each variable equal the value of the variable for the next step. Here at time 37 we can verify that the value for time 38 for the predator population is $80.8 - 1.63 + 3.5 = 82.67$, showing the separate contributions due to predation and decay.
479
+ The sums of the terms for each variable equal the value of the variable for the next step. Here at time 37 we can verify that the value for time 38 for the predator population is 80.8 - 1.63 + 3.5 = 82.67, showing the separate contributions due to predation and decay.
505
480
 
506
481
  *NOTE: when the logging interval is not equal to the step size, the term logs account for it in order to always represent the total change between two logging rows, so their logged values will differ if the logging interval change.*
507
482
 
@@ -541,15 +516,13 @@ lv.set_global_tolerance 0.1, 0.01 # atol of 0.1 and rtol of 0.01
541
516
  ```
542
517
 
543
518
  The stepper evaluates the error at each iteration and increases the initial step size given if it the overall error is smaller than the aggregate `err` index or decreases the error and repeats the iteration if the error surpasses the aggregate. Because criteria for calculating the error and changing the step size is not set in stone, `Bibun` uses the following formulas[^1] :
544
- $$
545
- err = \sqrt{\frac{1}{N}\sum{(\frac{\Delta}{scale})^2}} \\
546
- \Delta = x_{5^{th}order}-x_{4^{th}order} \\
547
- scale = atol+rtol\times max(x_n,x_{n+1})
548
- $$
519
+
520
+ ![](https://dl.dropboxusercontent.com/scl/fi/ok6thj37csqlne420uh5j/error_estimation.png?rlkey=rmbnhsstj4vpwx7nx2lwuolpb&st=p97jczdr&dl=0)
521
+
549
522
  Where N is the number of variables with nonzero tolerance. Step size is decreased and the step performed again if err < 1 and step size is increased otherwise. The size adjustment is done according to:
550
- $$
551
- h_{next}=h \times clamp(0.9(\frac{1}{err})^{1/5},1/5, 10)
552
- $$
523
+
524
+ ![](https://dl.dropboxusercontent.com/scl/fi/6c65qcc907hsc7ydwehw8/step_size_readjustment.png?rlkey=ur0m44eu3vgtfugvghbvmlq75&st=du4uz8o8&dl=0)
525
+
553
526
  The 0.9 safety factor is a reccomendation by J.C. Butcher[^2] while the 1/5..10 range is a recommendation by W. H. Press.
554
527
 
555
528
  ### Using dense output
data/lib/bibun/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Bibun
4
4
  # Semver constant
5
- VERSION = '0.0.0'
5
+ VERSION = '0.0.1'
6
6
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bibun
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javier Oswaldo Hernández Batis
@@ -209,7 +209,7 @@ description: "This gem allows to do simulation runs of systems of ordinary diffe
209
209
  equations of one independent variable \nusing numerical Runge-Kutta methods for
210
210
  approximation. Contains some features like calculation of separate additive\nterms
211
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"
212
+ printing runs to csv files,\nwhich engineers may find convenient.\n"
213
213
  email: johernandezbatis@startmail.com
214
214
  executables: []
215
215
  extensions: []
@@ -231,7 +231,7 @@ files:
231
231
  - lib/bibun/symbol_group.rb
232
232
  - lib/bibun/version.rb
233
233
  - lib/data/butcher_tables.toml
234
- homepage: https://rubygems.org/gems/bibun_hoteishiki
234
+ homepage: https://git.sr.ht/~skyfish/bibun
235
235
  licenses:
236
236
  - Nonstandard
237
237
  metadata: {}
@@ -251,5 +251,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
251
251
  requirements: []
252
252
  rubygems_version: 3.7.2
253
253
  specification_version: 4
254
- summary: A gem to run simulation of differential equation systems via numerical methods.
254
+ summary: A gem to run simulations of differential equation systems via numerical methods.
255
255
  test_files: []
metadata.gz.sig CHANGED
Binary file