--- /dev/null
+# Bullet shot vertically up
+#
+# z'' = -g -af = -g -k*v^2
+# with k = 1/m * 1/2 * A * c.w * rho
+
+coefficient.1(-1) -> -g # gravity
+coefficient.2 -> k # coefficient of friction
+coefficient.3(+1) -> v0 # initial vertical speed
+
+iintegrate (-g, 10*: friction) -> -v
+ IC: v0
+iintegrate (-v) -> z
+
+invert -v -> v
+
+multiply (-v, -v) -> v^2
+cmultiply (k, v^2) -> kv^2
+
+# make sure friction acts against the direction of propagation
+invert kv^2 -> -kv^2
+compare v -> friction
+ GT0: -kv^2 # v > 0 => moving upwards
+ LT0: kv^2 # v < 0 => moving downwards
+
+output (v) -> out.x
+Output (friction) -> out.y
+output (z) -> out.z
--- /dev/null
+# Damped_Oscillator
+# phi'' = -(S*phi + D/m*phi')
+
+coefficient.1(-1) -> -phi0 # Initial Amplitude
+coefficient.3 -> S # SpringForce
+coefficient.4 -> D/m # Damping linear to speed
+
+iintegrate phi'' -> -phi'
+invert -phi' -> phi'
+cmultiply phi', D/m -> D/m*phi'
+
+iintegrate -phi' -> phi
+ IC: -phi0
+cmultiply S, phi -> S*phi
+
+isum 10:S*phi, D/m*phi' -> -(Sphi+D/mphi')
+assign -(Sphi+D/mphi') -> phi''
+
+output(y) -> out.y
--- /dev/null
+# Forced Damped_Harmonic Oscillator
+# x'' + 2*delta*x' + omega.0^2*x = A cos (omega.f t)
+
+# generating oscillation with omega.f
+# f'' = -omega.f^2*f
+coefficient.1(-1) -> -f0 # amplitude
+coefficient.2 -> omega^2
+iintegrate f'' -> -f'
+iintegrate -f' -> f
+ IC: -f0
+cmultiply f, omega^2 -> omega^2*f
+invert omega^2*f -> -omega^2*f
+assign -omega^2*f -> f''
+invert f -> -f
+output f -> y
+
+# forced damped harmonic oscillation
+# x'' = -(2*delta*x' + omega.0^2*x) + A cos (omega.f t)
+coefficient.5(-1) -> -x0 # amplitude of oscillation
+coefficient.6 -> 2*delta # attenuation
+coefficient.7 -> omega.0^2 # Eigenfrequency of this oscillator, ^2
+
+iintegrate x'' -> -x'
+invert -x' -> x'
+cmultiply x', 2*delta -> 2*delta*x'
+
+iintegrate -x' -> x
+ IC: -x0
+cmultiply x, omega.0^2 -> omega.0^2*x
+isum 2*delta*x', omega.0^2*x, -f -> -(2*delta*x'+omega.0^2*x)-f
+assign -(2*delta*x'+omega.0^2*x)-f -> x''
+
+output(x) -> x
--- /dev/null
+# 2 coupled pendulums
+# x1'' = -k1*x1 + k*(x2-x1)
+# x2'' = -k2*x2 - k*(x2-x1)
+# xi are the displacement of the pendulum to its resting position
+
+coefficient.1 -> k1
+coefficient.2 -> k2
+coefficient.3 -> k
+coefficient.5(-1) -> -x10 # initial displacement x1
+coefficient.6(-1) -> -x20 # initial displacement x2
+
+iintegrate x1'' -> -x1'
+iintegrate -x1' -> x1
+ IC: -x10
+
+iintegrate x2'' -> -x2'
+iintegrate -x2' -> x2
+ IC: -x20
+
+cmultiply x1, k1 -> k1*x1
+cmultiply x2, k2 -> k2*x2
+
+invert x1 -> -x1
+isum x2, -x1 -> -(x2-x1)
+cmultiply -(x2-x1), k -> -k*(x2-x1)
+
+isum k1*x1, -k*(x2-x1) -> -k1*x1+k*(x2-x1)
+assign -k1*x1+k*(x2-x1) -> x1''
+invert -k*(x2-x1) -> k*(x2-x1)
+isum k2*x2, k*(x2-x1) -> -k2*x2-k*(x2-x1)
+assign -k2*x2-k*(x2-x1) -> x2''
+
+output x1 -> out.x
+output x2 -> out.y
--- /dev/null
+# Pendulum: Comparing Harmonic Oscillator with 4th order Taylor approximation
+
+### Taylor 4 approximation: phi'' = - g/r * (phi - 1/6 * phi^3)
+# fortunately, the components of orders 0, 2 and 4 are zero
+
+coefficient.1 -> g/r
+coefficient.2 -> 1/6 # set to 0,167 or 0 (for harmonic solution)
+coefficient.3(-1) -> -phi0
+
+iintegrate phi'' -> -phi'
+iintegrate -phi' -> phi
+ IC: -phi0
+
+multiply phi, phi -> phi^2
+multiply phi^2, phi -> phi^3
+invert phi^3 -> -phi^3
+
+cmultiply 1/6, -phi^3 -> -1/6*phi^3
+isum phi, -1/6*phi^3 -> -(phi-1/6*phi^3)
+cmultiply -(phi-1/6*phi^3), g/r -> -g/r*(phi-1/6*phi^3)
+assign -g/r*(phi-1/6*phi^3) -> phi''
+
+output phi -> out.x
+
+### Harmonic oscillator: phi'' = - g/r * phi
+coefficient.5 -> g/r_h # identical to g/r
+coefficient.7(-1) -> -phi0_h # identical to -phi0
+
+iintegrate phi_h'' -> -phi_h'
+iintegrate -phi_h' -> phi_h
+ IC: -phi0_h
+invert phi_h -> -phi_h
+
+cmultiply -phi_h, g/r_h -> -g/r*phi_h
+assign -g/r*phi_h -> phi_h''
+
+output phi_h -> out.y
--- /dev/null
+# Superposition of the oscillation of two undamped harmonic oscillators
+# x1'' = -omega1^2*x1
+# x2'' = -omega2^2*x2
+
+coefficient.1(-1) -> -x10 # amplitude of 1
+coefficient.2 -> omega1^2
+coefficient.5(-1) -> -x20 # amplitude of 2
+coefficient.6 -> omega2^2
+
+# 1st oscillator
+iintegrate x1'' -> -x1'
+iintegrate -x1' -> x1
+ IC: -x10
+cmultiply x1, omega1^2 -> omega1^2*x1
+invert omega1^2*x1 -> -omega1^2*x1
+assign -omega1^2*x1 -> x1''
+output x1 -> out.x
+
+# 2nd oscillator
+iintegrate x2'' -> -x2'
+iintegrate -x2' -> x2
+ IC: -x20
+cmultiply x2, omega2^2 -> omega2^2*x2
+invert omega2^2*x2 -> -omega2^2*x2
+assign -omega2^2*x2 -> x2''
+output x2 -> out.y
+
+# Sum
+isum x1, x2 -> -(x1+x2)
+invert -(x1+x2) -> x1+x2
+output x1+x2 -> out.z
+++ /dev/null
-IDENTIFICATION DIVISION
-PROGRAM-ID HarmonicOscillator
-VERSION 20240201
-COMMENT A mass m is subject to a force F=-k*r.
-COMMENT What is the trajectory if the mass starts at position (a,0,0)?
-COMMENT How much time does it take to pass through zero?
-COMMENT What is the trajectory if it starts at (a,0,0) with velocity (0,v0,0)?
-COMMENT m*x'' = -k*x
-COMMENT m*y'' = -k*y (z can be set to 0).
-
-ENVIRONMENT DIVISION
-ENGINE Anabrid-THAT
-TIMEBASE 1ms
-REQUIRES COEFFICIENT 4, INTEGRATOR 4, INVERTER 2
-
-DATA DIVISION
-OUTPUT OUTPUT.X x
-OUTPUT OUTPUT.Y y
-COEFFICIENT.1 A # (a,0,0)
-COEFFICIENT.2 K/M_x # k/m for x
-COEFFICIENT.3 V0 # (0,v0,0)
-COEFFICIENT.4 K/M_y # k/m for y, identical to k/m for x
-
-PROGRAM DIVISION
--1 -> COEFFICIENT.A -> -a # has to be negative because x' is negative
-+1 -> COEFFICIENT.V0 -> v0 # has to be positive because y'' is positive
-
-x'' -> INTEGRATOR -> -x'
--x', IC:-a -> INTEGRATOR -> x
-x -> COEFFICIENT.K/M_x -> k/m*x
-k/m*x -> INVERTER -> -k/m*x = x''
-
-y'', IC:v0 -> INTEGRATOR -> -y'
--y' -> INTEGRATOR -> y
-y -> COEFFICIENT.K/M_y -> k/m*y
-k/m*y -> INVERTER -> -k/m*y = y''
-
-OPERATION DIVISION
-MODE REPEAT
-OP-TIME 100 ms
--- /dev/null
+# Harmonic Oscillator
+# A mass m is subject to a force F=-k*r.
+# What is the trajectory if the mass starts at position (a,0,0)?
+# How much time does it take to pass through zero?
+# What is the trajectory if it starts at (a,0,0) with velocity (0,v0,0)?
+# Compare to the case including gravity on earth in x direction
+# m*x'' = -k*x + g
+# m*y'' = -k*y (z can be set to 0).
+
+coefficient.1(-1) -> -a # (a,0,0), has to be negative because x' is negative
+coefficient.2 -> k/m_x # k/m for x
+coefficient.3(+1) -> v0 # (0,v0,0), has to be positive because y'' is positive
+coefficient.4 -> k/m_y # k/m for y, identical to k/m for x
+coefficient.5(-1) -> -g # g
+
+iintegrate x'' -> -x'
+iintegrate -x' -> x
+ IC: -a
+cmultiply (k/m_x, x) -> k/m*x
+isum (k/m*x, -g) -> -k/m*x+g
+assign (-k/m*x+g) -> x''
+
+iintegrate y'' -> -y'
+ IC: v0
+iintegrate -y' -> y
+cmultiply (k/m_y, y) -> k/m*y
+invert (k/m*y) -> -k/m*y
+assign (-k/m*y) -> y''
+
+output x -> out.x
+output.y -> out.y
+++ /dev/null
-# Wiring mache ich von links nach rechts !!!
-
-...IDENTIFICATION DIVISION
-...PROGRAM-ID FallingParticle
-...VERSION 20240225
-...COMMENT Calculate the deflection from the vertical caused by the Earth's rotation of a particle falling freely from rest from a height h.
-...COMMENT Differential Equations:
-...COMMENT x''=-bz'+ay' # x-axis is along latitude, directed to east
-...COMMENT y''=-ax' # y-axis is along longitude, directed to north
-...COMMENT z''=-g+ax' # z-axis is perpendicular to the surface of earth
-...COMMENT g: gravitational acceleration = 9,81 m/s²
-...COMMENT a: 2*omega*sin(phi)
-...COMMENT b: 2*omega*cos(phi)
-...COMMENT omega: rotation velocity of the earth = 2*pi/day
-...COMMENT phi: Latitude of location (0-90°)
-...COMMENT Initial Condition: z(0)=h
-...COMMENT The full solution requires 6 INTEGRATORs, Anabrid-THAT just has 5. The deflection to longitude (y) is neglegible and can be omitted (marked #*).
-...COMMENT It could also be solved in a separated algorithm omitting x.
-
-...ENVIRONMENT DIVISION
-...TIMEBASE 1ms
-
-...DATA DIVISION
-SET COEFFICIENT.1 TO AY # 2*2pi/day*sin(phi)
-SET COEFFICIENT.2 TO AX # = AY
-SET COEFFICIENT.3 TO B # 2*2pi/day*cos(phi)
-SET COEFFICIENT.4 TO G # gravitational acceleration = 9,81 m/s²
-SET COEFFICIENT.5 TO H # height h
-SET OUTPUT.X TO x
-SET OUTPUT.Y TO y
-SET OUTPUT.Z TO z
-
-INITIALIZE H by -1 TO -h # same as COMPUTE -1 TIMES H TO -h
-INITIALIZE G by +1 TO g
-
-INTEGRATE 1*-bz',1*ay' TO -x' # Input is x''
-INTEGRATE -x' TO x
-
-INTEGRATE y'' TO -y'
-INTEGRATE -y' TO y
-
-INTEGRATE z'' TO -z'
-INTEGRATE -z', IC:-h, LIMIT:(z >= 0) TO z
-
--x' * AX -> -ax'
--ax' = y''
--y' * AY -> -ay'
-INVERT -ay' TO ay'
--z' * B -> -bz'
-ADD 1*-ax', 1*g TO -g+ax'
--g+ax' = z''
-
-...OPERATION DIVISION
-...MODE REPEAT
-...OP-TIME 7,3ms
--- /dev/null
+# Arneodo-Attractor (alpaca_60)
+# x' = y, x0 = 1
+# y' = z, y0 = 1
+# z' = a*x-b*y-z-c*x^3, z0=0
+# a=5,5; b=3,5; c=1
+#
+# SCALING
+# the problem is patched as designed, but x runs out of range
+# Trial: x = 5*xn (xn = new x), y = 10*yn, z = 15*zn
+# 5*xn' = 10*y => xn' = 2*y
+# 10*y' = 15*zn => y' = 1,5*z
+# 15*zn' = a*5*xn-b*10*yn-15*zn-c*(5*xn)^3 => z' = a*5/15*xn-b*10/15*yn-15/15*zn-c*125/15*xn^3
+#
+# xn' = d1*y
+# yn' = e1*z
+# zn' = a1*xn-b1*yn-zn-c1*xn^3
+#
+# a1 = a*5/15 = 1,83
+# b1 = b*10/15 = 2,33
+# c1 = c*5^3/15 = 8,33
+# d1 = 2
+# e1 = 1,5
+#
+# in the following, the original terms are being used,
+
+coefficient.1 -> a/10 # 0,183 -> better results with 0,154
+coefficient.2 -> b/10 # 0,233
+coefficient.3 -> c/10 # 0,833
+coefficient.4(+1) -> x0 # 0,200
+coefficient.5(+1) -> y0 # 0,100
+coefficient.6(+1) -> z0 # 0
+coefficient.7 -> d/10 # 0,200
+coefficient.8 -> e/10 # 0,150
+
+iintegrate 10*: x' -> -x
+ IC: x0
+iintegrate 10*: y' -> -y
+ IC: y0
+iintegrate z' -> -z
+ IC: z0
+
+invert -x -> x
+
+invert -y -> y
+cmultiply y, d/10 -> d/10*y
+assign d/10*y -> x'
+
+invert -z -> z
+cmultiply z, e/10 -> e/10*z
+assign e/10*z -> y'
+
+cmultiply x, a/10 -> a/10*x
+cmultiply -y, b/10 -> -b/10*y
+
+multiply -x, -x -> x^2
+multiply x^2, -x -> -x^3
+cmultiply -x^3, c/10 -> -c/10*x^3
+
+isum 10*:a/10*x, 10*:-b/10*y, -z, 10*:-c/10*x^3 -> -(a*x-b*y-z-c*x^3)
+invert -(a*x-b*y-z-c*x^3) -> a*x-b*y-z-c*x^3
+assign a*x-b*y-z-c*x^3 -> z'
+
+output x -> out.x
+output y -> out.y
+output z -> out.z