如何离散化非线性系统
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
如何离散化以下非线性系统。我使用 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