【问题标题】:Using RK4 to solve integrals使用 RK4 求解积分
【发布时间】:2020-03-29 12:45:10
【问题描述】:

问题要求我们使用 Rk4 方法 ∫sinh(????)(????−5)????????05 在 python 中求解这个积分。执行此操作的最佳方法是什么,您如何将其更改为 ODE?

def RK4(f, dx, x0, y0, imax):
    output = np.empty((imax, 3))
    i = 0
    xi = x0
    yi = y0
    while(i < imax):
        k1 = dx*f(xi,yi)
        k2 = dx*f(xi + 0.5*dx, yi + 0.5*k1)
        k3 = dx*f(xi + 0.5*dx, yi + 0.5*k2)
        k4 = dx*f(xi + dx, yi + k3)

        yi = yi + 1/6*(k1 + 2*k2 + 2*k3 + k4)
        xi += dx
        output[i, 0] = xi
        output[i, 1] = yi[0]
        output[i, 2] = yi[1]
        i += 1
    return output

RK4(0,0,5,100,10)

我收到一个关于 k1 的错误(“int object is not callable”)??我该如何解决这个问题,或者问题可能在我的代码中的其他地方。谢谢你的帮助。该问题还明确要求我们使用辛普森规则和 RK4 方法求解积分

【问题讨论】:

  • 这里使用 RK4 与使用 Simpson 求积法则相同。 Kutta 明确地将 RK4 构建为 Simpson 规则对 ODE 集成的扩展。
  • 在您的代码中,f = 0,您不能将其作为函数调用f(...)。如果你被卡住了,就从网上的例子学习,比如rosettacode.org/wiki/Runge-Kutta_method#Python

标签: python runge-kutta


【解决方案1】:

您正在传递一个整数 0 来代替函数。然后在k1 行中,您尝试使用该整数作为函数,这会给出报告的错误,因为没有对0(0,5) 的合理解释。你可以使用

RK4(lambda x,y:0,0,5,100,10)

但是,如果步长为零,则不会发生积分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2021-01-01
    • 2018-01-12
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    相关资源
    最近更新 更多