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.

Reply via email to