Reputation: 11468
I have 16 equations:
a, b, c, d, e, f, g = symbols('a, b, c, d, e, f, g', real=True)
z00, z01, z02, z03 = symbols('z00, z01, z02, z03', real=True)
z10, z11, z12, z13 = symbols('z10, z11, z12, z13', real=True)
z20, z21, z22, z23 = symbols('z20, z21, z22, z23', real=True)
z30, z31, z32, z33 = symbols('z30, z31, z32, z33', real=True)
Eq(z00, g)
Eq(z03, b + d + f + g)
Eq(-z00 + 6*z01 - 12*z02 + 8*z03, 8*b + 4*d + 2*f + g)
Eq(-8*z00 + 36*z01 - 54*z02 + 27*z03, 27*b + 9*d + 3*f + g)
Eq(z30, a + c + e + g)
Eq(z33, a + b + c + d + e + f + g)
Eq(-z30 + 6*z31 - 12*z32 + 8*z33, a + 8*b + c + 4*d + e + 2*f + g)
Eq(-8*z30 + 36*z31 - 54*z32 + 27*z33, a + 27*b + c + 9*d + e + 3*f + g)
Eq(-z00 + 6*z10 - 12*z20 + 8*z30, 8*a + 4*c + 2*e + g)
Eq(-z03 + 6*z13 - 12*z23 + 8*z33, 8*a + b + 4*c + d + 2*e + f + g)
Eq(z00 - 6*z01 + 12*z02 - 8*z03 - 6*z10 + 36*z11 - 72*z12 + 48*z13 + 12*z20 - 72*z21 + 144*z22 - 96*z23 - 8*z30 + 48*z31 - 96*z32 + 64*z33, 8*a + 8*b + 4*c + 4*d + 2*e + 2*f + g)
Eq(8*z00 - 36*z01 + 54*z02 - 27*z03 - 48*z10 + 216*z11 - 324*z12 + 162*z13 + 96*z20 - 432*z21 + 648*z22 - 324*z23 - 64*z30 + 288*z31 - 432*z32 + 216*z33, 8*a + 27*b + 4*c + 9*d + 2*e + 3*f + g)
Eq(-8*z00 + 36*z10 - 54*z20 + 27*z30, 27*a + 9*c + 3*e + g)
Eq(-8*z03 + 36*z13 - 54*z23 + 27*z33, 27*a + b + 9*c + d + 3*e + f + g)
Eq(8*z00 - 48*z01 + 96*z02 - 64*z03 - 36*z10 + 216*z11 - 432*z12 + 288*z13 + 54*z20 - 324*z21 + 648*z22 - 432*z23 - 27*z30 + 162*z31 - 324*z32 + 216*z33, 27*a + 8*b + 9*c + 4*d + 3*e + 2*f + g)
Eq(64*z00 - 288*z01 + 432*z02 - 216*z03 - 288*z10 + 1296*z11 - 1944*z12 + 972*z13 + 432*z20 - 1944*z21 + 2916*z22 - 1458*z23 - 216*z30 + 972*z31 - 1458*z32 + 729*z33, 27*a + 27*b + 9*c + 9*d + 3*e + 3*f + g)
and would like to express (solve) all those z..
in terms of a
, b
, c
, ...
So what I did was to take left- and right hand side of the equations and turned them into matrices like so:
AA = Matrix([[z00], [z03], [-z00 + 6*z01 - 12*z02 + 8*z03], [-8*z00 + 36*z01 - 54*z02 + 27*z03], [z30], [z33], [-z30 + 6*z31 - 12*z32 + 8*z33], [-8*z30 + 36*z31 - 54*z32 + 27*z33], [-z00 + 6*z10 - 12*z20 + 8*z30], [-z03 + 6*z13 - 12*z23 + 8*z33], [z00 - 6*z01 + 12*z02 - 8*z03 - 6*z10 + 36*z11 - 72*z12 + 48*z13 + 12*z20 - 72*z21 + 144*z22 - 96*z23 - 8*z30 + 48*z31 - 96*z32 + 64*z33], [8*z00 - 36*z01 + 54*z02 - 27*z03 - 48*z10 + 216*z11 - 324*z12 + 162*z13 + 96*z20 - 432*z21 + 648*z22 - 324*z23 - 64*z30 + 288*z31 - 432*z32 + 216*z33], [-8*z00 + 36*z10 - 54*z20 + 27*z30], [-8*z03 + 36*z13 - 54*z23 + 27*z33], [8*z00 - 48*z01 + 96*z02 - 64*z03 - 36*z10 + 216*z11 - 432*z12 + 288*z13 + 54*z20 - 324*z21 + 648*z22 - 432*z23 - 27*z30 + 162*z31 - 324*z32 + 216*z33], [64*z00 - 288*z01 + 432*z02 - 216*z03 - 288*z10 + 1296*z11 - 1944*z12 + 972*z13 + 432*z20 - 1944*z21 + 2916*z22 - 1458*z23 - 216*z30 + 972*z31 - 1458*z32 + 729*z33]])
bb = Matrix([[g], [b + d + f + g], [8*b + 4*d + 2*f + g], [27*b + 9*d + 3*f + g], [a + c + e + g], [a + b + c + d + e + f + g], [a + 8*b + c + 4*d + e + 2*f + g], [a + 27*b + c + 9*d + e + 3*f + g], [8*a + 4*c + 2*e + g], [8*a + b + 4*c + d + 2*e + f + g], [8*a + 8*b + 4*c + 4*d + 2*e + 2*f + g], [8*a + 27*b + 4*c + 9*d + 2*e + 3*f + g], [27*a + 9*c + 3*e + g], [27*a + b + 9*c + d + 3*e + f + g], [27*a + 8*b + 9*c + 4*d + 3*e + 2*f + g], [27*a + 27*b + 9*c + 9*d + 3*e + 3*f + g]])
Then I tried:
from sympy.solvers.solveset import linsolve
linsolve((AA, bb), [z00])
linsolve((AA, bb), [z00, z01, z02, z03, z10, z11, z12, z13, z20, z21, z22, z23, z30, z31, z32, z33])
but I got EmptySet()
. I know at that at least z00
should equal to g
so I was expecting at least some sort of non-empty answer.
Please, does anyone know how to solve these equations, i.e. why do I get that EmptySet()
?
Upvotes: 0
Views: 100
Reputation: 371
Try solve()
_Z = symbols('z0(0:4),z1(0:4),z2(0:4),z3(0:4)', real=True)
solve(AA - bb, _Z)
Not sure why linsolve()
like below returns EmptySet
, but I'm guessing it's related to the order of the symbols in the expressions.
linsolve(AA - bb, _Z)
But the code below works
A = Matrix([[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[-1, 6, -12, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[-8, 36, -54, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 6, -12, 8],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, 36, -54, 27],
[-1, 0, 0, 0, 6, 0, 0, 0, -12, 0, 0, 0, 8, 0, 0, 0],
[ 0, 0, 0, -1, 0, 0, 0, 6, 0, 0, 0, -12, 0, 0, 0, 8],
[ 1, -6, 12, -8, -6, 36, -72, 48, 12, -72, 144, -96, -8, 48, -96, 64],
[ 8, -36, 54, -27, -48, 216, -324, 162, 96, -432, 648, -324, -64, 288, -432, 216],
[-8, 0, 0, 0, 36, 0, 0, 0, -54, 0, 0, 0, 27, 0, 0, 0],
[ 0, 0, 0, -8, 0, 0, 0, 36, 0, 0, 0, -54, 0, 0, 0, 27],
[ 8, -48, 96, -64, -36, 216, -432, 288, 54, -324, 648, -432, -27, 162, -324, 216],
[64, -288, 432, -216, -288, 1296, -1944, 972, 432, -1944, 2916, -1458, -216, 972, -1458, 729]])
assert A * Matrix(_Z) == AA
linsolve((A, bb))
Upvotes: 1