求解一阶odes的python包

PyODESolver的Python项目详细描述


pyodesolver

解odes的python包

安装

要安装pyodesolver,请执行:

python3 -m pip install PyODESolver

这将使包pyodesolver可用于导入。 本次发布python3

python3

并导入新包pyodesolver

import pyodesolver

快速入门指南:

要开始使用pyodesolver,请包含一个解算器方法。 在本例中,我们将使用显式Euler方法来求解 微分方程y’(t)=-2*y(t),y(0)=pi。这个 微分方程有精确解

y(t) = pi * exp(-2 * t).

表达式的右侧

y'(t) = -2*y(t),
y(0) = pi

称为RhsFunction。这个例子已经在 文件rhs_function.py中的示例func01。 为了使用显式的欧拉解算器,我们首先导入 所需文件

from method_explicit_euler import ExplicitEuler
from rhs_function import ExampleFunc01
import numpy as np

我们不能在主函数中构造方法对象 并对其调用generate以获取解算器对象。

if __name__ == "__main__":
    N = 10**3
    t = np.linspace(0, 1, num=N)
    y0 = np.pi
    ee_solver = ExplicitEuler(N, y0, [0, 1], ExampleFunc01())
    solution = ee_solver.generate()

生成器对象在本例中非常有用,因为它非常 依靠所需的内存并完全控制 它的用户可以根据需要生成新的时间步。例如 一个线程可以用于更新绘图,另一个线程可以 调用next(解决方案)以匹配绘图的帧速率。

要提取整个解决方案,我们可以使用:

numericSol = []
for (time, val) in solution:
    numericSol.append(val)

要在本例中绘制解决方案,我们可以使用

import matplotlib.pyplot as plt
plt.plot(t, np.array(numericSol))
plt.show()

求解任意节点

要解决定制的ode,只需要两个组件 新的RhsFunction和该函数的Jacobian。在案例中 如果jacobian是未知的,显式方法仍将起作用。

要实现新的rhsfunction,用户可以从rhsfunction继承 并定义一个新的子类

class NewFunction(RHSFunction):
...

rhsfunction公开了三个引发notimplementederrors的方法。 然后,用户可以通过提供

def eval(self, y_vec, time):
    ...

以及

def jacobian(self, y_vec, time):
    ...

提供显式和隐式方法所需的一切。 可以按照快速入门指南中的说明获得解决方案。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Docker&SeleniumJava:无法在Docker容器上运行的chrome浏览器中上载图像/文件   在python中运行java命令   Java垃圾收集器异常行为   java java是否根据底层操作系统执行字节码级优化?   java是否可以休眠自定义查询返回映射而不是列表?   java Spring引导RabbitMQ接收器Jackson反序列化到POJO   apache flex在ActionScript3中创建对象相等“HashMap”作为java HashMap   java如何在Eclipse集成中切换JProfiler启动器   缓存JSP页面结果的java最佳实践?   java集成jaxb绑定文件,使用CXF生成基于WSDL的客户端   java为什么在上传操作结束之前,客户端没有检测到HttpServletResponse的PrintWriter内容?   java在接口内创建类和在类内创建接口有什么用   java向文件写入错误Android Studio   java合并多个RealmList并对结果列表排序?   谷歌API视觉java。lang.NoSuchMethodError   java如何使用逗号分别存储每个值,然后将它们存储到单独的数组中?