scipy ode 将函数集内的 set_f_params 更新为 set_solout

2024-03-07

将 ode 与 scipy 集成时,ode 接受参数多于 t 和 y 的函数。例如:

def fun(t, y, param1, param2):

这些参数的值可以使用设置set_f_params method.

然而,当同时使用set_solout方法并尝试更新参数set_f_params在此函数内,积分保持不变,就像参数没有被修改一样。

如何使用 sol_out 修改参数?我想从 dopri5 密集输出中受益,但我需要在每个时间步更新非齐次项。

下面显示了一个最小的示例。

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

def fun(t, x, param):
    return x - param

def f_param(t):
    return t

ode1 = ode(fun).set_integrator('dopri5').set_initial_value([10.0])
ode1.set_f_params(f_param(0))
results1 = ([], [])

ode2 = ode(fun).set_integrator('dopri5').set_initial_value([10.0])
ode2.set_f_params(f_param(0))
results2 = ([], [])

def callback1(t, x):
    results1[0].append(t)
    results1[1].append(x.copy())

def callback2(t, x):
    results2[0].append(t)
    results2[1].append(x.copy())
    ode2.set_f_params(f_param(t))

ode1.set_solout(callback1)
ode2.set_solout(callback2)

ode1.integrate(3)
ode2.integrate(3)

plt.plot(results1[0], results1[1], 'o-', alpha=0.7, label='ode1')
plt.plot(results2[0], results2[1], '.--', label='ode2')
plt.legend()

结果如下所示:


这就是人们要做的新的 ODE 求解器 http://scipy.github.io/devdocs/generated/scipy.integrate.solve_ivp.html将在 SciPy 1.0 中发布:

from functools import partial

import numpy as np
from scipy.integrate import solve_ivp

import matplotlib.pyplot as plt


def fun_fixed(t, x, param):
    return x - param

sol_fixed = solve_ivp(
    partial(fun_fixed, param=0), (0, 3), [10.0], dense_output=True)

def fun_param(t, x, fun):
    return -x + fun(t)

def f_param(t):
    return t

sol_param = solve_ivp(
    partial(fun_param, fun=f_param), (0, 3), [10.0], dense_output=True)

t = np.linspace(0, 3, num=16)

plt.figure(figsize=(8, 5))
plt.plot(t, sol_fixed.sol(t)[0], 'o-', alpha=0.7, label='ode1')
plt.plot(t, sol_param.sol(t)[0], 's-.', label='ode3')
plt.legend()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scipy ode 将函数集内的 set_f_params 更新为 set_solout 的相关文章

随机推荐

  • 如何进行多对多 Django 查询来查找具有 2 个给定作者的书籍?

    我有一个查询 需要使用 ID 精确过滤 2 位作者 理论上 Book objects filter author id 1 author id 2 这是不可能的 我怎么解决这个问题 干杯 米奇 一开始并不直观 但答案就在我们面前 Book
  • knex.js 查询“承诺”何时执行/解析?

    对于正常的承诺 一旦当前代码停止 承诺就会尽快解决 考虑以下伪代码 const p SomePromiseDoingLoad calculatethings await sleepPromise during sleep the promi
  • VB:游戏之上的应用

    我想编写一个应用程序 在全屏游戏上绘制某个视觉对象 例如半透明三角形 该游戏具有 强置顶 属性 因为它涵盖了所有其他分类为 置顶 的应用程序 我需要我的应用程序是最上面的应用程序 并且始终处于焦点 而不影响后面游戏的顺利运行 如何才能有效地
  • 查找 Maven Google App Engine 项目的原型

    我正在使用 Eclipse 和 m2eclipse 插件为 Google App Engine 创建一个新的 Java 项目 创建新的 Maven 项目时 Eclipse 找不到原型 com google appengine archety
  • 由 javascript 更新的 asp.net mvc 禁用文本框不会发布新值

    我正在使用强类型模型来表达我的观点 我有一个禁用的文本框 我使用 javascript 更新其值 文本框是使用这个渲染的 这将呈现一个文本框 其中 NAME 和 ID 为 TotalAmount TotalAmount 也是我的模型上绑定到
  • cx_Freeze 后 Paramiko 无法正常工作?

    所以我编写了这段代码 我使用 Paramiko 通过 SSH 连接到计算机 脚本正常工作 但是当我使用 cx Freeze 将其转换为 exe 时 程序在 self ssh load system host keys 处停止工作 所以我从脚
  • 将表示列表的字符串转换为实际的列表对象[重复]

    这个问题在这里已经有答案了 我有一个代表列表的字符串 22 33 36 41 46 49 56 72 85 92 95 98 107 118 120 123 124 126 127 130 149 157 161 171 174 177 1
  • flutter中的webview是否缓存网页?

    我想缓存在 flutter webview 中显示的网页 以便提高性能 无需重新加载页面 可以用吗 我可以实施吗 flutter inappwebview 前 flutter inappbrowser 有参数cacheEnabled默认为
  • 如何从 Google Places API 获取地点描述

    我正在尝试使用 Google 地点 API 来获取某些地点的信息 我有一个 来自谷歌搜索的示例 这是我试图找到的 我认为 Places API 文本搜索的 类型 字段将包含它 但该文本似乎不同 并且不在提供的选项列表中 如果有人可以提供一些
  • .Net 中的 Oracle 连接池

    我们有一个使用 Oracle 数据库的系统 有人问我系统是否使用连接池 但我不确定 我们正在使用Oracle DataAccess Client OracleConnection 在阅读该主题时 我发现连接字符串中的连接池设置为 true
  • 在vagrant box上创建虚拟主机

    我正在尝试设置一个基于 Chef 提供的 vagrant 的开发环境 我使用 Apache 使用 Chef 创建了一个环境 并且可以通过端口转发从我的主机访问 Web 服务器 我想让我的流浪盒包含多个虚拟主机 并且通过共享文件夹 我将定义不
  • spring-boot oauth2 拆分授权服务器和资源服务器

    我试图在 spring boot 中将资源服务器与授权服务器分开 我有两个单独运行的不同应用程序 在授权服务器中 我可以从 oauth token 获取不记名令牌 但是当我尝试访问资源 在标头中发送令牌 时 我收到无效令牌错误 我的目的是使
  • AZURE Active Directory - 服务主体和企业应用程序之间有什么区别?

    我经常对 Azure AD 中的三个主题感到困惑 服务负责人 企业应用 应用程序注册 有什么不同 我可以轻松进入 应用程序注册 并注册一个 应用程序 而该 应用程序 甚至不需要存在 它所需要的只是一个 URL 也可以是完全随机的 然后 此应
  • 如何对命令行参数进行单元测试?

    我正在尝试向 Python 提供命令行参数unittest并面临一些问题 我在互联网上搜索并找到了一种提供参数的方法 unittest main argv myArg 问题是这对于单个命令行参数工作正常 但对于多个参数则失败 unittes
  • 为 Heroku 静态编译 pdftk。需要将PDF分割成单页文件

    所以我们使用 heroku 来托管我们的 Rails 应用程序 我们已经搬到雪松堆了 该堆栈没有安装 pdftk 库 我联系了支持人员 并被告知为 amd64 ubuntu 静态编译它并将其包含在我的应用程序中 事实证明这比我想象的要困难
  • 工厂方法更适合框架,抽象工厂更适合库吗?

    抽象工厂和工厂方法模式都是创建型设计模式 解决了不同场景下的对象创建问题 根据 GOF工厂方法 pattern 定义一个用于创建对象的接口 但让子类决定实例化哪个类 工厂方法让类将实例化推迟到子类 我的理解 动机Client是获取执行的工厂
  • 将 Excel 导入到 DataTable 字符串为空

    要将 Excel 导入数据表 我使用简单的代码 string connectionString string Format Provider Microsoft ACE OLEDB 12 0 data source 0 Extended P
  • React:更新列表中的一项而不重新创建所有项目

    假设我有一个包含 1000 个项目的列表 我用 React 渲染它 如下所示 class Parent extends React Component render this state list is a list of 1000 ite
  • 将参数传递到 os.system

    我需要通过 python 执行以下命令 rtl2gds 是一个读取 2 个参数的工具 文件路径和模块名称 rtl2gds rtl home users name file v rtl top module name syn 我正在通过 ar
  • scipy ode 将函数集内的 set_f_params 更新为 set_solout

    将 ode 与 scipy 集成时 ode 接受参数多于 t 和 y 的函数 例如 def fun t y param1 param2 这些参数的值可以使用设置set f params method 然而 当同时使用set solout方法