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.

Reply via email to