【发布时间】:2015-10-07 16:48:16
【问题描述】:
这是一个更数学的问题。
我们有 3 个身体系统,具有已知的初始参数,如位置、质量、速度。这使得系统像
i 和 j = 1,2,3
所以问题是如何处理这个问题,将该系统提供给 scipy odeint ?
更新
我写了代码
from scipy import linspace
from scipy.integrate import odeint
def rf(i, j, r):
x1, y1, z1 = r[0]
x2, y2, z2 = r[1]
x3, y3, z3 = r[2]
r12 = ((x1-x2)**2+(y1-y2)**2+(z1-z2)**2)**2
r13 = ((x1-x3)**2+(y1-y3)**2+(z1-z3)**2)**2
r23 = ((x2-x3)**2+(y2-y3)**2+(z2-z3)**2)**2
if i == 1:
if j == 2:
r = r12
elif j == 3:
r = r13
if i == 2:
if j == 1:
r = r12
elif j == 3:
r = r23
if i == 3:
if j == 1:
r = r13
elif j == 2:
r = r23
return r
def dotf(r, t0):
x1, y1, z1 = r[0]
x2, y2, z2 = r[1]
x3, y3, z3 = r[2]
x = [x1, x2, x3]
y = [y1, y2, y3]
z = [z1, z2, z3]
k2 = 6.67e-11
m = [2e6, 2.2e7, 0.1e3]
for i in range(1, 3, 1):
xs, ys, zs = 0, 0, 0
for j in range(1, 3, 1):
if i != j:
r = rf(i, j, r)
xs = xs + m[j]*(x[i]-x[j])/r
ys = ys + m[j]*(y[i]-y[j])/r
zs = zs + m[j]*(z[i]-z[j])/r
x[i] = -1 * k2 * xs
y[i] = -1 * k2 * ys
z[i] = -1 * k2 * zs
return [[x1,y1,z1], [x2,y2,z2], [x3,y3,z3]]
t = linspace(0, 50, 1e4)
r1 = [1, 2, 1]
r2 = [0.5, 0.1, 3]
r3 = [0.6, 1, 1.5]
r = [r1, r2, r3]
u = odeint(dotf, r, t)
并得到输出错误:
Traceback (most recent call last):
File "3b.py", line 73, in <module>
u = odeint(dotf, r, t)
File "/usr/local/lib/python2.7/dist-packages/scipy/integrate/odepack.py", line 148, in odeint
ixpr, mxstep, mxhnil, mxordn, mxords)
ValueError: object too deep for desired array
【问题讨论】:
-
您是否尝试过编写此代码?你能为此显示一些代码吗?
-
StackOverflow 不是代码编写服务。请参考stackoverflow.com/help/how-to-ask和stackoverflow.com/help/mcve。
-
我写了代码但出错了,不知道我是否正确,因为我没有一些例子来确认计算是好的