I have a set of $4$ equations with $4$ unknowns $\theta_1$ to $\theta_4$, and would like to eliminate the number of unknowns, to get a smaller set of equations, e.g. $n$ equations with $n$ unknowns, where $n=3,2$, or even better $1$. The four equations look like this
$\small-\cos \left(\theta _1\right) \left(a_2 \cos \left(\theta _2\right)+b_4 \sin \left(\theta _3\right)\right)+b_5 \left(\sin \left(\theta _1\right) \cos \left(\theta _4\right)-\sin \left(\theta _4\right) \cos \left(\theta _1\right) \cos \left(\theta _3\right)\right)+o_1=0\\ \small-\sin \left(\theta _1\right) \left(a_2 \cos \left(\theta _2\right)+b_4 \sin \left(\theta _3\right)\right)-b_5 \left(\cos \left(\theta _1\right) \cos \left(\theta _4\right)+\sin \left(\theta _1\right) \sin \left(\theta _4\right) \cos \left(\theta _3\right)\right)+o_2=0\\ \small a_2 \left(-\sin \left(\theta _2\right)\right)-b_5 \sin \left(\theta _3\right) \sin \left(\theta _4\right)+b_4 \cos \left(\theta _3\right)+o_3=0\\ \small \cos \left(\theta _4\right) \left(e_2 \sin \left(\theta _1\right)+e_1 \cos \left(\theta _1\right)\right)+\sin \left(\theta _4\right) \left(\frac{1}{2} e_3 \sin \left(\theta _3\right)-e_2 \cos \left(\theta _1\right) \cos \left(\theta _3\right)+e_1 \sin \left(\theta _1\right) \cos \left(\theta _3\right)\right)=0$
which can also be written as an equivalent form
$\small b_5 \cos \left(\theta _4\right)+o_1 \sin \left(\theta _1\right)-o_2 \cos \left(\theta _1\right)=0\\ \small-\sin \left(\theta _1\right) \left(a_2 \cos \left(\theta _2\right)+b_4 \sin \left(\theta _3\right)\right)-b_5 \left(\cos \left(\theta _1\right) \cos \left(\theta _4\right)+\sin \left(\theta _1\right) \sin \left(\theta _4\right) \cos \left(\theta _3\right)\right)+o_2=0\\ \small a_2 \left(-\sin \left(\theta _2\right)\right)-b_5 \sin \left(\theta _3\right) \sin \left(\theta _4\right)+b_4 \cos \left(\theta _3\right)+o_3=0\\\small \cos \left(\theta _4\right) \left(e_2 \sin \left(\theta _1\right)+e_1 \cos \left(\theta _1\right)\right)+\sin \left(\theta _4\right) \left(\frac{1}{2} e_3 \sin \left(\theta _3\right)-e_2 \cos \left(\theta _1\right) \cos \left(\theta _3\right)+e_1 \sin \left(\theta _1\right) \cos \left(\theta _3\right)\right)=0$
I'm thinking of using the Groebner basis to solve the problem, but the problem has some feature making it challenging: 1. it involves sine and cosine 2. it involves some symbolic coefficients $a_2,b_4,b_5$ and $o_1,o_2,o_3,e_1,e_2,e_3$, the former three are constant so I can give them some numbers, but the latter six are variable, so I can't give them numbers.
I tried using the command
basisSinCos = GroebnerBasis[ eqs, {Subscript[\[Theta], 1], Subscript[\[Theta], 2],
Subscript[\[Theta], 3]}, {Subscript[\[Theta], 4]}];
but somehow it return some lengthy results with more than four equations; moreover, $\theta_4$ is not eliminated at all. I wonder what does this mean?
I guess this may be because that the GrobenerBasis is not quite suitable for the case involving sine and cosine. So I change $\sin\theta_i$ and $\cos\theta_i$ into $x_i$ and $y_i$, and add the four conditions of $\sin^2\theta_i+\cos^2\theta_i=1$, then end up with $8$ polynomials, i.e.
$\left\{-y_1 \left(a_2 y_2+b_4 x_3\right)+b_5 \left(x_1 y_4-x_4 y_1 y_3\right)+o_1,-x_1 \left(a_2 y_2+b_4 x_3\right)-b_5 \left(x_1 x_4 y_3+y_1 y_4\right)+o_2,-a_2 x_2-b_5 x_3 x_4+b_4 y_3+o_3,x_4 \left(e_1 x_1 y_3+\frac{e_3 x_3}{2}-e_2 y_1 y_3\right)+y_4 \left(e_2 x_1+e_1 y_1\right),x_1^2+y_1^2-1,x_2^2+y_2^2-1,x_3^2+y_3^2-1,x_4^2+y_4^2-1\right\}$
This time, mathematica can provide the correct GrobenerBasis or eliminate the variables as I wish, only when I specify numerical values to all the coefficients, via the function
GroebnerBasis[ eqspoly, {Subscript[x, 1], Subscript[x, 2], Subscript[x, 4], Subscript[x, 3]}, {Subscript[y, 1], Subscript[y, 2], Subscript[y, 4],Subscript[y, 3]}];
however, if I keep the symbolic coefficients as symbols, it will keep running without returning a result if the coefficients are left as symbols even I only leave only the three symbols $o_1,o_2,o_3$.
So I wonder whether the Groebner basis is the correct tool I should use? and how should I continue? Could someone give me a hand? I have uploaded the code to "https://www.dropbox.com/sh/5e46dntkyrllu4y/AAD4dCrTRQcZO3GT3qhC9JCTa?dl=0"
Thanks a lot!
Follow up:
According to the comments, it seems that changing the equations into polynomials is preferable. Below are the code for these eight equations
eqspoly={Subscript[o, 1]-Subscript[y, 1] (Subscript[b, 4] Subscript[x, 3]+Subscript[a, 2] Subscript[y, 2])+Subscript[b, 5] (-Subscript[x, 4] Subscript[y, 1] Subscript[y, 3]+Subscript[x, 1] Subscript[y, 4]),Subscript[o, 2]-Subscript[x, 1] (Subscript[b, 4] Subscript[x, 3]+Subscript[a, 2] Subscript[y, 2])-Subscript[b, 5] (Subscript[x, 1] Subscript[x, 4] Subscript[y, 3]+Subscript[y, 1] Subscript[y, 4]),Subscript[o, 3]-Subscript[a, 2] Subscript[x, 2]-Subscript[b, 5] Subscript[x, 3] Subscript[x, 4]+Subscript[b, 4] Subscript[y, 3],Subscript[x, 4] ((Subscript[e, 3] Subscript[x, 3])/2+Subscript[e, 1] Subscript[x, 1] Subscript[y, 3]-Subscript[e, 2] Subscript[y, 1] Subscript[y, 3])+(Subscript[e, 2] Subscript[x, 1]+Subscript[e, 1] Subscript[y, 1]) Subscript[y, 4],-1+Subsuperscript[x, 1, 2]+Subsuperscript[y, 1, 2],-1+Subsuperscript[x, 2, 2]+Subsuperscript[y, 2, 2],-1+Subsuperscript[x, 3, 2]+Subsuperscript[y, 3, 2],-1+Subsuperscript[x, 4, 2]+Subsuperscript[y, 4, 2]}
then I tried the following code:
basis= GroebnerBasis[ eqspoly, {Subscript[x, 1], Subscript[x, 2], Subscript[x, 4], Subscript[x, 3]}, {Subscript[y, 1], Subscript[y, 2], Subscript[y, 4], Subscript[y, 3]}, CoefficientDomain -> RationalFunctions, MonomialOrder -> EliminationOrder]
This also runs without returning a result. I could change the order of the variables in the parameters, but in my several test, they are always slow, since there are around 600 different ways of sorting these variables, I don't know how to choose from. I wonder if there is any guideline of how to choose the order? And I wonder if I have used the correct options for the the command I'm using in the GroebnerBasis? Thanks!
MonomialOrder
andSort
settings; see the docs forGroebnerBasis
for details. $\endgroup$Cos[x]
withc[x]
, adding the usual trig identity relations e.g.c[x]^2+s[x]^2-1
, and creating a term order to eliminate some variables (e.g.MonomialOrder->EliminationOrder
with variable lists set up for eliminating those in the third argument to GB). $\endgroup$