1
$\begingroup$

I have lot of polynomials like this

f1[a1_,x1_] := (a1 x1 + 1 - x1)

f2[a2_,x2_] := (a2 x2 + 1 - x2)

f3[a1_,x1_,a2_,x2_] := (a1 x1 + 1 - x1)*(a2 x2 + 1 - x2)

f4[a1_,x1_,a2_,x2_] := (a1 x1 + 1 - x1)*(a2 x2 + 1 - x2)*x2

f5[a1_,x1_,a2_,x2_] := (a1 x1 + 1 - x1)*(a2 x2 + 1 - x2)*(a1 x1 + 1 - x1)

f6[a1_,x1_,a2_,x2_,a3_,x3_] := (a1 x1 + 1 - x1)*(a2 x2 + 1 - x2)*(a3 x3 + 1 -x3)

and so on...

I want to know what integer linear combinations of these polynomials would result in a 0 polynomial. That is, I want to the set of all solutions for

c1 f1 + c2 f2 + c3 f3 + c4 f4 + c5 f5 + c6 f6 = 0

When I enter

Solve[c1 f1[a1_,x1_] + c2 f2[a2_,x2_] + c3 f3[a1_,x1_,a2_,x2_] + c4 f4[a1_,x1_,a2_,x2_] + c5 f5[a1_,x1_,a2_,x2_] + c6 f6[a1_,x1_,a2_,x2_,a3_,x3_] == 0, {c1,c2,c3,c4,c5,c6}]

mathematica just expresses one variable in terms of all others. That's not what I want. I want all non-trivial integer solutions for c1, c2, c3, c4, c5, c6 (some of them could be zero) such that the above equation is satisfied for all values of x1,x2,x3,a1,a2,a3.

I could try to expand my polynomials and express it as a set of linear equations Mc=0, where the matrix M represents the coefficients of the polynomials. But unfortunately, when I expand my polynomials, they have exponential number of monomials, and I could not use this method even when problem size becomes bigger.

Are there better ways to solve my problem?

$\endgroup$
  • $\begingroup$ SolveAlways? $\endgroup$ – AccidentalFourierTransform Sep 29 at 16:06
  • $\begingroup$ To start with, Blank is used on the LHS in the definition of a function, not when calling the function. $\endgroup$ – Bob Hanlon Sep 29 at 16:08
  • $\begingroup$ FindInstance? $\endgroup$ – mikado Sep 29 at 16:22
  • $\begingroup$ You could substitute random integers for your variables. $\endgroup$ – mikado Sep 30 at 5:43
2
$\begingroup$

You could try SolveAlways, but it only returns the trivial solution:

SolveAlways[
    c1 f1[a1,x1] + c2 f2[a2,x2] + c3 f3[a1,x1,a2,x2] + c4 f4[a1,x1,a2,x2] +
    c5 f5[a1,x1,a2,x2] + c6 f6[a1,x1,a2,x2,a3,x3] == 0,
    {x1,x2,x3,a1,a2,a3}
]

{{c4 -> 0, c5 -> 0, c3 -> 0, c6 -> 0, c1 -> 0, c2 -> 0}}

$\endgroup$
  • $\begingroup$ That's nice! When I tried only some polynomials, mathematica gave an answer like {{b3 -> 0, b4 -> 0, b5 -> 0, b6 -> 0, b1 -> d9, d1 -> -d9, b2 -> d7, d2 -> -d7, d4 -> d7, d5 -> 0, d3 -> -d6 + d9, d8 -> 0}}. From this list, is there a way I could extract individual values, and substitute d7, d9, d6 with some numbers? $\endgroup$ – satya Sep 29 at 16:53
  • $\begingroup$ SolveAlways seems like a powerful tool. May I know how it works? For my application, the polynomials have small factors but I when I write it in canonical form, the polynomials have exponential number of monomials. Efficiency is my concern. If SolveAlways internally expands all the polynomials and expresses it as solving equation of Mc = 0. Then, it might not be efficient enough for my application. $\endgroup$ – satya Sep 29 at 16:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.