On Sat, Aug 5, 2017 at 2:48 PM, Francesco Bonazzi <franz.bona...@gmail.com>
wrote:

>
>
> On Friday, 4 August 2017 19:16:04 UTC-4, Aaron Meurer wrote:
>>
>>
>>
>> On Fri, Aug 4, 2017 at 6:19 PM, Francesco Bonazzi <franz....@gmail.com>
>> wrote:
>>
>>>
>>>
>>> On Friday, 4 August 2017 17:34:25 UTC-4, Aaron Meurer wrote:
>>>>
>>>> You can try this, but I foresee problems reusing I=sqrt(-1) the complex
>>>> number as i the quaternion. Mathematically they aren't the same thing, but
>>>> even in terms of SymPy, ImaginaryUnit is burdened with things like
>>>> assumptions, which might cause issues with quaternions.
>>>>
>>>
>>> Implementing quaternions should be simple. Deciding how they interact
>>> with the rest of SymPy may be more complicated.
>>>
>>
>> If you implement them like Ondrej suggested, as a 4-tuple, they will
>> interact badly. Even just adding a scalar to a quaternion will be difficult
>> to make work, as the scalar x would have to be converted to (x, 0, 0, 0)
>> first.
>>
>> On the other hand, if the quaternions i, j, and k are just special
>> noncommutative expressions, then they will interact just fine, because
>> SymPy already knows how to deal with noncommutative expressions.  The only
>> hard thing will be making things like i**2 and i*j auto-simplify (if
>> desired). The former can be done with _eval_power, and the latter with Mul
>> postprocessors.
>>
>>
> That's one way to go, even if I'm not so sure on whether *i* should be
> different from the complex numbers. I don't think we need the
> postprocessors, setting a right value for *_op_priority* should be enough
> in this case. Postprocessors are meant to handle more complicated cases.
>
>
>
>>
>>>
>>>> And maybe even you could do something with the Mul processors to make
>>>> them auto-simplify, if that's what is desired.
>>>>
>>>
>>> I would suggest an immediate evaluation in this case.
>>>
>>> Maybe a Quaternion class is the simplest way to implement quaternions.
>>>
>>
>> What do you mean by a Quaternion class? Are you thinking something more
>> like my or Ondrej's suggestion?
>>
>
> Well, sort of. We could have a class that stores four arguments and
> overrides __mul__ and __add__ to behave as a Quaternion.
>
> Its constructor could have some special properties, such as:
>
>    - return the first argument only if the other ones are zero (a real
>    number).
>    - return a complex number if the last two arguments are zero (a
>    complex number).
>    - in the printer, expressions such as Quaternion(0, 0, a, 0) should be
>    printed as *a*j* where *j = Quaternion(0, 0, 1, 0)*.
>
> Some possible extensions remain:
>
>    - how should functions of quaternions behave? Like *exp(q)*, *sin(q)*,
>    *log(q)*?
>    - how should quaternions interact with matrices?
>    - how should quaternions behave in equation solvers?
>    - limits and derivatives of quaternions?
>
>
If quaternions are just regular noncommutative expressions, these will all
just work out of the box.

Aaron Meurer


> 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 post to this group, send email to sympy@googlegroups.com.
> Visit this group at https://groups.google.com/group/sympy.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/sympy/306a9ea8-8d59-4535-8f9e-35f7b245d696%40googlegroups.com
> <https://groups.google.com/d/msgid/sympy/306a9ea8-8d59-4535-8f9e-35f7b245d696%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 post to this group, send email to sympy@googlegroups.com.
Visit this group at https://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAKgW%3D6%2BcuAV3oW7QhjZAUt975QgkH0iLFtv6SmsLZTJ6bR1-qw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to