Python:无法使用 odeint 和 Signum 函数求解微分方程

2023-12-12

我正在尝试解决这个问题:

enter image description here

U 在哪里

enter image description here

here:

s=c*e(t)+e_dot(t)

and

e(t)=theta(t)-thetad(t) 

and

e_dot(t)=theta_dot(t)-thetad_dot(t)

其中thetad(thetadesired)=sin(t)——即要跟踪的信号! 且 thetad_dot=cos(t),J=10,c=0.5,eta=0.5

我首先尝试使用 odeint - 它在 t=0.4 之后给出了错误,即 theta(上述微分方程的解)降至 0 并在此后保持不变。然而,当我尝试将 mxstep 增加到 5000000 时,我可以获得一些正确的图表,直到 t=4.3s。

我想得到一个纯正弦图。也就是说,我想要 theta(上述微分方程的解)来跟踪 thetad,即 sin(t)。但在 t=4.3 秒后就无法准确跟踪 thetad。此后,theta(上述微分方程的解)就会下降到 0 并保持不变。

这是我的代码-

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

c=0.5
eta=0.5
def f(Y,t):
    x=Y[0]
    y=Y[1]
    e=x-np.sin(t)
    de=y-np.cos(t)
    s=c*e+de
    return [y,-c*(de)-np.sin(t)-eta*np.sign(s)]

t=np.linspace(0,10,1000)
y0=[0.5,1.0]
sol=odeint(f,y0,t,mxstep=5000000)
#sol=odeint(f,y0,t)
print(sol)
angle=sol[:,0]
omega=sol[:,1]
error=angle-np.sin(t)
derror=omega-np.cos(t)
plt.subplot(4,2,1)
plt.plot(t,angle)
plt.plot(t,error,'r--')
plt.grid()
plt.subplot(4,2,2)
plt.plot(t,omega)
plt.plot(t,derror,'g--')
plt.grid()
plt.subplot(4,2,3)
plt.plot(angle,omega)
plt.grid()
plt.subplot(4,2,4)
plt.plot(error,derror,'b--')
plt.savefig('signum_graph.eps')
plt.show()

所采用的积分器odeint(可能您发现实现的所有积分器)都基于这样的假设:您的导数(f) 在每个步骤中都是连续的(并且具有连续导数)。 Signum 函数显然打破了这个要求。这会导致无论步长有多小,误差估计都非常高,进而导致步长过小以及您一直遇到的问题。

对此有两种通用的解决方案:

  1. 选择步长,使标志翻转恰好落在一个台阶上。 (这可能非常乏味。)

  2. 将signum函数替换为非常陡峭的函数sigmoid,这对于大多数应用来说应该很好,甚至更现实。在您的代码中,您可以使用

    sign = lambda x: np.tanh(100*x)
    

    代替np.sign。这里的因子 100 控制 S 型曲线的陡度。选择足够高的值以反映您实际需要的行为。如果您选择过高,这可能会对您的运行时间产生负面影响,因为积分器会将步长调整为不必要的小值。

在你的情况下,设置一个小的绝对容差似乎也有效,但我不会依赖于此:

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

Python:无法使用 odeint 和 Signum 函数求解微分方程 的相关文章

随机推荐

  • 如何找到 appleid.apple.com/auth/revoke 端点所需的 client_id 和 client_secret 值?

    我想在我的项目中为通过 Apple REST API 登录的用户使用帐户删除功能 在我的 iOS 应用程序中 curl 请求中指定的 client id 和 client secret 值对应于什么值 curl v POST https a
  • jquery 验证插件 - 提交时不验证

    我有一个包含多个字段的表单 我想在键盘输入和提交时验证其中一些字段 我调用 jquery 1 9 1 然后调用插件 1 11 1 然后使用我的 js 调用外部文件 我通过 Firebug 看到它们都在加载 如果我使用下面的代码 它根本不会验
  • HTML 全屏布局,具有最小宽度、最大宽度

    我有一个项目 例如 一个 div 标签 它占据屏幕宽度的 1 3 最小宽度为 500px 最大宽度为 700px 在它旁边 还有另一个项目占据屏幕的其余部分 如果我只是指定 66 的宽度 只要其他项目的高度不采用最大值之一 它就可以正常工作
  • 阻止杰克逊将数字读取为字符串

    Jackson 将输入数字读取为字符串 作为下面的示例 Student 类将名称 4567 读取为字符串 例如 输入 name 4567 Java类 Class Student String name Jackson 正在解析 JSON 文
  • 使用 StickyGridHeaders

    粘性网格标题 但它没有按应有的方式工作 或者至少没有按我想要的方式工作 所以我得到了这个列表 里面有其他列表 然后我创建了一个标题列表 我使用原始列表 和一个完整的项目列表 所有子项目 然后像这样调用适配器 List
  • 为什么在创建 SqlClient 类型时会出现缺少方法异常运行时?

    我有以下代码 open FSharp Data
  • $_SERVER['REQUEST_URI'] 也带有 #hash 吗?

    如果我要求site page php hash the SERVER REQUEST URI 只是 page php 有没有办法在 php 没有后来的 ajax 中知道用户请求的页面 hash Thanks 简短回答 不 哈希不会传递到服务
  • Grails 使用带有 3 个以上逻辑参数的动态查找器

    我成功地使用 Hibernate 的动态查找器在数据库中进行搜索 def temp User findByNameAndStreet name street 虽然 我需要这样的三重逻辑论证 def temp User findByNameA
  • 嵌入式 Flash MP3 播放器在某些文件上速度缓慢,在其他文件上正常

    我正在使用基于 Flash 的嵌入式 MP3 播放器 独立版本WordPress 音频播放器 准确的说 在客户端的网页上播放音频 鉴于基于 Flash 的播放器的性质 AFAIK 他们都使用 Flash 的音频 视频解码库 确切的播放器产品
  • 如何向 Console.ReadLine() 添加超时?

    我有一个控制台应用程序 我想在其中向用户提供x秒响应提示 如果在一段时间后没有输入 程序逻辑应该继续 我们假设超时意味着空响应 解决这个问题最直接的方法是什么 我惊讶地发现 5 年后 所有答案仍然存在以下一个或多个问题 使用了 ReadLi
  • 无法使用 Facebook API 获取位置和电子邮件

    在我的 Android 应用程序中 我开发了这段代码来使用我的帐户登录并获取用户属性 例如姓名 位置和电子邮件 问题是我可以获得姓名 但无法获得电子邮件和位置 当我尝试我的代码而不尝试捕获应用程序崩溃和我的日志点时getproperty e
  • @RequestMapping正则表达式

    我正在尝试为 spring RequestMapping 注释创建 value 属性来像这样映射 url educationDistrict 308 action resetAddressesForYear 1 and this educa
  • 使用读取繁重的 Slave 管理热备中 Postgres 复制的冲突和滞后

    要求 Avoid terminating connection due to conflict with recovery错误也可以接受replication lag Google Cloud PostgreSQL 9 6 复制已打开 使用
  • 如何在 Objective C 中创建单例类

    如何在 Objective C 中创建单例类 好吧 appDev 您可能会在网络上找到很多不同的技术来做到这一点 然而 对于iOS应用程序开发 我认为最方便的方法是执行以下操作 编写获取单例对象的方法 建议 使用dispatch once线
  • 自定义 UserManager 始终返回 null

    我正在尝试创建自己的UserManager从原始版本延伸 当我通过电子邮件进行搜索时 找不到该用户 但是如果我从上下文中进行搜索 如果我找到用户 请参阅Get方法 为了验证它是否确实得到了很好的实现 我覆盖了FindByEmailAsync
  • UIImagePicker 的内存问题

    我正在构建一个应用程序 它有几个不同的部分 所有这些部分都非常注重图像 它与我客户的网站相关 它们是 高设计 类型的服装 该应用程序的一部分是从相机或库上传的图像 以及显示缩略图网格的表格视图 相当可靠的是 当我处理 UIImagePick
  • 在 HTML 画布上设置文本格式 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在使用 HTML Canvas 和 vanilla javascript 制作游戏 我是 javascript 新手 所以这可能比我想象的要容易 我有两个代表卡片的对象数组
  • 处理开关盒

    我怎样才能用 switch 语句做这样的事情 String prototype startsWith function str return this indexOf str 0 switch myVar case myVar starts
  • 既然 appsettings.json 就足够了,那么 Hosting.json 有什么意义呢?

    在 NET Core 2 Web API 应用程序中 我可以覆盖配置urls using appsettings json 但在官方文档他们引入了额外的文件 hosting json 为什么 增加复杂性有什么意义 下面的代码完全可以使用ap
  • Python:无法使用 odeint 和 Signum 函数求解微分方程

    我正在尝试解决这个问题 U 在哪里 here s c e t e dot t and e t theta t thetad t and e dot t theta dot t thetad dot t 其中thetad thetadesir