python - 如何编辑我的 4 阶 Runge Kutta 代码来评估 2 阶 ODE?
问题描述
蟒蛇问题:
我有以下 RK-4 代码来评估我的一阶 ode,但我想对其进行编辑,以便它可以将以下二阶 ode 评估为一阶 ODE 的系统:(d^2y/dt^2) +4 (dy/dt)+2y=0。我想保持 h(步长相同),初始条件为 y(0)=1 和 y'(0)=3。
我对python很陌生,所以我很难做到这一点。预先感谢您的任何帮助!
import matplotlib.pyplot as plt
def dydx(x, y):
return ((x - y)/2)
def rungeKutta(x0, y0, x, h):
n = (int)((x - x0)/h)
y = y0
for i in range(1, n + 1):
k1 = h * dydx(x0, y)
k2 = h * dydx(x0 + 0.5 * h, y + 0.5 * k1)
k3 = h * dydx(x0 + 0.5 * h, y + 0.5 * k2)
k4 = h * dydx(x0 + h, y + k3)
y = y + (1.0 / 6.0)*(k1 + 2 * k2 + 2 * k3 + k4)
x0 = x0 + h
return y
x0 = 0
y = 1
x = 2
h = 0.2
print ('The value of y at x is:', rungeKutta(x0, y, x, h))
解决方案
唯一需要的改变是使状态成为一个向量对象。在 python 中,这通常是一个 numpy 数组。所以
y0 = np.array([1,3],dtype=float)
def dydx(x, y):
return np.array([y[1], -4*y[1]-2*y[0]])
其他一切都应该自动使用适当的向量操作。
推荐阅读
- python - AttributeError: 'NoneType' 对象在通过 Python 使用 Selenium 使用无头 Chrome 截屏时没有属性 'encode' 错误
- java - 在另一个助焊剂结束后执行平行助焊剂
- python - 如何打开 Python 3.8 IDLE?
- python - 为什么我的 csv 文件用“\t”而不是逗号(“,”)分隔?
- machine-learning - 字符串索引器,CountVectorizer Pyspark 单行
- node.js - sudo npm install -g cordova ionic - 不工作,因为 EEXIST
- c# - User.Identity.GetUserId() 在 .net Core 中总是返回 null
- azure - 部署到 Azure 应用服务时站点不显示
- python - 弹跳球游戏 tkinter 帆布
- python-3.x - 是否可以在 Python3 中使变量成为对类属性的引用?