= #JxnPortable/docs/programmer_examples/demos/tangent_quotient_rule_Demo.jxn

JxnRealArrayCurve.setLimiter(true)  ! remove outliers before scaling
!
slider = @JxnSliderPanel(this)
ix = slider.add( "ix", 0., 0., length x - 1 )
!
x = 0.6 x
gx = sin x
hx = cos x
y = gx / hx  ! tan x
gprime =  hx  ! =dg/dx
hprime = -gx  ! =dh/dx
yprime = ( gprime hx - gx hprime ) / hx^2  ! =dy/dx
!
dx = 0.5
xp = x[ix]
yp = y[ix]
xL = xp - dx
xR = xp + dx
yL = yp - yprime[ix] dx
yR = yp + yprime[ix] dx
plot( x, clip( y, -20, 20 ), clip( yprime, -20, 20 ) ).add( @JxnGraphicsPainter( 0, xL, yL, xR, yR ).setColor(G) ).setYBounds( -10, 10 )
!
xder = derivative x  ! =h(const)
yder = derivative y
yxder = derivative( y, x )
! plot( x, clip( yxder, -20, 20 ), clip( yder/xder, -20, 20 ), clip( yprime, -20, 20 ) ).setYBounds( 0, 10 )
pf1 = plot( x, yxder, yder/xder, yprime ).setPlotFrameTitle( "yxder, yder/xder, yprime" )
pf1.setYBounds( 0, 10 )
pf2 = plot( x, yxder - yprime ).setPlotFrameTitle( "yxder - yprime" )
pf2.setYBounds( -0.0005, 0.0015 )
pf3 = plot( x, yder/xder - yprime ).setPlotFrameTitle( "yder/xder - yprime" )
pf3.setYBounds( -0.0005, 0.0015 )
pf4 = plot( x, yder/xder - yxder ).setPlotFrameTitle( "yder/xder - yxder" )