【问题标题】:Python solving 2nd order ODE with quad functionPython用四元函数求解二阶ODE
【发布时间】:2014-11-06 01:16:23
【问题描述】:

我正在研究二阶 ODE 的阻尼驱动摆的动力学,定义为 so,具体来说我正在编程:

d^2y/dt^2 + c * dy/dt + sin(y) = a * cos(wt)

import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate


def pendeq(t,y,a,c,w):
    y0 = -c*y[1] - np.sin(y[0]) + a*np.cos(w*t)
    y1 = y[1]
    z = np.array([y0, y1])
    return z

a = 2.1
c = 1e-4
w = 0.666667     # driving angular frequency

t = np.array([0, 5000])   # interval of integration
y = np.array([0, 0])      # initial conditions

yp = integrate.quad(pendeq, t[0], t[1], args=(y,a,c,w))

这个问题看起来与Need help solving a second order non-linear ODE in python 非常相似,但我得到了错误

Supplied function does not return a valid float.

我做错了什么??

【问题讨论】:

  • 看起来您正在求解作为多个参数函数的钟摆位置,对吗?
  • 是的,没错。
  • quad 集成了一个标量函数。它不求解常微分方程。再次查看您链接到的示例——scipy.integrate.odeint(不是quad)用于生成解决方案。另见wiki.scipy.org/Cookbook/CoupledSpringMassSystem

标签: python numpy scipy integrate


【解决方案1】:

integrate.quad 要求提供的函数(pendeq,在您的情况下)只返回一个浮点数。您的函数正在返回一个数组。

【讨论】:

  • 我已经回答了“我做错了什么?”的部分问题,但我仍在努力弄清楚如何做对。如果我能弄清楚,我会编辑我的答案。在这一点上,它更像是一个物理问题而不是编程问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 2020-02-04
  • 2015-12-01
  • 2019-02-19
相关资源
最近更新 更多