Not sure if the following might be of any help, but it allows for work in 4
coordinate systems: https://github.com/DocNan/SymFields
/c
On Tuesday, October 26, 2021 at 12:40:32 AM UTC-5 Chris Smith wrote:
> You might have copied `a**2 + b**2 + c**2` and called them `p`? You can
> check by typing `type(p)`. If it is an Add then that is what happened
> somehow. It's always best to show the actual self-verifying code snippet.
> Here is what I used and everything work for me:
> ```
> >>> from sympy.vector import dot
> >>> from sympy.vector.coordsysrect import CoordSys3D
> >>> O = CoordSys3D('O')
> >>> r = O.x*O.i + O.y*O.j + O.z*O.k
> >>> dot(r,r) # this works
> O.x**2 + O.y**2 + O.z**2
> >>> from sympy import symbols
> >>> a, b, c = symbols("a, b, c")
> >>> p = a*O.i +b*O.j + c*O.k
> >>> dot(p,p) # this does not work
> a**2 + b**2 + c**2
> >>> p.dot(p)
> a**2 + b**2 + c**2
> ```
> /c
> On Monday, October 25, 2021 at 10:17:09 AM UTC-5 Andreas Schuldei wrote:
>
>> p.dot(p)
>> a**2 + b**2 + c**2
>> dot(p,p)
>> Traceback (most recent call last):
>> File "<input>", line 1, in <module>
>> File "C:\Users\Andreas
>> Schuldei\PycharmProjects\lissajous-achse\venv\lib\site-packages\sympy\physics\vector\functions.py",
>>
>> line 31, in dot
>> raise TypeError('Dot product is between two vectors')
>> TypeError: Dot product is between two vectors
>>
>>
>> i am confused. why does this happen?
>>
>> Oscar schrieb am Montag, 25. Oktober 2021 um 12:35:47 UTC+2:
>>
>>> I don't see the exception that you showed:
>>>
>>> In [9]: O = CoordSys3D('O')
>>> ...: r = O.x*O.i + O.y*O.j + O.z*O.k
>>> ...: dot(r,r) # this works
>>> ...: O.x**2 + O.y**2 + O.z**2
>>> ...: from sympy import symbols
>>> ...: a, b, c = symbols("a, b, c")
>>> ...: p = a*O.i +b*O.j + c*O.k
>>> ...: p
>>> ...: a*O.i + b*O.j + c*O.k
>>> ...: dot(p,p) # this does not work
>>> Out[9]:
>>> 2 2 2
>>> a + b + c
>>>
>>> --
>>> Oscar
>>>
>>> On Mon, 25 Oct 2021 at 11:28, Andreas Schuldei <[email protected]>
>>> wrote:
>>> >
>>> >
>>> > I am trying to figure out the basics here.
>>> > I understand O.x, O.y and O.z have special meaning, first because they
>>> magically appear, just by instanciating O, and also because they seem to
>>> distinguish themselves from other generic symbols/skalars:
>>> >
>>> > O = CoordSys3D('O')
>>> > r = O.x*O.i + O.y*O.j + O.z*O.k
>>> > dot(r,r) # this works
>>> > O.x**2 + O.y**2 + O.z**2
>>> > from sympy import symbols
>>> > a, b, c = symbols("a, b, c")
>>> > p = a*O.i +b*O.j + c*O.k
>>> > p
>>> > a*O.i + b*O.j + c*O.k
>>> > dot(p,p) # this does not work
>>> > Traceback (most recent call last):
>>> > File "<input>", line 1, in <module>
>>> > File "C:\Users\Andreas
>>> Schuldei\PycharmProjects\lissajous-achse\venv\lib\site-packages\sympy\physics\vector\functions.py",
>>>
>>> line 31, in dot
>>> > raise TypeError('Dot product is between two vectors')
>>> > TypeError: Dot product is between two vectors
>>> > p = a*O.x*O.i + b*O.y*O.j + c*O.z*O.k
>>> > dot(p,p) # this does not work, either!
>>> > Traceback (most recent call last):
>>> > File "<input>", line 1, in <module>
>>> > File "C:\Users\Andreas
>>> Schuldei\PycharmProjects\lissajous-achse\venv\lib\site-packages\sympy\physics\vector\functions.py",
>>>
>>> line 31, in dot
>>> > raise TypeError('Dot product is between two vectors')
>>> > TypeError: Dot product is between two vectors
>>> >
>>> > Why is this? What factors are allowed with vector components and unit
>>> vectors?
>>> >
>>> > I feel a little restricted if my only vector component variables
>>> allowed are O.x, O.y, and O.z.
>>> > Oscar schrieb am Samstag, 23. Oktober 2021 um 16:49:10 UTC+2:
>>> >>
>>> >> 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 <[email protected]>
>>> 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 [email protected].
>>> >> >> 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 [email protected].
>>> >> > 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 [email protected].
>>> > To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/sympy/49cefd33-34db-4c97-9010-cc9be4f1f131n%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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sympy/a37dfe7b-0d93-4631-864e-a57ccf41ee41n%40googlegroups.com.