gpt4 book ai didi

matlab - 为什么我在 MatCont 中收到 "current step too small"错误?

转载 作者:行者123 更新时间:2023-12-04 08:27:50 24 4
gpt4 key购买 nike

我正在尝试使用 MATLAB 的 MatCont 包对二阶动力系统进行分岔分析。总的来说,我对 MatCont 和 ODE 求解器相当陌生。
系统如下(用 MatCont 编写):

x1' = R*x1/L + x2/L
x2' = a+x2/D - (b*x2^3)/D - x1/D
其中 R、L、D、a、b 是参数。
当我开始只关注一个单一变量的积分时(我的目标是针对 fork 参数 R 绘制一个变量),我收到以下错误: "current step too small". 我尝试了 InitStepSize、MinStepSize 和 MaxStepSize 的不同值,但错误并未消失,因此我无法执行分析。
我使用的求解器是 ode45。知道如何解决这个问题吗??
更多细节:
  • 前 3 个导数是符号计算的
  • 初始点:(t=0, x1=0, x2=0, R=27, L=1.2e-08, D= 1.2e-11, a=0.04, b=0.18)

  • 这是我从 matlab 得到的输出:
    enter image description here
    first point found
    tangent vector to first point found
    Current step size too small (point 1)
    elapsed time = 2.2 secs
    npoints curve = 1
    first point found
    tangent vector to first point found
    Current step size too small (point 1)
    elapsed time = 0.4 secs
    npoints curve = 1
    如果您需要更多详细信息,请询问。

    最佳答案

    在实现一种算法时,必须决定它的通用程度。面对“现实世界”问题时可能出错的最直观假设之一是所有变量都具有大致相同的权重,所有感兴趣的区域都是非平坦的,例如在未修改的欧几里德范数中接近圆形或球形或标量积。
    有两种主要方法可以实现这个假设,传递一个用于构建适应范数和标量积的尺度向量,或者只是传递这样一个标量积,或者只是要求用户已经以这样的方式扩展了他们的问题每个变量的取值范围大约在 0.01 到 1000 左右。
    这可能不是这种情况的一个迹象是等式中“连接”系数的极值,如这里 LD .虽然 ode45可能仍然优雅地处理这个问题,分岔分析背后的非线性寻根器可能不会。时间尺度的变化很容易1e9倍(也就是说,时间单位不是秒,而是纳秒),时间尺度变得与状态空间尺度相当。在代码中,这种变化是通过简单地乘以 L,D 来实现的。有了这个因素,给 L=12D=0.012 .据报道,这实际上已经足以使分析程序工作。

    关于matlab - 为什么我在 MatCont 中收到 "current step too small"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65179656/

    24 4 0