A SymPy Vector is constructed algebraically from the unit vectors i, j and k of the coordinate system. For a vector field you also use the coordinate system base scalars x, y and z.
In [11]: from sympy.vector import CoordSys3D, dot In [12]: O = CoordSys3D('O') In [13]: r = O.x*O.i + O.y*O.j + O.z*O.k In [14]: r Out[14]: (x_O) i_O + (y_O) j_O + (z_O) k_O In [15]: dot(r, r) Out[15]: 2 2 2 x_O + y_O + z_O I often see confusion about this so clearly this is not very intuitive and maybe it is not very clearly documented: https://docs.sympy.org/latest/modules/vector/index.html I think there should be an easier way where you can just use a "standard" coordinate system and just do: from sympy.vector.stdcoords import x, y, z, i, j, k r = x*i + y*j + z*k print(dot(r, r)) The vector docs should just begin by showing how to do that and then how to do simple calculations in a single coordinate system. -- Oscar On Sat, 23 Oct 2021 at 07:11, Andreas Schuldei <andr...@schuldei.org> wrote: > > 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. > > -- > 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. -- 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/CAHVvXxQSRdL05zsv%3D_0szOcp7VGP0aaWOx8xhv-pGBNe8mA%3Dcg%40mail.gmail.com.