Dear Conrad, sympy.physics.mechanics is a package to get symbolic equations of motion of multibody systems of arbitrary complexity. It uses Kane's method. In github there is a repository called pst-notebooks where I deposited some of the stuff I did. Some examples may be o.k.
I am a retired guy and do all these simulations for fun, no other purpose. Take care, Peter On Wed 22. Jan 2025 at 11:28, 'Conrad Schiff' via sympy < [email protected]> wrote: > Thank you, Peter, for both your interest and for pointing me to another > place to ask the question. I certainly would like to see what you are > doing with the mechanics module so perhaps you can also point me to your > work. > > Conrad > > ------------------------------ > *From:* [email protected] <[email protected]> on behalf of > [email protected] <[email protected]> > *Sent:* Wednesday, January 22, 2025 2:22 AM > > *To:* [email protected] <[email protected]> > *Subject:* RE: [sympy] trigsimp, assumptions, and vector magnitudes > > > Dear Conrad, > > > > I have never seen this range restriction – but then again I use mostly a > sub library of sympy, called sympy.physics.mechanics (to set up symbolic > equations of motion of multibody systems), so I am no sympy expert at all! > > > > Maybe you could ask your question here, too: > > https://github.com/sympy/sympy > > > > Peter > > > > > > *From:* 'Conrad Schiff' via sympy <[email protected]> > *Sent:* Wednesday, January 22, 2025 2:28 AM > *To:* [email protected] > *Subject:* Re: [sympy] trigsimp, assumptions, and vector magnitudes > > > > Thank you, Peter but there is not quite what I was looking for. > > > > Technically your result simply proves that the square root of the square > of a real number x is the absolute value of x (\sqrt{x^2} = |x| for x \in > reals). Or in your terms: > > > > test = |sin(INC)|/\sqrt{sin(INC)^2} for INC real > > > > is always, identically, equal to 1. > > > > For my case, sin(INC)/|sin(INC)| is what I am looking at (i.e., the > numerator has no absolute value), and it is equal to 1 for my assumptions > but how can sympy know that without knowing that I've restricted INC to the > range [0,\pi]? If, for example, INC were in the range [\pi,2\pi] then > sin(INC)/|sin(INC)| = -1. > > > > If there is a way to say something like: > > > > INC = sm.symbols(‘INC’, real=True,range=[0,pi]) > > > > then I say that the result is proved. But I can't anything like this in > the documentation (perhaps I simply don't know where to look). > > > > Conrad > > > > > > > > > > > > > > > > > > > ------------------------------ > > *From:* [email protected] <[email protected]> on behalf of > [email protected] <[email protected]> > *Sent:* Tuesday, January 21, 2025 9:39 AM > *To:* [email protected] <[email protected]> > *Subject:* RE: [sympy] trigsimp, assumptions, and vector magnitudes > > > > I guess sympy does not know that INC is real and sin(INC) > 0. > > I just tried: > > INC = sm.symbols(‘INC’, real=True) > > test = sympy.Abs(sympy.sin(INC)) / sympy.sqrt(sympy.sin**2(INC)) > > > > test = 1 was the result, as expected > > > > *From:* 'Conrad Schiff' via sympy <[email protected]> > *Sent:* Tuesday, January 21, 2025 2:57 PM > *To:* [email protected] > *Subject:* [sympy] trigsimp, assumptions, and vector magnitudes > > > > I am writing a textbook on orbital mechanics and I would like to use sympy > for certain calculations (e.g., deriving expressions for certain vectors in > terms of Keplerian orbital elements) so that the readers realize the power > of sympy. I have a specific problem I am hoping this group could help me > with as I am also fairly new to sympy. Here is a minimum working example: > > > > ******************************** > > from sympy import * > > > > A, INC = symbols('A INC') > > zxh = Matrix([[-sin(A)*sin(INC)], [cos(A)*sin(INC)], [0]]) > > ******************************** > > > > At this point, I want to unitize 'zxh' so that the sin(INC) divides out. > This is a legitimate step since the range of INC is restricted to 0 to \pi > and the sin(INC) is always non-negative (I am ignoring the singularities on > the boundaries of 0 and \pi). I tried the following but I get the errors > below. Some help in coaxing sympy to do what I know can be done would be > appreciated. > > > > ******************************** > > mag2_zxh = trigsimp(zxh.dot(zxh)) > > -> gives sin**2(INC) > > > > mag_zxh = sqrt(mag2_zxh) > > -> gives sqrt(sin(INC)**2) > > > > zxh/mag_zxh > > -> gives Matrix([[-sin(A)*sin(INC)/sqrt(sin(INC)**2)], > [sin(INC)*cos(A)/sqrt(sin(INC)**2)], [0]]) > > > > ******************************** > > How can I coax sympy into recognizing that "sin(INC)/sqrt(sin(INC)**2) = 1"? > > > > Thanks for any help, > > Conrad Schiff, PhD > > Professor of Physics > > Capitol Technology University > > -- > 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 [email protected]. > To view this discussion visit > https://groups.google.com/d/msgid/sympy/CH3PR12MB943223CD74108121BFEDA1D9CFE62%40CH3PR12MB9432.namprd12.prod.outlook.com > <https://groups.google.com/d/msgid/sympy/CH3PR12MB943223CD74108121BFEDA1D9CFE62%40CH3PR12MB9432.namprd12.prod.outlook.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 [email protected]. > To view this discussion visit > https://groups.google.com/d/msgid/sympy/000d01db6c12%2440243f10%24c06cbd30%24%40gmail.com > <https://groups.google.com/d/msgid/sympy/000d01db6c12%2440243f10%24c06cbd30%24%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 [email protected]. > To view this discussion visit > https://groups.google.com/d/msgid/sympy/CH3PR12MB94323D11F41B3E23B7BC605CCFE12%40CH3PR12MB9432.namprd12.prod.outlook.com > <https://groups.google.com/d/msgid/sympy/CH3PR12MB94323D11F41B3E23B7BC605CCFE12%40CH3PR12MB9432.namprd12.prod.outlook.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 [email protected]. > To view this discussion visit > https://groups.google.com/d/msgid/sympy/001301db6c9e%245b749080%24125db180%24%40gmail.com > <https://groups.google.com/d/msgid/sympy/001301db6c9e%245b749080%24125db180%24%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 [email protected]. > To view this discussion visit > https://groups.google.com/d/msgid/sympy/LV8PR12MB9418A0001A666BC3597C1940CFE12%40LV8PR12MB9418.namprd12.prod.outlook.com > <https://groups.google.com/d/msgid/sympy/LV8PR12MB9418A0001A666BC3597C1940CFE12%40LV8PR12MB9418.namprd12.prod.outlook.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 [email protected]. To view this discussion visit https://groups.google.com/d/msgid/sympy/CABKqA0bAQx6YfOzDJNiEWJuUf_-r8%3Df-ov7PTRBX5gVOvhV%2BZQ%40mail.gmail.com.
