algebrite
Version:
Computer Algebra System in Coffeescript
198 lines (136 loc) • 3.32 kB
text/coffeescript
test_inner = ->
run_test [
# since we don't know anything about
# a and b, we have to leave this unevaluated
# turning this into a normal multiplication (which is
# commutative) would not be OK
"inner(a,b)",
"inner(a,b)",
# this shouldn't ever go wrong
# but one never knows
"inner(b,a)",
"inner(b,a)",
"inner(2,a)",
"2*a",
"inner(a,2)",
"2*a",
"inner(a,(b1,b2))",
"inner(a,(b1,b2))",
"inner((a1,a2),b)",
"inner((a1,a2),b)",
"inner(2,(b1,b2))",
"(2*b1,2*b2)",
"inner((b1,b2),2)",
"(2*b1,2*b2)",
"inner(((a11,a12),(a21,a22)),(x1,x2))",
"(a11*x1+a12*x2,a21*x1+a22*x2)",
"inner((1,2),(3,4))",
"11",
"inner(inner((1,2),((3,4),(5,6))),(7,8))",
"219",
"inner((1,2),inner(((3,4),(5,6)),(7,8)))",
"219",
"inner((1,2),((3,4),(5,6)),(7,8))",
"219",
"inner(c,a1+b1)",
"inner(c,a1)+inner(c,b1)",
"inner(b1+c1,a)",
"inner(b1,a)+inner(c1,a)",
"inner(inner(a,b),c)",
"inner(a,inner(b,c))",
"inner(inner(a,b),c) - inner(a,inner(b,c))",
"0",
"inner(inner(a,b),c,d) - inner(a,b,inner(c,d))",
"0",
# trying some associativity and distributivity together
"inner(inner(a,b),c,d+f) - ( (inner(a,inner(b,c),d)) + inner(inner(a,b),c,f) )",
"0",
# bring it to a canonical form
# using associativity
"inner(a,b,c)",
"inner(a,inner(b,c))",
"inner(a,b+c,d)",
"inner(a,inner(b,d))+inner(a,inner(c,d))",
"inner(inner(a,b),inner(c,d))",
"inner(a,inner(b,inner(c,d)))",
# scalar product of vectors:
"inner((a, b, c), (x, y, z))",
"a*x+b*y+c*z",
# products of matrices and vectors:
"inner(((a, b), (c,d)), (x, y))",
"(a*x+b*y,c*x+d*y)",
"inner((x, y), ((a, b), (c,d)))",
"(a*x+c*y,b*x+d*y)",
"inner((x, y), ((a, b), (c,d)), (r, s))",
"a*r*x+b*s*x+c*r*y+d*s*y",
# matrix product:
"inner(((a,b),(c,d)),((r,s),(t,u)))",
"((a*r+b*t,a*s+b*u),(c*r+d*t,c*s+d*u))",
# ---------------------------------------
# using the dot
# ---------------------------------------
"a·b",
"inner(a,b)",
"a·b·c",
"inner(a,inner(b,c))",
"a·b*c",
"c*inner(a,b)",
# note how we use associativity to bring it all
# to a canonical form
"((a·b)·c)·d",
"inner(a,inner(b,inner(c,d)))",
"a*b·c",
"a*inner(b,c)",
"2*a·b",
"2*inner(a,b)",
"inv(a)·a",
"I",
"a·inv(a)",
"I",
"b·a·inv(a)·c",
"inner(b,c)",
"b·aᵀ·inv(aᵀ)·c",
"inner(b,c)",
"b·inv(aᵀ)·aᵀ·c",
"inner(b,c)",
"b·inv((a+b)ᵀ)·(b+a)ᵀ·c",
"inner(b,c)",
"(-a)·(-b)",
"inner(a,b)",
"I·I",
"I",
"I·Iᵀ",
"I",
"(-I)·(-I)",
"I",
"(-Iᵀ)·(-I)",
"I",
"c·(b+a)ᵀ·inv((a+b)ᵀ)·d",
"inner(c,d)",
"c·d·(b+a)ᵀ·inv((a+b)ᵀ)",
"inner(c,d)",
"d·(b+a)ᵀ·inv((a+b)ᵀ)",
"d",
"(b+a)ᵀ·inv((a+b)ᵀ)",
"I",
"c·d·(b+a)ᵀ·inv((a+b)ᵀ)·inv(d)",
"c",
"c·d·(b+a)ᵀ·inv((a+b)ᵀ)·inv(d)·inv(c)",
"I",
"c·d·(b+a)ᵀ·inv((a+b)ᵀ)·inv(c·d)",
"I",
"c·d·(a+b)ᵀ·inv(c·d·(b+a)ᵀ)",
"I",
"inv(c)·c",
"I",
"inv(c·a)·c·a",
"I",
"inv(c·b·a)·c·b·a",
"I",
"inv(c)·d·(a+b)ᵀ·inv(inv(c)·d·(b+a)ᵀ)",
"I",
"inv(c+f)·d·(a+b)ᵀ·inv(inv(f+c)·d·(b+a)ᵀ)",
"I",
"c·d·inv(a)·inv(c·d·inv(a))",
"I",
]