如何根据Python中数据集的最佳拟合确定微分方程的未知参数?

2023-11-30

我正在尝试使用 python 将不同的微分方程拟合到给定的数据集。因此,我分别使用 scipy 包和solve_ivp 函数。 只要我对微分方程中包含的参数(b = 0.005)有一个粗略的估计,这对我来说就很好,例如:

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


def f(x, y, b):
    dydx= [-b[0] * y[0]]
    return dydx

xspan= np.linspace(1, 500, 25)
yinit= [5]
b= [0.005]


sol= solve_ivp(lambda x, y: f(x, y, b),
               [xspan[0], xspan[-1]], yinit, t_eval= xspan)

print(sol)
print("\n")

print(sol.t)
print(sol.y)

plt.plot(sol.t, sol.y[0], "b--")

然而,我想要实现的是,参数 b (或更多参数)是根据已求解的微分方程与给定数据集(x 和 y)的最佳拟合“自动”确定的。有没有办法可以做到这一点,例如将此示例与 scipy 的 curve_fit 函数结合起来,这会是什么样子?

先感谢您!


是的,你想到的应该可行,应该很容易插在一起。你想打电话

popt, pcov = scipy.optimize.curve_fit(curve, xdata, ydata, p0=[b0])
b = popt[0]

现在你必须定义一个函数curve(x,*p)根据唯一参数将任何点列表转换为值列表b.

def curve(x,b):
    res = solve_ivp(odefun, [1,500], [5], t_eval=x, args = [b])
    return res.y[0]

根据需要添加容错的可选参数。


为了使这一点更加现实,请将初始点也设置为参数。然后,哪里需要列表以及哪里需要单个参数也变得更加明显。为了获得正确的拟合任务,请向测试数据添加一些随机噪声。还要让归零的速度不要那么快,这样最终的剧情看起来还是有些有趣的。

from scipy.integrate import solve_ivp
from scipy.optimize import curve_fit

xmin,xmax = 1,500

def f(t, y, b):
    dydt= -b * y
    return dydt

def curve(t, b, y0):
    sol= solve_ivp(lambda t, y: f(t, y, b),
               [xmin, xmax], [y0], t_eval= t)
    return sol.y[0]


xdata = np.linspace(xmin, xmax, 25)
ydata = np.exp(-0.02*xdata)+0.02*np.random.randn(*xdata.shape)

y0 = 5
b= 0.005
p0 = [b,y0]

popt, pcov = curve_fit(curve, xdata, ydata, p0=p0)
b, y0 = popt

print(f"b={b}, y0 = {y0}")

这返回

b=0.019975693539459473, y0 = 0.9757709108115179

现在根据拟合曲线绘制测试数据

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据Python中数据集的最佳拟合确定微分方程的未知参数? 的相关文章

随机推荐

  • 如何检索 Android 中可用/已安装字体的列表?

    在Java中我会做类似的事情 java awt GraphicsEnvironment ge java awt GraphicsEnvironment getLocalGraphicsEnvironment Font fonts ge ge
  • 命令行参数太多 Terraform 计划

    我是地形新手 我正在尝试通过天蓝色管道创建一个简单的存储帐户 但是当我运行管道时 我收到错误 命令行参数太多 我很震惊 我不知道我做错了什么 有人可以帮忙吗 这是我的计划脚本 script terraform plan out plan t
  • 如何使用占位符将列名值作为 SQL 参数传递

    如何使用参数占位符将列名值作为 SQL 参数传递 目标是让这个工作 var sql SELECT FROM Condos WHERE 0 LIKE 1 var sqlData db Query sql choice searchString
  • 如何从java应用程序创建Windows服务

    我刚刚继承了一个java应用程序 需要将其作为服务安装在XP和vista上 自从我以任何形式使用 Windows 以来 已经有大约 8 年了 我从来没有创建过服务 更不用说像 Java 应用程序这样的东西了 我有一个应用程序的 jar 和一
  • Android 连接至已配对的蓝牙耳机

    我想模拟通过 设置 gt 无线 gt 蓝牙 的操作 并以编程方式连接配对的蓝牙耳机 我在 Stackoverflow 和 Google 上进行了一些搜索 两者都表明在 API 级别 11 之前没有可用的解决方案 但是 我有兴趣通过查看 An
  • 使用 python 和 pandas 按季节对数据进行分组

    我想使用 Pandas 和 Python 迭代我的 csv 文件 并按季节对数据进行分组 计算一年中每个季节的平均值 目前 季度脚本为一月至三月 四月至六月等 我希望季节与月份相关联 11 冬季 12 冬季 1 冬季 2 春季 3 春天 4
  • 解析复杂的肥皂响应

    我正在 android 中构建我的第一个应用程序 该应用程序使用 wcf 服务 我正在使用 ksoap2 来解析响应 响应实际上是 C 中定义的对象数组 我这样做了 这非常有帮助guide现在我的问题是我需要使用一个 wcf 服务 它再次返
  • 如何在 OPENGL 中旋转或平移单个对象实例?

    假设我有一个有四个立方体的场景 我该如何说在 OpenGL 中仅旋转 平移其中两个立方体而不使用 glrotatef 和 f gltranslate 更改其他立方体 我不想定义我自己的齐次坐标 像往常一样绘制前两个立方体 推入视图模型矩阵
  • iPhone 上的点击延迟和抑制输入焦点

    iPhone 上的 webkit 浏览器在用户进行触摸和 javascript 获取单击事件之间有 300 毫秒的延迟 发生这种情况是因为浏览器需要检查用户是否进行了双击 我的应用程序不允许缩放 因此双击对我来说毫无用处 有不少人有提出的解
  • 如何安全地调用 vsnprintf() ?

    我正在将一些非常古老 gt 10 年 的 C 代码移植到现代 Linux 我在自定义编写的 vsnprintf 包装器中遇到分段错误 显然它的任务是检测重复的输出字符串并实习它们 char strVPrintf const String f
  • Oracle中的查询通过子查询进行选择

    我的 Oracle 数据库中有下表 CREATE TABLE test flight NUMBER 4 date DATE action VARCHAR2 50 CONSTRAINT pk PRIMARY KEY flight date 以
  • 为什么 Glimpse 仍在运行?

    我瞥见了 defaultRuntimePolicy Off 但它仍然显示这样的错误 Unable to define EFProfiledDbProviderServices class of type GlimpseDbProviderS
  • 使用 TensorFlow Benchmark 对 Keras 模型进行基准测试

    我正在尝试使用 TensorFlow 后端对 Keras 模型构建的推理阶段的性能进行基准测试 我当时想的是张量流基准测试工具是正确的方法 我已经成功地在桌面上构建并运行了示例tensorflow inception graph pb一切似
  • 为什么我的 WM_UNICHAR 处理程序从未被调用?

    我有一个 ATL 控件 我希望它能够识别 Unicode 我为 WM UNICHAR 添加了一个消息处理程序 MESSAGE HANDLER WM UNICHAR OnUniChar 但是 由于某种原因 OnUniChar 处理程序永远不会
  • 如何使用 java.util.stream 处理文件块

    为了熟悉流 api 我尝试编写一个非常简单的模式 Problem 拥有一个包含非嵌套文本块的文本文件 所有块均由开始 结束模式标识 例如
  • 我可以同时安装 Powershell 4 和 Powershell 3 吗?

    我的盒子上安装了 Powershell 3 我需要使用 Powershell 4 测试一些脚本 但我想继续运行在 Powershell 3 下测试的一些脚本 并且我不想通过安装 Powershell 4 来破坏某些内容 QUESTION 尽
  • Spark Streaming + json4s-jackson 依赖问题

    我无法在我的 Spark 1 4 1 流应用程序中使用 json4s Jackson 3 2 11 认为是 Spark Core 项目中现有的依赖关系导致了问题 如此处所述 gt 是否可以将 json4s 3 2 11 与 Spark 1
  • Python:如何OCR水平线交叉的字符

    我有一批想要扫描的图像 其中一些有一条水平线穿过必须扫描的字符 如下所示 我编写了一个能够删除水平线的程序 import cv2 import numpy as np img cv2 imread image jpg 0 Applies t
  • 如何约束迭代器的元素类型?

    我正在将一些较旧的 Rust 代码转换为在 1 0 0 上运行 我需要转换一个采用字符迭代器的函数 该函数过去是这样写的 fn f
  • 如何根据Python中数据集的最佳拟合确定微分方程的未知参数?

    我正在尝试使用 python 将不同的微分方程拟合到给定的数据集 因此 我分别使用 scipy 包和solve ivp 函数 只要我对微分方程中包含的参数 b 0 005 有一个粗略的估计 这对我来说就很好 例如 import matplo