I am putting together the components of a vector field (a magnetic field, caused by a current in several conductors) in cartesian coordinates. The field is derived from calculating the rotation of its magnetic vector potential, which can be expressed as
A_z = -Const * dot(r,a)(dot(r,r) A =(0,0,A_z and then the rot(A): B = curl(A) gives me (after some simplifications) u = (2 * C * r2 * (a1 * r1 + a2 * r2)) / np.square(r1*r1 + r2*r2) - (C * a2) / (r1*r1 + r2*r2) v = (C * a1) / (r1*r1 + r2*r2) - (2 * C * r1 * (a1 * r1 + a2 * r2)) / np.square(r1*r1 + r2*r2) w = 0 with B(u,v,w) being the vector field I am interested in. My initial question ("How to create a vector") is mostly a sympy syntactical one. I look for a function like Sys = CoordSys3D("Sys") O = Sys.origin u = (2 * C * r2 * (a1 * r1 + a2 * r2)) / np.square(r1*r1 + r2*r2) - (C * a2) / (r1*r1 + r2*r2) v = (C * a1) / (r1*r1 + r2*r2) - (2 * C * r1 * (a1 * r1 + a2 * r2)) / np.square(r1*r1 + r2*r2) w = 0 V = O.vector(u,v,w) ^^^^^^^^^^^^^^^^^^^ where I can specify a vector, relative to a coordinate system, by its components. The O.vector() function would return a vector that can then safely be transformed into other (resting) coordinate systems. brombo schrieb am Freitag, 22. Oktober 2021 um 19:06:03 UTC+2: > You might want to look at this link - > > https://galgebra.readthedocs.io/en/latest/ > > Also if you could show me symbolically (not code) what you are doing > perhaps I could give you an example of how to do it in galgebra. > On 10/22/21 3:15 AM, Andreas Schuldei wrote: > > I saw this > https://stackoverflow.com/questions/46993819/how-to-create-a-vector-function-in-sympy > > which uses Matrix() as a workaround to create a vector. The author says, > that it can not be transformed between coordinate systems, like real > vectors, though. > > I need to transform my input and output vector from one coordinate system > to another (and back). How are vector functions done in that case? My > function is simple: > > def B_el(r_vec, I): > mu_0 = 4 * np.pi * 1e-7 > a1 = -0.05 > a2 = 0.0 > C = mu_0 * I / np.pi > r1 = r_vec.i > r2 = r_vec.j > u = (2 * C * r2 * (a1 * r1 + a2 * r2)) / np.square(r1*r1 + r2*r2) - (C * > a2) / (r1*r1 + r2*r2) > v = (C * a1) / (r1*r1 + r2*r2) - (2 * C * r1 * (a1 * r1 + a2 * r2)) / > np.square(r1*r1 + r2*r2) > return Matrix([u, v, 0]) > > -- > 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+un...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/8db840a8-20f9-47ac-a1c3-11b6658f00bfn%40googlegroups.com > > <https://groups.google.com/d/msgid/sympy/8db840a8-20f9-47ac-a1c3-11b6658f00bfn%40googlegroups.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 sympy+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/9797a914-06a6-4f8e-a99f-5403504862bfn%40googlegroups.com.