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.

Reply via email to