algebrite
Version:
Computer Algebra System in Coffeescript
141 lines (118 loc) • 1.91 kB
text/coffeescript
### circexp =====================================================================
Tags
----
scripting, JS, internal, treenode, general concept
Parameters
----------
x
General description
-------------------
Returns expression x with circular and hyperbolic functions converted to exponential forms. Sometimes this will simplify an expression.
###
Eval_circexp = ->
push(cadr(p1))
Eval()
circexp()
# normalize
Eval()
circexp = ->
i = 0
h = 0
save()
p1 = pop()
if (car(p1) == symbol(COS))
push(cadr(p1))
expcos()
restore()
return
if (car(p1) == symbol(SIN))
push(cadr(p1))
expsin()
restore()
return
if (car(p1) == symbol(TAN))
p1 = cadr(p1)
push(imaginaryunit)
push(p1)
multiply()
exponential()
p2 = pop()
push(imaginaryunit)
push(p1)
multiply()
negate()
exponential()
p3 = pop()
push(p3)
push(p2)
subtract()
push(imaginaryunit)
multiply()
push(p2)
push(p3)
add()
divide()
restore()
return
if (car(p1) == symbol(COSH))
p1 = cadr(p1)
push(p1)
exponential()
push(p1)
negate()
exponential()
add()
push_rational(1, 2)
multiply()
restore()
return
if (car(p1) == symbol(SINH))
p1 = cadr(p1)
push(p1)
exponential()
push(p1)
negate()
exponential()
subtract()
push_rational(1, 2)
multiply()
restore()
return
if (car(p1) == symbol(TANH))
p1 = cadr(p1)
push(p1)
push_integer(2)
multiply()
exponential()
p1 = pop()
push(p1)
push_integer(1)
subtract()
push(p1)
push_integer(1)
add()
divide()
restore()
return
if (iscons(p1))
h = tos
while (iscons(p1))
push(car(p1))
circexp()
p1 = cdr(p1)
list(tos - h)
restore()
return
if (p1.k == TENSOR)
push(p1)
copy_tensor()
p1 = pop()
for i in [0...p1.tensor.nelem]
push(p1.tensor.elem[i])
circexp()
p1.tensor.elem[i] = pop()
push(p1)
restore()
return
push(p1)
restore()