2016-03-21 20 views
1

システムのステップ応答が下の図のものと一致するように、次の式のa、b、cの値を取得する必要があります。希望のステップ応答を得るための方程式の解法

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

ここで、x_dotはxの1次導関数です。

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

これは確かに音:私はMatlabのを介してこれを実現しようとしていると、これまでに以下を達成した、テスト目的のために、a、b及びcのためだけで任意の値を使用して

Figure 1: Desired output

既に示唆されているパラメータ推定問題のように。 odeを使ってモデル化した結果とグラフの値(3つのパラメータa、b、cをデータにあてはめる)との間の誤差を最小限に抑えたいとします。

最初のステップは、ode出力値を取り、それがデータ値にどれだけ近いかを比較するエラー関数を書くことです(最小二乗誤差の合計など)。

次に、a、b、c値の範囲(大きな検索スペース)を検索し、エラー関数を最小限に抑える(a、b、c)可能な限りグラフの近くに)。

多くの検索/最適化戦略(例えば、遺伝的アルゴリズムなど)が存在する。

パラメータは実数(負の値と非常に大きいまたは小さい値を含む)の要素であることに注意してください。通常、大きな検索スペースはこれらの問題を解決するのを困難にします。
また、初期状態に注意する必要があると思います。 [0,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) 

([0,10]として以下のICと= -0.5、B = 0.2、C = -0.00000001を試みる)は緑色の線の始点であり、青線は0から始まります私はまた、ICは結果を変更することに注意してください。ICが与えられた場合、a、b、cのための多くの可能な解決策があります。

ルックスは面白いです。

ode plot

関連する問題