readme, fixup

This commit is contained in:
wan-may 2023-10-08 13:20:14 -03:00
parent 98c27e0725
commit 9a33c2b3a7
3 changed files with 37 additions and 10 deletions

View File

@ -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

View File

@ -71,18 +71,25 @@ local function PlotFunction( f, color )
love.graphics.scale( 1 / (plot.X - plot.x), 1/ (plot.Y - plot.y) ) love.graphics.scale( 1 / (plot.X - plot.x), 1/ (plot.Y - plot.y) )
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

23
readme.md Normal file
View File

@ -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