Ask Your Question
1

Quaternion * integer

asked 2019-01-03 16:36:01 +0100

Spreeter gravatar image

how can i multiply my own quaternion group elements with a normal integer?

it says this: unsupported operand parent(s) for +: 'Integer Ring' and '<class 'quater'="">'

edit retag flag offensive close merge delete

Comments

Culd you please provide your implementation of the quaternions ?

tmonteil gravatar imagetmonteil ( 2019-01-03 19:12:51 +0100 )edit

class kvat(object):

a=0
b=0
c=0
d=0
def __init__(self,a,b,c,d):
    self.a = RR(a)
    self.b = RR(b)
    self.c = RR(c)
    self.d = RR(d)

def __repr__(self):
    return str(self.a) + "+" + str(self.b) + "i" + "+" + str(self.c) + "j" + "+" + str(self.d) + "k"


def __add__(self,other):

    q = self.a + other.a
    w = self.b + other.b
    v = self.c + other.c
    t = self.d + other.d
    return kvat(q,w,v,t)

and the mul down below, max comment lenght was reached but i copied it here already anyway

Spreeter gravatar imageSpreeter ( 2019-01-03 19:25:01 +0100 )edit

1 Answer

Sort by » oldest newest most voted
1

answered 2019-01-03 17:26:41 +0100

Sébastien gravatar image

updated 2019-01-06 22:41:56 +0100

by defining a method def __mul__(self, other): in your class called quater. Something like this:

def __mul__(self, other):
    if isinstance(other, Integer):
        ...
        return something
    elif isinstance(other, quater):
        ...
        return something else
    else:
        raise TypeError('multiplication with other(={}) not defined'.format(other))
edit flag offensive delete link more

Comments

i wrote it like this, and it works with two group elements but i cant multiply with 5,for example

def __mul__(self,other):

    q = self.a * other.a - self.b * other.b - self.c * other.c - self.d * other.d
    w = self.a * other.b + self.b * other.a + self.c * other.d - self.d * other.c
    v = self.a * other.c + self.c * other.a + self.d * other.b - self.b * other.d
    t = self.a * other.d + self.d * other.a + self.b * other.c - self.c * other.b
    return quater(q,w,v,t)
Spreeter gravatar imageSpreeter ( 2019-01-03 17:50:35 +0100 )edit
1

you must do something like:

if isinstance(other, Integer):
    ...
    return something
elif isinstance(other, quater):
    ...
    return something else
else:
    raise TypeError('multiplication with other(={}) not defined'.format(other))
Sébastien gravatar imageSébastien ( 2019-01-04 12:20:48 +0100 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2019-01-03 16:36:01 +0100

Seen: 439 times

Last updated: Jan 06 '19