我需要在以下等式中获得a,b和c的值,以便系统的阶跃响应与下图的匹配。
x_dot = a*x + b+u;
y = c*x;
其中x_dot是x的第一个导数。
我一直试图通过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));
答案 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有很多可能的解决方案。
看起来很有趣..祝你好运。