1

我需要在下面的方程中获得a、b和c的值,以便系统的阶跃响应与下图的响应相匹配。

x_dot = a*x + b+u;
y = c*x;

其中 x_dot 是 x 的一阶导数。

图 1:所需的输出

我一直在尝试通过 Matlab 来实现这一点,到目前为止,我已经实现了以下目标,仅使用 a、b 和 c 的任意值进行测试:

clc;
close all;
clear all;

a=1;
b=2;
c=3;

tspan = [0:0.01:12];

x_dot = a*x+b*xu;
x = (a*x^2)/2 + b*u*x;
y = c*x;

f = @(t,x) [a*x(1)+b*x(2); c*x(1)];
[t, xa] = ode45(f,tspan,[0,0]);

plot(t,xa(:,1));
4

1 回答 1

0

这听起来确实像是已经暗示的参数估计问题。您希望最小化使用您的 ode 建模的结果与图表中的值之间的误差(将您的三个参数 a、b 和 c 拟合到数据中)。

第一步是编写一个误差函数,它采用 ode 输出值并比较它与数据值的接近程度(例如最小二乘误差之和)。

然后你必须搜索一系列 a,b,c 值(这可能是一个很大的搜索空间),然后你选择一组 (a,b,c) 来最小化你的误差函数(即尽可能接近你的图尽可能)。

存在许多搜索/优化策略(.. 例如遗传算法等)。

请注意,参数是实数元素(包括负值和极大或极小的值),大的搜索空间通常使这些问题难以解决。
另外我认为你必须小心初始条件,例如 [0,0] 似乎不会导致有趣的结果。(尝试 a = -0.5,b=0.2 和 c=-0.00000001,IC 为 [0,10] 如下)

clc;
close all;
clear all;

a=-0.5;
b=0.2;
c=-0.00000001;

tspan = [0:0.01:12];

f = @(t,x) [a*x(1)+b*x(2); c*x(1)];
[t, xa] = ode45(f,tspan,[0,10]);

plot(t,xa);
hold on 
plot(t,4)

这里 10 是绿线的起点,蓝线从 0 开始。我还要注意的是 IC 会改变结果。所以对于给定 IC 的 a、b、c 有许多可能的解决方案。

看起来很有趣..祝你好运。

颂歌情节

于 2016-03-21T12:38:57.897 回答