【问题标题】:How to discretize a nonlinear system [closed]如何离散非线性系统[关闭]
【发布时间】:2021-10-02 11:51:55
【问题描述】:

我如何离散以下非线性系统。我使用 Matlab 和 Casadi 进行模型预测控制。常数 C 介于 0 和 1 之间。

dx/dt = C * x/(x^2 + 1)

感谢您的宝贵时间和帮助。

【问题讨论】:

    标签: matlab control-theory casadi


    【解决方案1】:

    如果你只是想从块中构建它,这样的东西应该可以工作:

    您基本上需要将公式反转为:

    x = int(C * x/(x^2 + 1))
    

    然后等号右边的所有内容都将输入提供给积分器,积分器的输出变为x

    【讨论】:

      【解决方案2】:

      好吧,如果你想用文件来离散化一个微分方程,有很多方法,比如简单的欧拉、龙格-库塔等。让我说一下如何使用欧拉方法。基于差分定义:

      dx/dt = (x(i+1) - x(i))/dt
      

      这里 i 是离散化指数,dt 是采样时间(通常为 0.01)。如果我必须使用你的方程式:

      (x(i+1) - x(i))/dt = C*x(i)/(x(i)^2 + 1)
      

      简化后:

      x(i+1) = x(i) + dt*(C*x(i)/(x(i)^2 + 1))
      

      这是您的离散化模型。在matlab中,只需使用以下代码:

      C = 0.5;
      N = 100;
      x(1) = 1;       % initial condition
      dt = 0.01;
      
      i = 1;
      for i = 1:N
          x(i+1) = x(i) + dt*(C*x(i)/(x(i)^2 + 1));
      end
      

      【讨论】:

        猜你喜欢
        • 2014-07-10
        • 2016-01-12
        • 1970-01-01
        • 2017-03-26
        • 2020-09-18
        • 2014-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多