nl_tokens: integral ( sin ( x ) x ) = - cos ( x ) integral ( cos ( x ) x ) = sin ( x ) integral ( tan ( x ) x ) = log ( abs ( sec ( x ))) integral ( sec ( x ) x ) = log ( abs ( sec ( x ) + tan ( x ))) integral ( csc ( x ) x ) = log ( abs ( csc ( x ) - cot ( x ))) integral ( cot ( x ) x ) = log ( abs ( sin ( x )))
pl_tokens: function ( expr , context , subIntegral ) { if ( expr . type === 'FunctionNode' && expr . args [ 0 ] . equals ( context . variable ) ) { switch ( expr . name ) { case "sin" : return new OperatorNode ( '-' , 'unaryMinus' , [ new FunctionNode ( "cos" , [ context . variable ] ) ] ) ; case "cos" : return new FunctionNode ( "sin" , [ context . variable ] ) ; case "tan" : //log(abs(sec(x))) return new FunctionNode ( 'log' , [ new FunctionNode ( 'abs' , [ new FunctionNode ( 'sec' , [ context . variable ] ) ] ) ] ) ; case "sec" : //log(abs(sec(x) + tan(x))) return new FunctionNode ( 'log' , [ new FunctionNode ( 'abs' , [ new OperatorNode ( '+' , 'add' , [ new FunctionNode ( 'sec' , [ context . variable ] ) , new FunctionNode ( 'tan' , [ context . variable ] ) ] ) ] ) ] ) ; case "csc" : //log(abs(sec(x) + tan(x))) return new FunctionNode ( 'log' , [ new FunctionNode ( 'abs' , [ new OperatorNode ( '-' , 'subtract' , [ new FunctionNode ( 'csc' , [ context . variable ] ) , new FunctionNode ( 'cot' , [ <mask> . variable ] ) ] ) ] ) ] ) ; case "cot" : //log(abs(sec(x) + tan(x))) return new FunctionNode ( 'log' , [ new FunctionNode ( 'abs' , [ new FunctionNode ( 'sin' , [ context . variable ] ) ] ) ] ) ; default : return null ; } } }