# Quaternion * integer

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 close merge delete

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"

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

Sort by » oldest newest most voted

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))

more

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)

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))