python - 计算和校正仪器中的时钟漂移
问题描述
我正在尝试实施我最近在 Math SE 上提出的这个问题的解决方案。我将在这里重新创建相关细节。
我有一个由以下形式的方程组成的系统:
这里, c
, a_ir
, 和向量p_r
是已知的。向量x0
和v
以及ti
's 是未知的。此外,T
和R
是已知的,但会有所不同(即不能硬编码)。
我最熟悉此类系统的符号操作和解决方案,以及SymPy
包,所以我从那里开始。不幸的是,事实证明,也许并不奇怪SymPy
的求解器并不适合这样的问题。由于所讨论的知识将来自真实世界的实验数据,因此可能只能以数值方式获得解决方案,并且SymPy
仅提供一个数值求解器 ,nsolve()
它很快就被阻塞了。
我想将我所做的转换SymPy
为与 兼容的东西SciPy
,它提供了更大的灵活性以及许多线性和非线性求解器。不幸的是,我对 不是很熟悉,我SciPy
也不清楚我在其中的非常具有象征意义的表达方式如何SymPy
翻译成SciPy
。
到目前为止,这是我所拥有的(诚然,这是一个相当粗糙的初稿):
T = 10; R = 3
x,y,z, vx,vy,vz = sp.symbols('x,y,z, vx,vy,vz', real=True)
collection = sp.symbols(" ".join(f"t{x}" for x in range(T)), real=True)
@dataclass
class Vertexer:
receivers: list
def find(self, data):
eqs = []
for r in range(R):
for i in range(T):
eqs.append(sp.Eq(c**2 * (data[r][i] - collection[i])**2, (vx**2 + vy**2 + vz**2) * (collection[i] - collection[0])**2 + 2 * (collection[i] - collection[0]) * (vx * (x - self.receivers[r][0]) + vy * (y - self.receivers[r][1]) + vz * (z - self.receivers[r][2])) + ((x - self.receivers[r][0])**2 + (y - self.receivers[r][1])**2 + (z - self.receivers[r][2])**2)))
print(sp.nsolve(eqs, (x,y,z,vx,vy,vz) + collection))
这里,data
是一个list
包含R
大小的列表T
,其中又包含air
'S. 最终,T
将由R
这个矩阵的大小决定,而不是像这里那样硬编码。receivers
是一个包含列表的列表,这些列表表示's(例如)R
的向量分量。pr
[[p1x, p1y, p1z], [p2x, ...
我不确定从哪里开始将其转换为SciPy
. 一方面,t_1, t_2,.... t_T
除了许多其他未知数(vx
、vy
、x
等)之外,我在这里“动态地”为未知数生成符号。我不确定如何用潜在的大量动态符号未知数来翻译这个符号表达式。
如果我可以简单地将表达式重写为与求解器兼容的东西,那么SciPy
继续求解它应该是相当微不足道的。
如何解决这个问题?
解决方案
推荐阅读
- python-3.x - Python pip install tesseract-ocr 失败
- serial-communication - 如何使用带有声学调制解调器的串行端口发送图像?
- c# - Unity 中的 XML 对话树无法正确解析信息
- loops - 如何在保持 tkinter 页面打开的同时创建一个 while true 循环?
- php - Laravel Eloquent 收集配对项目
- javascript - ReactJS [生产问题] - TypeError: (void 0) is not a function
- java - Android Firebase 显示当前登录的用户详细信息
- scala - 改进逻辑以在给定的 string1 上查找循环旋转可以产生 string2
- java - DynamoDBLocal 测试中的错误:com.almworks.sqlite4java.SQLiteException:[-91] 无法加载库:java.lang.UnsatisfiedLinkError
- python - InvalidBSON 消耗游标并引发 StopIteration。如何跳过坏文档?