标量和向量场功能#
介绍#
向量和标量#
在物理学中,我们处理两种量-标量和向量。
标量是一种只有量值而没有方向的实体。标量的例子包括质量、电荷、温度、距离等。
另一方面,向量是一个以大小和方向为特征的实体。矢量量的例子有位移、速度、磁场等。
标量可以用一个数字来描述,例如300 K的温度。另一方面,像加速度这样的矢量量通常用矢量表示。给定一个向量 \(\mathbf{{V}}\) ,相应量的大小可以计算为向量本身的大小 \(\Vert \mathbf{{V}} \Vert\) ,而方向将由原始向量方向上的单位向量指定, \(\mathbf{{\hat{{V}}}} = \frac{{\mathbf{{V}}}}{{\Vert \mathbf{{V}} \Vert}}\) .
例如,考虑 \((3\mathbf{{\hat{{i}}}} + 4\mathbf{{\hat{{j}}}} + 5\mathbf{{\hat{{k}}}})\) m、 其中,根据标准惯例, \(\mathbf{{\hat{{i}}}}\) , \(\mathbf{{\hat{{j}}}}\) 和 \(\mathbf{{\hat{{k}}}}\) 表示单位向量 \(\mathbf{{X}}\) , \(\mathbf{{Y}}\) 和 \(\mathbf{{Z}}\) 方向。因此,可以得出的结论是 \(\Vert 3\mathbf{{\hat{{i}}}} + 4\mathbf{{\hat{{j}}}} + 5\mathbf{{\hat{{k}}}} \Vert\) 米= \(5\sqrt{{2}}\) m、 移动方向由单位矢量给出 \(\frac{{3}}{{5\sqrt{{2}}}}\mathbf{{\hat{{i}}}} + \frac{{4}}{{5\sqrt{{2}}}}\mathbf{{\hat{{j}}}} + \frac{{5}}{{5\sqrt{{2}}}}\mathbf{{\hat{{k}}}}\) .
领域#
一般来说,a \(field\) 在一个普通的空间中,也可以把一个标量或其他变量的位置指定为自变量。在这个模块中,我们只处理三维空间。因此,字段被定义为 \(x\) , \(y\) 和 \(z\) 对应于三维空间中某个位置的坐标。
例如,三维空间中的温带(温度场)可以写成 \(T(x, y, z)\) –位置的标量函数。电磁学中标量场的一个例子就是电势。
以类似的方式,向量场可以定义为位置的向量函数 \((x, y, z)\) 空间中任何一点。
例如,地球上的每一点都可以被认为是在地球引力场中。我们可以通过重力加速度的大小和方向来确定磁场(即每单位质量的力) \(g(x, y, z)\) 在空间的每一点。
以电磁学为例,考虑 \(2{{x}}^{{2}}y\) ,三维空间中的标量字段。相应的保守电场可以计算为电势函数的梯度,并表示为 \(4xy\mathbf{{\hat{{i}}}} + 2{{x}}^{{2}}\mathbf{{\hat{{j}}}}\) . 这个电场的大小又可以用标量场的形式来表示 \(\sqrt{{4{{x}}^{{4}} + 16{{x}}^{{2}}{{y}}^{{2}}}}\) .
字段的实现sympy.物理.矢量#
在 sympy.physics.vector
,每一个 ReferenceFrame
实例的基向量与 \(X\) , \(Y\) 和 \(Z\) 方向。可以使用名为 x
, y
和 z
分别。因此,定义向量 \(\mathbf{{v}}\) 形式的 \(3\mathbf{{\hat{{i}}}} + 4\mathbf{{\hat{{j}}}} + 5\mathbf{{\hat{{k}}}}\) 相对于给定帧 \(\mathbf{{R}}\) ,你会的
>>> from sympy.physics.vector import ReferenceFrame
>>> R = ReferenceFrame('R')
>>> v = 3*R.x + 4*R.y + 5*R.z
关于向量的向量数学和基本微积分运算已经在本模块文档的其他部分进行了阐述。
另一方面,在特殊的坐标系上实现了标量 Symbol
s指定给每个帧,每个方向一个 \(X\) , \(Y\) 和 \(Z\) . 为了一个框架 R
, the \(X\) , \(Y\) 和 \(Z\) 基标量 Symbol
可以使用 R[0]
, R[1]
和 R[2]
表达式。
因此,生成上述电势场的表达式 \(2{{x}}^{{2}}y\) ,你必须这样做
>>> from sympy.physics.vector import ReferenceFrame
>>> R = ReferenceFrame('R')
>>> electric_potential = 2*R[0]**2*R[1]
>>> electric_potential
2*R_x**2*R_y
在字符串表示中, R_x
表示 \(X\) 分配给的基标量 ReferenceFrame
R
. 基本上, R_x
的字符串表示形式 R[0]
.
对于任何数学/微积分功能,标量字段可以像任何其他SymPy表达式一样处理。因此,为了区分上述电势 \(x\) (即 R[0]
),则必须使用 diff
功能。
>>> from sympy.physics.vector import ReferenceFrame
>>> R = ReferenceFrame('R')
>>> electric_potential = 2*R[0]**2*R[1]
>>> from sympy import diff
>>> diff(electric_potential, R[0])
4*R_x*R_y
与向量(和向量场)一样,标量场也可以在其他参考坐标系中重新表达,除了定义它们的参照系之外——假设相关坐标系之间存在方向关系。可以使用 sympy.physics.vector.vector.Vector.express
方法,方法类似于向量-但是使用 variables
参数设置为 True
.
>>> from sympy.physics.vector import ReferenceFrame
>>> R = ReferenceFrame('R')
>>> electric_potential = 2*R[0]**2*R[1]
>>> from sympy.physics.vector import dynamicsymbols, express
>>> q = dynamicsymbols('q')
>>> R1 = R.orientnew('R1', rot_type = 'Axis', amounts = [q, R.z])
>>> express(electric_potential, R1, variables=True)
2*(R1_x*sin(q(t)) + R1_y*cos(q(t)))*(R1_x*cos(q(t)) - R1_y*sin(q(t)))**2
此外,考虑标量也可以是时间的函数,就像向量一样,关于时间的微分也是可能的。取决于 Symbol
在表达式和进行时间微分的帧中,输出将改变/保持不变。
>>> from sympy.physics.vector import ReferenceFrame
>>> R = ReferenceFrame('R')
>>> electric_potential = 2*R[0]**2*R[1]
>>> q = dynamicsymbols('q')
>>> R1 = R.orientnew('R1', rot_type = 'Axis', amounts = [q, R.z])
>>> from sympy.physics.vector import time_derivative
>>> time_derivative(electric_potential, R)
0
>>> time_derivative(electric_potential, R1).simplify()
2*(R1_x*cos(q(t)) - R1_y*sin(q(t)))*(3*R1_x**2*cos(2*q(t))/2 -
R1_x**2/2 - 3*R1_x*R1_y*sin(2*q(t)) - 3*R1_y**2*cos(2*q(t))/2 -
R1_y**2/2)*Derivative(q(t), t)