如何离散化非线性系统

How to discretize a nonlinear system

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

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

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

如果您只是想从块中构建它,像这样的方法应该可行:

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

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

等号右边的所有内容然后将输入馈送到积分器,积分器的输出变为 x

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

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