具有自适应律的系统的ODE求解器

时间:2013-12-14 01:06:26

标签: matlab ode

我有一个未知的非线性系统,我想使用另一个具有一些适应性参数的系统(例如,神经网络)对其进行建模。因此,我想在不了解其动态的情况下修复未知系统的在线学习结构,我只能通过输入 - 输出与其进行交互。我的问题是我无法使用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的真实值提供给颂歌解算器,以便进行在线学习。

我尝试了类似的东西,但它不起作用:

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

1 个答案:

答案 0 :(得分:0)

你应该意识到你的问题是不正确的。给定通过采样和平滑/插值获得的任何轨迹x(t),您可以随意选择p1(t)并设置

p2(t)=(x'(t) - p1(t)* x(t))/ u。

所以你必须制定限制。一个显而易见的是,函数p1和p2应该对黑盒系统的所有轨迹都有效。你有不同的轨迹吗?

另一种变体是要求p1和p2是常数。实际上,在这种情况下,如果您有可用的等间距样本,那么首先找到数据的良好差分方程会更容易。对于时间t [n] = t0 + n * dt的样本x [n]形成具有行的矩阵X

对于n = 0,...,N-k

[-u,x [n],x [n + 1],...,x [n + k]]

并将QR分解或SVD应用于X以确定右手核矢量。 QR可能无法显示可用的秩缺陷,因此在R = USV ^ T,S对角线的顶部正方形部分使用SVD,按常规排序,U,V平方和正交,并使用V的最后一行,系数

[b,a [0],...,a [k]],

对应于最小特征值,以形成差分方程

一个[0] * X [n]的一个+ [1] * X [N-1] + ... + A [k]的* X [n-k个] = B * U

如果R的有效等级。 S不是(k-1),然后将k减少为有效等级加1并重新开始。

如果最终找到k = 1,那么你可以用它来制作微分方程。将差分方程重新表述为

a [0] *(x [n] -x [n-1])/ dt = - (a [0] + a [1])/ dt * x [n-1] + b / dt * û

并读取微分方程

x'(t)= - (a [0] + a [1])/(a [0] * dt)* x(t)+ b /(a [0] * dt)* u

如果系数变得非常大,可以拒绝这个等式。