【发布时间】:2013-12-14 01:06:26
【问题描述】:
我有一个未知的非线性系统,我想使用另一个具有一些可调整参数的系统(例如,神经网络)对其进行建模。因此,我想在不知道其动态的情况下修复未知系统的在线学习结构,我只能通过输入-输出与它进行交互。我的问题是我无法使用 ode 求解器使其在 MATLAB 中工作。假设我们有这个真实的系统(我的实际系统比较复杂,但我会举一个简单的例子以便理解):
function dx = realsystem(t, x)
u = 2;
dx = -3*x+6*u;
end
我们解方程如下:
[t,x_real] = ode15s(@(t,x)realsystem(t,x), [0 1], 0)
我们假设这是一个未知系统,我们不知道系数 3 和 6,因此我们采用具有 2 个自适应定律的自适应系统:
dx(t) = -p1(t)*x(t) + p2(t)*u(t)
dp1(t) = -e(t)*x(t)
dp2(t) = e(t)*u(t)
对于 e(t),误差 e(t) = x(t) - x_real(t)。
问题是我找不到将每个 t 的实际值提供给 ode 求解器以便进行在线学习的方法。
我试过这样的东西,但没有用:
function dx = adaptivesystem(t, x, x_real)
dx = zeros(3,1);
e = x_real - x;
u = 2;
dx(1) = -x(2)*x(1)+x(3)*u;
dx(2) = -e*x(1); %dx(2) = dp1(t)
dx(3) = e*u; %dx(3) = dp2(t)
end
【问题讨论】:
-
您为什么认为 ODE 求解器是适合这项工作的工具?不管你怎么努力,锤子都不能在螺丝上工作。
-
我认为这是模拟一个知道其微分方程的系统的正确工具。知道这些方程,有没有其他方法可以估计模型的参数?
-
对于线性近似,你有 ARMA(X) 和状态空间模型。对于非线性参数拟合,
lsqcurvefit。此外,如果您需要随着时间的推移改进对传入数据的拟合,扩展卡尔曼滤波器可能会很好地工作(并非所有数据都可用于初始估计)。