readme, fixup
This commit is contained in:
parent
98c27e0725
commit
9a33c2b3a7
2
fdb.lua
2
fdb.lua
|
@ -3,7 +3,7 @@
|
||||||
local ORDER = 100
|
local ORDER = 100
|
||||||
|
|
||||||
local binCoefs = {}
|
local binCoefs = {}
|
||||||
|
--memoized binonmial coefficient
|
||||||
local function Choose( n, k )
|
local function Choose( n, k )
|
||||||
if k < 1 then return 1 end
|
if k < 1 then return 1 end
|
||||||
if n < 1 then return 0 end
|
if n < 1 then return 0 end
|
||||||
|
|
22
main.lua
22
main.lua
|
@ -72,17 +72,24 @@ local function PlotFunction( f, color )
|
||||||
love.graphics.translate( - plot.x, - plot.y )
|
love.graphics.translate( - plot.x, - plot.y )
|
||||||
love.graphics.setLineWidth( 0.003 * (plot.X - plot.x) )
|
love.graphics.setLineWidth( 0.003 * (plot.X - plot.x) )
|
||||||
|
|
||||||
|
love.graphics.setColor( 0.5, 0.5, 0.5, 0.3 )
|
||||||
|
love.graphics.line( -10, -10, 10, 10 )
|
||||||
|
love.graphics.line( -10, 0, 10, 0 )
|
||||||
|
love.graphics.line( 0, -10, 0, 10 )
|
||||||
|
|
||||||
if color then love.graphics.setColor( color ) end
|
if color then love.graphics.setColor( color ) end
|
||||||
love.graphics.line( plot.inverse and inverse or points )
|
love.graphics.line( plot.inverse and inverse or points )
|
||||||
|
|
||||||
love.graphics.circle( "fill", a, a, 0.003 * (plot.X - plot.x) )
|
love.graphics.circle( "fill", a, a, 0.003 * (plot.X - plot.x) )
|
||||||
love.graphics.pop()
|
love.graphics.pop()
|
||||||
|
|
||||||
|
|
||||||
|
love.graphics.setFont( love.graphics.getFont( 48 ) )
|
||||||
love.graphics.print( a )
|
love.graphics.print( a )
|
||||||
love.graphics.print( plot.fdbOrder, 0, 15 )
|
love.graphics.print( plot.fdbOrder, 0, 15 )
|
||||||
love.graphics.print( f(a), 0, 30 )
|
love.graphics.print( f(a), 0, 30 )
|
||||||
love.graphics.print( f(-1.0), 0, 45 )
|
love.graphics.print( f(-1.0), 0, 45 )
|
||||||
love.graphics.setColor( 1,1,1,1 )
|
love.graphics.setColor( 1,1,1,1 )
|
||||||
love.graphics.setFont( love.graphics.getFont( 48 ) )
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -92,7 +99,7 @@ love.wheelmoved = function( x, y )
|
||||||
end
|
end
|
||||||
|
|
||||||
love.mousepressed = function(x, y, button)
|
love.mousepressed = function(x, y, button)
|
||||||
--plot.inverse = not( plot.inverse )
|
plot.inverse = not( plot.inverse )
|
||||||
plot.fdbOrder = plot.fdbOrder + (( button == 1 ) and 1 or -1 )
|
plot.fdbOrder = plot.fdbOrder + (( button == 1 ) and 1 or -1 )
|
||||||
return love.keypressed()
|
return love.keypressed()
|
||||||
end
|
end
|
||||||
|
@ -116,18 +123,15 @@ love.keypressed = function( key, code )
|
||||||
love.draw = nil
|
love.draw = nil
|
||||||
|
|
||||||
local f, df, fn = Poly( FaaDiBruno( a, plot.fdbOrder ) )
|
local f, df, fn = Poly( FaaDiBruno( a, plot.fdbOrder ) )
|
||||||
--PlotFunction( f, {1, 0, 0, 0.3} ) --Function in red.
|
PlotFunction( f, {1, 0, 0, 0.7} ) --Function in red.
|
||||||
--PlotFunction( df, {0, 1, 0, 0.3} ) --First derivative in green.
|
PlotFunction( df, {0, 1, 0, 0.7} ) --First derivative in green.
|
||||||
--local lowF, lowDF = Poly( FaaDiBruno( a, 15 ) )
|
|
||||||
--PlotFunction( lowF, {1, 0, 0, 0.3} ) --Function in red.
|
|
||||||
--PlotFunction( lowDF, {0, 1, 0, 0.3} ) --First derivative in green.
|
|
||||||
|
|
||||||
--PlotFunction( function(x) return df( f ( x ) ) end, {0, 0, 1, 0.3})
|
--PlotFunction( function(x) return df( f ( x ) ) end, {0, 0, 1, 0.3})
|
||||||
--PlotFunction( function(x) return f( df ( x ) ) end, {1, 1, 1, 0.3})
|
--PlotFunction( function(x) return f( df ( x ) ) end, {1, 1, 1, 0.3})
|
||||||
--PlotFunction( function(x) return x end, {1, 1, 1, 0.3})
|
--PlotFunction( function(x) return x end, {1, 1, 1, 0.3})
|
||||||
local af, an = Poly( Ansatz.coefs )
|
local af, an = Poly( Ansatz.coefs )
|
||||||
PlotFunction( af, {1,1,1, 0.3} )
|
--PlotFunction( af, {1,1,1, 0.3} )
|
||||||
PlotFunction( an, {1,1,1, 0.3} )
|
--PlotFunction( an, {1,1,1, 0.3} )
|
||||||
PlotFunction( Ansatz.dpo, {1, 1, 1, 0.3} )
|
PlotFunction( Ansatz.dpo, {1, 1, 1, 0.3} )
|
||||||
PlotFunction( Ansatz.pos, {1,1,1,0.3} )
|
PlotFunction( Ansatz.pos, {1,1,1,0.3} )
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
Bespoke script for calculating and plotting some series solutions
|
||||||
|
of the functional equation f'( f( x ) ) = x.
|
||||||
|
|
||||||
|
Idea: suppose f has fixed point p,
|
||||||
|
apply the chain rule to functional equation
|
||||||
|
get values of f's derivatives at p
|
||||||
|
get truncated taylor series expansion of f at p,
|
||||||
|
plot series to get some idea about values, convergence.
|
||||||
|
|
||||||
|
We use Faa Di Bruno's formula for iterated derivatives, in terms of Bell numbers.
|
||||||
|
We also plot the "ansatz" solution, i.e. the solution of the form x -> a * x ^ b where a and b are positive.
|
||||||
|
|
||||||
|
Uses LOVE as a dependency for its plotting: https://love2d.org
|
||||||
|
Solution is plotted in red, first derivative is plotted in green.
|
||||||
|
|
||||||
|
Keys:
|
||||||
|
Q - Increase p
|
||||||
|
E - Decrease p
|
||||||
|
WASD - Translate view
|
||||||
|
Z - Zoom in
|
||||||
|
C - Zoom out
|
||||||
|
F - Increase order of series expansion
|
||||||
|
R - Decrease order
|
Loading…
Reference in New Issue