2016-03-21 72 views
1

我需要在以下方程中獲得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)); 
+0

你有系統辨識工具箱嗎?如果是這樣,看看[這個視頻](http://uk.mathworks.com/videos/estimating-state-space-and-polynomial-models-68898.html)。或者,如果您擁有優化工具箱,則可以使用預測階躍響應與所需階差之間的最小平方差創建成本函數,並嘗試通過調整參數來最小化誤差。 – am304

+0

'y'(我認爲是代碼中的'x(2)')也應該是第一塊代碼中的時間導數,這樣您可以將其右手邊包含在ode45調用中?什麼是'u',什麼是'xu'(這是你發佈的系統中沒有的)?你有什麼信息可以讓你匹配這個數字:只有數字或者初始斜率或者終端值和斜率還是其他的? – TroyHaskin

回答

0

這當然聽起來像已經暗示的參數估計問題一樣。你想最小化使用你的模型建模的結果與你的圖中的值之間的誤差(使你的三個參數a,b和c適合數據)。

第一步是編寫一個錯誤函數,該函數採用ode輸出值並比較它與數據值的接近程度(例如最小二乘誤差的總和)。

然後,您必須搜索a,b,c值的範圍(可能是一個大的搜索空間),然後選擇最小化您的錯誤函數的一組(a,b,c)儘可能靠近你的圖表)。存在許多搜索/優化策略(例如,遺傳算法/等等)。

請注意,參數是實數元素(包括負值和極大或小值),大型搜索空間通常會導致難以解決這些問題。
另外我認爲你必須小心初始條件,例如[0,0]似乎沒有導致有趣的結果。 (嘗試= -0.5,B = 0.2,C = -0.00000001,用[0,10]如下IC)

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