In [1]:
from sympy import *
from galgebra.printer import Format
Format()
from galgebra.ga import Ga
In [2]:
(x, y, z) = xyz = symbols('x,y,z',real=True)
(o3d, ex, ey, ez) = Ga.build('e_x e_y e_z', g=[1, 1, 1], coords=xyz)
In [3]:
V = o3d
In [4]:
a = V.mv('a', 'scalar')
b = V.mv('b', 'scalar')
c = V.mv('c', 'scalar')
d = V.mv('d', 'scalar')
u = V.mv('u', 'vector')
v = V.mv('v', 'vector')
w = V.mv('w', 'vector')
In [5]:
def vector(ga, components):
bases = ga.mv()
return sum([components[i] * e for i, e in enumerate(bases)])
In [6]:
v + w == w + v
Out[6]:
In [7]:
(u + v) + w == u + (v + w)
Out[7]:
In [8]:
v + S(0) == v
Out[8]:
In [9]:
S(0) * v == S(0)
Out[9]:
In [10]:
S(1) * v == v
Out[10]:
In [11]:
a * (b * v) == (a * b) * v
Out[11]:
In [12]:
a * (v + w) == a * v + a * w
Out[12]:
In [13]:
(a + b) * v == a * v + b * v
Out[13]:
In [14]:
uu = vector(V, [1, 2, 3])
vv = vector(V, [4, 5, 6])
ww = vector(V, [5, 6, 7])
In [15]:
uu + vv
Out[15]:
In [16]:
7 * uu + 2 * ww
Out[16]:
In [17]:
7 * uu - 2 * ww
Out[17]:
In [18]:
3 * uu + 2 * vv + ww
Out[18]:
In [19]:
v + S(-1) * v
Out[19]:
In [20]:
v0 = vector(V, [0, 0, 0])
In [21]:
a * v0 == v0
Out[21]:
In [22]:
(-a) * v == a * (-v)
Out[22]:
In [23]:
(-a) * v == - a * v
Out[23]:
In [24]:
sqrt(2) * u + Rational(2, 3) * v
Out[24]:
In [25]:
MA = Matrix([[2, -1, 1], [0, -2, 5]])
MA
Out[25]:
In [26]:
MB = Matrix([[2, 3], [0, -1], [1, -3]])
MB
Out[26]:
In [27]:
MAB = MA * MB
MAB
Out[27]:
In [28]:
MAB_00 = MA[0, :] * MB[:, 0]
MAB_00
Out[28]:
In [29]:
MAB.inv()
Out[29]:
In [30]:
MAB.inv() * MAB.det()
Out[30]:
In [31]:
MAB.inv() * MAB
Out[31]:
In [32]:
a, b, c, d = symbols('a b c d')
M = Matrix([[a, b], [c, d]])
M
Out[32]:
In [33]:
M.det()
Out[33]:
In [34]:
M.inv()
Out[34]:
In [35]:
Mul(1 / M.det(), M.inv() * M.det())
Out[35]:
In [36]:
a, b, c, d, e, f, g, h = symbols('a b c d e f g h')
A = Matrix([[a, b], [c, d]])
B =Matrix([[e, f], [g, h]])
In [37]:
A*B
Out[37]:
In [38]:
(A * B).inv()
Out[38]:
In [39]:
B.inv() * A.inv()
Out[39]:
In [40]:
simplify((A * B).inv()) == simplify(B.inv() * A.inv())
Out[40]:
In [41]:
simplify((A * B).inv() - B.inv() * A.inv())
Out[41]:
In [42]:
A.inv().inv() == A
Out[42]:
In [43]:
simplify(A.inv().inv() - A)
Out[43]:
In [44]:
A = Matrix([
[1, -4],
[1, -1]
])
b = Matrix([3, -1])
In [45]:
A
Out[45]:
In [46]:
b
Out[46]:
In [47]:
A.LUsolve(b)
Out[47]:
In [48]:
v.project_in_blade(u)
Out[48]:
In [49]:
(u|v)/u**2*u
Out[49]:
In [50]:
v.project_in_blade(u) == (u|v)/u
Out[50]:
In [51]:
v.project_in_blade(w) + u.project_in_blade(w) == (u + v).project_in_blade(w)
Out[51]:
In [52]:
(a * u) | v == a * (u | v)
Out[52]:
In [53]:
(u + v) | w == (u | w) + (v | w)
Out[53]:
In [54]:
u | v == v | u
Out[54]:
In [55]:
v | v == v.norm2()
Out[55]:
In [56]:
(u + v).norm2() + (u - v).norm2() == 2 * u.norm2() + 2 * v.norm2()
Out[56]:
In [57]:
(u | v).norm() <= u.norm() * v.norm()
Out[57]:
In [58]:
simplify(u.norm() * v.norm() - (u | v).norm())
Out[58]:
In [59]:
def cosv(u, v):
return (u | v) / (u.norm() * v.norm())
In [60]:
cosv(u, v)
Out[60]:
In [67]:
VO4 = Ga('e', g=[1, 1, 1, 1], coords=symbols('v1,v2,v3,v4',real=True))
In [68]:
vo4 = vector(VO4, [1, 1, 1, 1])
In [69]:
vo4
Out[69]:
In [75]:
e_u1 = vector(VO4, [3, 0, 4, 0])
e_u2 = vector(VO4, [0, 3, 0, 4])
In [76]:
e_u1
Out[76]:
In [77]:
e_u2
Out[77]:
In [78]:
u1, u2 = symbols('u1,u2',real=True)
In [91]:
coord_fun = u1 * e_u1 + u2 * e_u2
coord_fun
Out[91]:
In [115]:
coord_map = [(coord_fun | e).obj for e in VO4.mv()]
coord_map
Out[115]:
In [116]:
UO2 = VO4.sm(coord_map, [u1, u2])
UO2
Out[116]:
In [122]:
UO2.u
Out[122]:
In [117]:
UO2.g
Out[117]:
In [127]:
UO2E = e_u1 ^ e_u2
UO2E
Out[127]:
In [124]:
vo4.reflect_in_blade(UO2E)
Out[124]:
In [ ]: