@khanacademy/kas
A lightweight JavaScript CAS (Computer Algebra System) for comparing expressions and equations.
It is used throughout Khan Academy's interactive exercises.
What can it do?
It can parse plain text math, LaTeX, or a mix of both:
var expr = KAS.parse("3x \\frac{42}{42} sin^2y").expr;
expr.print();
It can evaluate expressions:
var expr = KAS.parse("(x^2+y^2)^.5").expr;
expr.eval({x: 3, y: 4});
It can compare expressions and equations:
var expr1 = KAS.parse("(1-x)(-1-6x)").expr;
var expr2 = KAS.parse("(6x+1)(x-1)").expr;
KAS.compare(expr1, expr2).equal;
var eq1 = KAS.parse("2w+50/w=25").expr;
var eq2 = KAS.parse("w(12.5-w)=25").expr;
KAS.compare(eq1, eq2).equal;
It can perform basic transforms that always simplify an expression:
var expr = KAS.parse("1+1+x+x+x+y").expr;
expr.collect().print();
var expr = KAS.parse("b^(2*y*log_b x)").expr;
expr.collect().print();
It can perform non-simplifying transforms on an expression:
var expr = KAS.parse("ab(c+d)e^f").expr;
expr.print();
expr.expand().print();
expr.expand().factor().print();
It can combine the above abilities to perform powerful simplification:
var expr = KAS.parse("((nx^5)^5)/(n^-2x^2)^-3").expr;
expr.print();
expr.simplify().print();
var expr = KAS.parse("(15np-25mp)/(15p^2-5p)+(20mp+10p^2)/(15p^2-5p)").expr;
expr.print();
expr.simplify().print();
How to build the library
pnpm install
pnpm build
How to build the parser
First, make any changes in src/parser-generator.js
pnpm install
pnpm build:parser
License
MIT License