この問題を分析的に最初に処理して、モデルが正しいかどうかを確認しましょう。
dx/dt = a*x % Seperable differential equation
=> (1/x) dt = a dt % Now we can integrate
=> ln(x) = a*t + c % We can determine c using the initial condition x(0)
=> ln(x0) = a*0 + c
=> ln(x0) = c
=> x = exp(a*t + ln(x0)) % Subbing into 3rd line and taking exp of both sides
=> x = x0 * exp(a*t)
これでわかりました。さんはt = 0 .. 1
、x0 = 6
、a = 5
のためにこれを見てみましょう:
% Plot x vs t using plain MATLAB
x0 = 6; a = 5;
t = 0:1e-2:1; x = x0*exp(a*t);
plot(t,x)
![figure](https://i.stack.imgur.com/t0TfW.png)
今度は、数値積分器として動作し、Simulinkモデルを作成してみましょう。このアプリケーションではIntegratorブロックは実際には必要ありません。各時間ステップで変更を追加するだけです!
![model](https://i.stack.imgur.com/WKTob.png)
これを実行するには、我々は物事のカップルを最初に設定する必要があります。 Simulation> Model Configuration Parametersで、dx/dt
とdx
(第2ゲインブロック)の間で切り替えるために使用した時間ステップに合わせてタイムステップを設定する必要があります。
![config](https://i.stack.imgur.com/V9qkN.png)
最後に、我々はx0
のための初期条件を設定する必要があり、これは
![initial](https://i.stack.imgur.com/JiB3e.png)
は1秒に終了時間を設定し、モデルを実行しているメモリブロックで行うことができ、我々が表示さスコープの期待される結果。私たちの分析ソリューションに適合しているので、正しいことが分かります。
![scope](https://i.stack.imgur.com/EMH5Z.png)
今、我々は、モデルがより柔軟にするために、統合ブロックを再導入することができ、何が起こっているか理解しています。インテグレータを使用すると、dt
が自動的に計算され、実際には取り除くことができるため、ゲインブロックをマイクロ管理する必要はありません。しかし、まだメモリブロックが必要です。積分器とメモリブロックの両方で初期条件も必要になります。スコープを別の場所に配置し、最初のいくつかのタイムステップを完了して、その理由を理解してください。
![simple](https://i.stack.imgur.com/98iFs.png)
積分ブロックを使用する場合、初期条件はそれほど明確であることに留意されたいです。
なぜあなたは1の値とGainブロックを使用していますか?これは何もしません... 1回のタイムステップでフィードバックループを延期するには、メモリブロックが必要です。なぜブロック内の初期条件を設定しても、あなたが望むものが得られないのですか? – Wolfie
私はゲインを値1で使うことは、aを1に設定することを意味します。e.i.ゲイン= 5 <=> = 5.私は間違っていましたか? 2番目の質問:初期条件を5に設定すると、x(0)= 5を意味しますか?あなたは、あなたの積分器の出力を取り出す1を乗じて、あなたのインテグレータに戻って、それを供給しているので、 – Mark
ゲインは、乗数です。メモは、フィードバックを中断するためにメモリブロックを使用していないので、瞬時出力を入力としても使用しようとしていますが、これは動作しません。そして、はい、それは、このモデルでは、メモリブロックの必要がない、初期条件は – Wolfie