繁体   English   中英

我在 Python 耦合 ODE 代码中做错了什么?

[英]What Have I Done Wrong In My Python Coupled ODE code?

我对我的代码的准确性有疑问。 我真的很新,并不真正理解为什么我的代码不起作用背后的原因,因为我遵循了关于如何求解耦合微分方程的教程。

代码如下:

from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt
def odes(t,s,v):
    B = 0.07173119
    g=-9.82
    m=1
    dsdt = v
    dvdt = float(g+(B*v-abs(v))/m)
    return [dsdt, dvdt]
x=np.array(100)
s=(0,2)
v=(0, 50)
x0 = [0, 0, 0]
t = np.linspace(0, 100)
x = odeint(t, s, v)
s=x[:,0]
v=x[:,1]
plt.semilogy(t, s)
plt.semilogy(t, v)
plt.show()

我通常会得到可以通过搜索来修复的错误,但我从来没有得到答案。

它应该看起来像:

GeoGebra

您的帮助将不胜感激! 谢谢!

# use the correct argument format
def odes(x,t):
    s,v = x
    B = 0.07173119
    g=-9.82
    m=1
    dsdt = v
    # use the correct formula for air resistance
    dvdt =  g+ B*v*(-abs(v))/m 
    return [dsdt, dvdt]
# initial conditions, one per component
s0=2 
v0=50
t = np.linspace(0, 10, 101)
x = odeint(odes, [s0, v0], t)
s=x[:,0]
v=x[:,1]
plt.plot(t, s)
plt.plot(t, v)
plt.show()

检查物理,力的方向与垂直变量的方向。 还要检查发生某事的时间尺度,自由落体模拟的 100 秒可能太大,1 秒的间隔不够精细。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM