求解方程组以获得所需的阶跃响应

时间:2016-03-21 01:20:32

标签: matlab plot equation ode45

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

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

其中x_dot是x的第一个导数。

Figure 1: Desired output

我一直试图通过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));

1 个答案:

答案 0 :(得分: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有很多可能的解决方案。

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

ode plot