用FOSS求解联立方程

时间:2014-03-01 13:52:51

标签: equation simultaneous equation-solving linear-equation parametric-equations

我有兴趣通过计算方式查找沿着给定的二维路径跟踪轨迹的点对是否会导致碰撞。

每个粒子沿其路径的速度将是一个平滑变化的时间函数。

每条路径都是平滑的,并且将是由以下部分或全部组成的序列:

  • 直线,
  • 圆弧,
  • Euler spirals。

每个粒子的轨迹(即它相对于时间t的位置)因此沿其路径的速度和路径来定义。

基本上,找出是否发生碰撞这相当于解决每对轨迹的联立方程:产生解的t的每个值都是碰撞。 (以下示例。)

我的问题:请建议一种FOSS(编程)语言或库,其语法允许以人性化的方式表达这些问题,并且还能够有效地解决这些问题。请根据以下示例使用您的建议提供最小的工作示例。

示例:

  • 2个颗粒,α和β
  • x α = t,y α = t,x β = t,y β = 1 - t

假设发生碰撞:

0 = x α - x β = t - t(所有t都为真)

0 = y α -y β = 2t-1 => t = 0.5

1 个答案:

答案 0 :(得分:0)

用于此类问题的最合适的软件包可能是computer algebra system (CAS),其中some examples are FOSS

要选择其中一个,我认为 Sage符合标准,而且似乎很受欢迎。这是一个MWE:

sage: var('x1 y1 x2 y2 t')
(x1, y1, x2, y2, t)
sage: eq1 = x1==t
sage: eq2 = y1==t
sage: eq3 = x2==t
sage: eq4 = y2==1-t
sage: solve([eq1,eq2,eq3,eq4,x1==x2,y1==y2],t,x1,x2,y1,y2)
[[t == (1/2), x1 == (1/2), x2 == (1/2), y1 == (1/2), y2 == (1/2)]]

感谢@hivert