Oscar, I was hoping for a general solution (one that unfortunately seems out of reach). I'm not at liberty to explain more of the nature of the application but I can probably say that determining q1 and q2 from two q_dp1 and q_dp2 is a calibration step for a mechanism. The plan is commit a solution (probably not the rational trig solution discussed here) to code on a microcontroller. Avoiding sin, cos and tan (and just use ratios and sqrt) would save code space and seemed (at first glance) to be elegant.
While I had hoped a simple change or rearrangement would make a simpler solution appear, I'm thankful for the math wizards of sympy to provide the valuable feedback. I do plan on asking the professor that has written a book on the subject to take a look and see if he agrees that the solution is not as straight-forward as I envisioned (or he may suggest an alternative approach). Thanks, everyone, for the help!! On Monday, August 8, 2022 at 3:03:06 PM UTC-7 Kevin Pauba wrote: > Dang, didn't mean to misspell your name! > > On Mon, Aug 8, 2022 at 3:01 PM Kevin Pauba <klp...@gmail.com> wrote: > >> Hello Alen, so nice of you to reply. >> >> I have already worked out the solution using sin, cos and tangent. I >> also used sympy to help solve the simultaneous equations and the solution >> was succinct. I used rational trig as it seemed interesting and I had >> thought that sympy might help to solve the problem in an even simpler >> form. As we have seen, that's not the case. >> >> I'm now investigating the use of the parametric circle equation >> https://mathnow.wordpress.com/2009/11/06/a-rational-parameterization-of-the-unit-circle/. >> >> It seems that this model fits the problem space more closely. >> >> Again, thanks for the feedback and feel free to share anything else that >> comes to mind. >> >> On Mon, Aug 8, 2022 at 12:53 PM Alan Bromborsky <abrom...@gmail.com> >> wrote: >> >>> It is not hard to write a closed form solution in terms of sine, cosine >>> and the lengths of Q1, Q2, and the distance of the pivot point from the >>> origin assuming the initial rotation angle is zero (makes it simpler). Is >>> there any reason to object to that solution letting sympy do the messy >>> algebra. I just takes a little vector algebra to set up the problem. >>> On 8/6/22 10:37 PM, Kevin Pauba wrote: >>> >>> Also, oscar, none of the radicals in the formulas are due to my getting >>> the lengths. All q* terms are quadrances ... no lengths are used in the >>> formulas. I should have said quadrance of DP (the square of the length of >>> the segment DP) instead of just segment DP. Once I have the values for q1, >>> q2, q_dp and s, I'll convert them to length and angles for human >>> consumption. >>> >>> On Saturday, August 6, 2022 at 2:26:36 PM UTC-7 Kevin Pauba wrote: >>> >>>> Oscar, I think I misstated something about rational trig that >>>> reinforces your statement that it avoids square roots. Maybe there is >>>> some >>>> manipulation of the equations (similar in spirit to using sympy.unrad()) >>>> that would keep them in a form that doesn't require the square roots. It >>>> would seem that sqrt would only be needed in the very last step when >>>> evaluating the quadrances when I want a final distance measure once solved >>>> ( d = sqrt(q1), for instance). >>>> >>>> On Saturday, August 6, 2022 at 10:35:38 AM UTC-7 Kevin Pauba wrote: >>>> >>>>> Rational trigonometry totally eschews the use of transcendental >>>>> functions like sine and cosine. The "Triple Spread Formula" relating the >>>>> speads to the quadrances, for example, is quadratic (as is the "Triple >>>>> Quad >>>>> Formula") -- the use of square roots is unavoidable. >>>>> >>>>> After working the same problem using traditional circular functions >>>>> (sine & cosine), I was pleased to see a much simpler solution (that took >>>>> relatively little processing time). I am intrigued with rational >>>>> trigonometry but a bit disappointed that a solution is more elusive. >>>>> >>>>> On Saturday, August 6, 2022 at 9:14:19 AM UTC-7 Oscar wrote: >>>>> >>>>>> The equations you are attempting to solve lead to a very complicated >>>>>> Groebner basis that is slow to compute (I'm not sure how long it >>>>>> takes) and probably gives quite a complicated expression for the >>>>>> solution. >>>>>> >>>>>> It might be better if you can derive the equations without >>>>>> introducing >>>>>> radicals i.e. to work with the quadrances rather than square rooting >>>>>> them to get lengths. I'm not sure how you derived this but I imagine >>>>>> the intention of rational geometry is to avoid things like square >>>>>> roots. >>>>>> >>>>>> On Sat, 6 Aug 2022 at 16:22, Kevin Pauba <klp...@gmail.com> wrote: >>>>>> > >>>>>> > That might be another approach but this represents an applied >>>>>> geometry problem (mechanics). The segment DP (along with s) is an input >>>>>> measure that is easy to determine/specify. >>>>>> > >>>>>> > On Saturday, August 6, 2022 at 4:45:13 AM UTC-7 smi...@gmail.com >>>>>> wrote: >>>>>> >> >>>>>> >> >>>>>> >> Kevin, I took a look at some of the rational geometry links -- it >>>>>> makes me wonder if you might approach the relationship between Q1 and Q2 >>>>>> and the area of the triangle extending past the line instead of simply >>>>>> the >>>>>> length DP. >>>>>> >> >>>>>> >> /c >>>>>> >> On Friday, August 5, 2022 at 9:11:39 PM UTC-5 klp...@gmail.com >>>>>> wrote: >>>>>> >>> >>>>>> >>> Hi Oscar, >>>>>> >>> >>>>>> >>> That very well may be (as you've noticed, I'm not well versed in >>>>>> math as I once was). This is an applied geometry problem (see attached >>>>>> diagram) where the triangle rotates about point A. I am solving for the >>>>>> relationships between q1 and q2, the perpendicular distance from P to >>>>>> the >>>>>> base of the triangle (segment DP) and the angular measure s using >>>>>> rational >>>>>> trigonometry (see >>>>>> https://stijnoomes.com/laws-of-rational-trigonometry/). I have a >>>>>> solution using sin, cos but I'm interested in this alternative method. >>>>>> >>> >>>>>> >>> equ1 in my working example solves for the segment DP given q1, q2 >>>>>> and s (and angular measure). The problem presented here is to determine >>>>>> q1 >>>>>> and q2 given two known segments and angular measures (q_dp1, s1) and >>>>>> (q_dp2, s2). >>>>>> >>> >>>>>> >>> I hope this makes sense and that the information might help you >>>>>> help me. >>>>>> >>> >>>>>> >>> Thanks for taking the time looking into it! >>>>>> >>> >>>>>> >>> On Friday, August 5, 2022 at 4:50:09 PM UTC-7 Oscar wrote: >>>>>> >>>> >>>>>> >>>> I just had a quick look and I think that maybe this has a >>>>>> positive >>>>>> >>>> dimensional solution set. >>>>>> >>>> >>>>>> >>>> On Fri, 5 Aug 2022 at 16:08, Kevin Pauba <klp...@gmail.com> >>>>>> wrote: >>>>>> >>>> > >>>>>> >>>> > Here's the minimal working example (except for it hanging on >>>>>> solve()): >>>>>> >>>> > >>>>>> >>>> > import sympy as sym >>>>>> >>>> > from sympy import sqrt >>>>>> >>>> > >>>>>> >>>> > q1, q2, s, s1, s2, q_dp1, q_dp2 = sym.symbols('Q_1, Q_2, s, >>>>>> s_1, s_2, Q_dp_1, Q_dp_2') >>>>>> >>>> > >>>>>> >>>> > equ1 = q1*s - q2*s + 2*q2 - 2*sqrt(q2*(q1*s - q2*s + q2 + >>>>>> 2*sqrt(q1*q2*s*(1 - s)))) + 2*sqrt(q1*q2*s*(1 - s)) >>>>>> >>>> > >>>>>> >>>> > eq1 = equ1.subs({ s: s1 }) - q_dp1 >>>>>> >>>> > print(f"{eq1} = 0") >>>>>> >>>> > >>>>>> >>>> > eq2 = equ1.subs({ s: s2 }) - q_dp2 >>>>>> >>>> > print(f"{eq2} = 0") >>>>>> >>>> > >>>>>> >>>> > soln = sym.solve([eq1, eq2], (q1, q2), simplify=False) >>>>>> >>>> > print(f"soln = {soln}") >>>>>> >>>> > >>>>>> >>>> > On Friday, August 5, 2022 at 7:47:07 AM UTC-7 Oscar wrote: >>>>>> >>>> >> >>>>>> >>>> >> You should be able to obtain a parametric Groebner basis to >>>>>> represent >>>>>> >>>> >> the solutions of this system. Whether that leads to an >>>>>> explicit >>>>>> >>>> >> solution in radicals is hard to say without trying. >>>>>> >>>> >> >>>>>> >>>> >> I would demonstrate how to do this but the code for putting >>>>>> together >>>>>> >>>> >> the equations is incomplete. >>>>>> >>>> >> >>>>>> >>>> >> On Fri, 5 Aug 2022 at 14:01, Chris Smith <smi...@gmail.com> >>>>>> wrote: >>>>>> >>>> >> > >>>>>> >>>> >> > If you remove the radicals >>>>>> (`sympy.solvers.solvers.unrad(eq1)`) and replace `Q1` and `Q2` with `x` >>>>>> and >>>>>> `y` and `Q_dp_1` with a and `s1` with `b` you will get an expression >>>>>> that >>>>>> is of degree 4 in every variable and can be split into a term with `a` >>>>>> and >>>>>> `b` and a term with only `b` -- both with `x` and `y`. >>>>>> >>>> >> > >>>>>> >>>> >> > u1 = a*(a**3 - 4*a**2*y*(2 - b) - 2*a*y**2*(-3*b**2 + 8*b - >>>>>> 8) - 4*b**3*x**3 + 2*b**2*(-x**2*(-3*a + 2*y*(b - 2)) + 2*y**3*(b - 2)) >>>>>> - >>>>>> 4*b*x*(a**2 + a*y*(b - 2) + y**2*(-b**2 - 8*b + 8))) + \ >>>>>> >>>> >> > b**2*(b*(x**2 + y**2) + 2*x*y*(b - 2))**2 >>>>>> >>>> >> > >>>>>> >>>> >> > Replace a,b with c,d (for `q_dp_2` and `s2`) to get `u2`. I >>>>>> can't imagine that solving a pair of quartics is going to give a nice >>>>>> solution. But solving this system with known values for `a` and `b` >>>>>> would >>>>>> be straightforward with `nsolve`. >>>>>> >>>> >> > >>>>>> >>>> >> > /c >>>>>> >>>> >> > >>>>>> >>>> >> > On Thursday, August 4, 2022 at 11:54:24 PM UTC-5 >>>>>> klp...@gmail.com wrote: >>>>>> >>>> >> >> >>>>>> >>>> >> >> And eq1=Q_1*s_1 - Q_2*s_1 + 2*Q_2 - Q_dp_1 - >>>>>> 2*sqrt(Q_2*(Q_1*s_1 - Q_2*s_1 + Q_2 + 2*sqrt(Q_1*Q_2*s_1*(1 - s_1)))) + >>>>>> 2*sqrt(Q_1*Q_2*s_1*(1 - s_1)) ... sorry, long day! >>>>>> >>>> >> >> >>>>>> >>>> >> >> On Thursday, August 4, 2022 at 9:39:53 PM UTC-7 Kevin >>>>>> Pauba wrote: >>>>>> >>>> >> >>> >>>>>> >>>> >> >>> Sorry, Jeremy. Good suggestion! >>>>>> >>>> >> >>> >>>>>> >>>> >> >>> s1, s2, q_dp1, q_dp2 = sym.symbols('s_1, s_2, Q_dp_1, >>>>>> Q_dp_2') >>>>>> >>>> >> >>> eq1 = equ1.subs({ s: s1 }) - q_dp1 >>>>>> >>>> >> >>> md( "$" + sym.latex(eq1) + " = 0$\n" ) >>>>>> >>>> >> >>> >>>>>> >>>> >> >>> eq2 = equ1.subs({ s: s2 }) - q_dp2 >>>>>> >>>> >> >>> md( "$" + sym.latex(eq2) + " = 0$\n" ) >>>>>> >>>> >> >>> >>>>>> >>>> >> >>> soln = sym.solve([eq1, eq2], q1, q2) >>>>>> >>>> >> >>> print(f"soln = {soln}") >>>>>> >>>> >> >>> >>>>>> >>>> >> >>> I'll set simplify to False and see how it goes ... >>>>>> >>>> >> >>> On Thursday, August 4, 2022 at 8:18:00 PM UTC-7 Kevin >>>>>> Pauba wrote: >>>>>> >>>> >> >>>> >>>>>> >>>> >> >>>> I've attached a portion of a jupyter notebook. I'm >>>>>> attempting to solve a simultaneous equation using sympy. The sym.solve() >>>>>> in >>>>>> the green input box doesn't return (well, I waited over night on my >>>>>> macbook >>>>>> pro). Might the solution be intractable? Is there another way to get a >>>>>> solution? Any help is greatly appreciated. >>>>>> >>>> >> > >>>>>> >>>> >> > -- >>>>>> >>>> >> > You received this message because you are subscribed to the >>>>>> Google Groups "sympy" group. >>>>>> >>>> >> > To unsubscribe from this group and stop receiving emails >>>>>> from it, send an email to sympy+un...@googlegroups.com. >>>>>> >>>> >> > To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/sympy/72f1b075-dbe2-41c0-bba6-9305c5960443n%40googlegroups.com. >>>>>> >>>>>> >>>>>> >>>> > >>>>>> >>>> > -- >>>>>> >>>> > You received this message because you are subscribed to the >>>>>> Google Groups "sympy" group. >>>>>> >>>> > To unsubscribe from this group and stop receiving emails from >>>>>> it, send an email to sympy+un...@googlegroups.com. >>>>>> >>>> > To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/sympy/54eddcdc-a42e-4ebc-87b8-b6aaea1e2d0an%40googlegroups.com. >>>>>> >>>>>> >>>>>> > >>>>>> > -- >>>>>> > You received this message because you are subscribed to the Google >>>>>> Groups "sympy" group. >>>>>> > To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to sympy+un...@googlegroups.com. >>>>>> > To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/sympy/357f1ceb-d50f-484f-ae1e-0c82a1414a62n%40googlegroups.com. >>>>>> >>>>>> >>>>>> >>>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "sympy" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to sympy+un...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/sympy/da2d4dba-9b7a-478c-9454-755cf0b9f2cbn%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/sympy/da2d4dba-9b7a-478c-9454-755cf0b9f2cbn%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >>> -- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "sympy" group. >>> To unsubscribe from this topic, visit >>> https://groups.google.com/d/topic/sympy/vPE0dlZTqVM/unsubscribe. >>> To unsubscribe from this group and all its topics, send an email to >>> sympy+un...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/sympy/489ed715-994d-f2c7-3e87-bcf6307ab061%40gmail.com >>> >>> <https://groups.google.com/d/msgid/sympy/489ed715-994d-f2c7-3e87-bcf6307ab061%40gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sympy+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/c046777c-d7f3-4fb5-ad18-9aacf7564c84n%40googlegroups.com.