編集の要約なし
(→オイラー法) |
編集の要約なし |
||
(同じ利用者による、間の4版が非表示) | |||
72行目: | 72行目: | ||
endfor | endfor | ||
plot(tim, x); | |||
grid on; | grid on; | ||
axis([0 10 0 1.5]); | axis([0 10 0 1.5]); | ||
xlabel('time (s)'); | xlabel('time (s)'); | ||
ylabel('x'); | ylabel('x'); | ||
141行目: | 141行目: | ||
endfor | endfor | ||
plot(tim, x(1, :)); % x_1だけをグラフ表示 | |||
grid on; | grid on; | ||
axis([0 10 -1 1]); | axis([0 10 -1 1]); | ||
xlabel('time (s)'); | xlabel('time (s)'); | ||
ylabel('theta (rad)'); | ylabel('theta (rad)'); | ||
198行目: | 198行目: | ||
endfor | endfor | ||
plot(tim, x); | |||
grid on; | grid on; | ||
axis([0 10 0 1.5]); | axis([0 10 0 1.5]); | ||
xlabel('time (s)'); | xlabel('time (s)'); | ||
ylabel('x '); | ylabel('x '); | ||
227行目: | 227行目: | ||
endfor | endfor | ||
plot(tim, x(1, :)); % x_1だけをグラフ表示 | |||
grid on; | grid on; | ||
axis([0 10 -1 1]); | axis([0 10 -1 1]); | ||
xlabel('time (s)'); | xlabel('time (s)'); | ||
ylabel('theta (rad)'); | ylabel('theta (rad)'); | ||
274行目: | 274行目: | ||
endfor | endfor | ||
plot(tim, x(1, :)); % x_1だけをグラフ表示 | |||
grid on; | grid on; | ||
axis([0 10 -1 1]); | axis([0 10 -1 1]); | ||
xlabel('time (s)'); | xlabel('time (s)'); | ||
ylabel('theta (rad)'); | ylabel('theta (rad)'); | ||
313行目: | 313行目: | ||
endfor | endfor | ||
plot(tim, x(1, :)); % x_1だけをグラフ表示 | |||
grid on; | grid on; | ||
axis([0 10 -1 1]); | axis([0 10 -1 1]); | ||
xlabel('time (s)'); | xlabel('time (s)'); | ||
ylabel('theta (rad)'); | ylabel('theta (rad)'); | ||
414行目: | 414行目: | ||
endfor | endfor | ||
plot(tim, y); % yをグラフ表示 | |||
grid on; | grid on; | ||
axis([0 10 -1 1]); | axis([0 10 -1 1]); | ||
xlabel('time (s)'); | xlabel('time (s)'); | ||
ylabel('y'); | ylabel('y'); | ||
479行目: | 479行目: | ||
endfor | endfor | ||
plot(tim, y); % yをグラフ表示 | |||
grid on; | grid on; | ||
axis([0 10 -1 1]); | axis([0 10 -1 1]); | ||
xlabel('time (s)'); | xlabel('time (s)'); | ||
ylabel('y '); | ylabel('y '); | ||
535行目: | 535行目: | ||
x = lsode("fnc", x_0, t); | x = lsode("fnc", x_0, t); | ||
plot(t, x(:, 1)); % thetaすなわちx(1)をグラフ表示.xは列方向が時間軸になっているの注意 | |||
grid on; | grid on; | ||
axis([0 10 -1 1]); | axis([0 10 -1 1]); | ||
xlabel('time (s)'); | xlabel('time (s)'); | ||
ylabel('theta '); | ylabel('theta '); | ||
563行目: | 563行目: | ||
x = lsode("fnc", x_0, t); | x = lsode("fnc", x_0, t); | ||
plot(t, x(:, 1)); % thetaすなわちx(1)をグラフ表示.xは列方向が時間軸になっているの注意 | |||
grid on; | grid on; | ||
axis([0 10 -1 1]); | axis([0 10 -1 1]); | ||
xlabel('time (s)'); | xlabel('time (s)'); | ||
ylabel('theta '); | ylabel('theta '); | ||
608行目: | 608行目: | ||
y = C * x '+ D * u; %出力方程式に基づいてyの計算 | y = C * x '+ D * u; %出力方程式に基づいてyの計算 | ||
plot(t, y); % yをグラフ表示 | |||
grid on; | grid on; | ||
axis([0 10 -1 1]); | axis([0 10 -1 1]); | ||
xlabel('time (s)'); | xlabel('time (s)'); | ||
ylabel('y '); | ylabel('y '); | ||
== 線形離散時間システムとしてのシミュレーション == | |||
これまで常微分方程式の数値解法に基づいて動的システムのシミュレーション方法を考えてきましたが,シミュレーション対象が線形システムで,入力がサンプリング期間中一定値と考えてよい場合,線形離散時間システムとして扱うことで簡単にシミュレーションを行うことができます. | これまで常微分方程式の数値解法に基づいて動的システムのシミュレーション方法を考えてきましたが,シミュレーション対象が線形システムで,入力がサンプリング期間中一定値と考えてよい場合,線形離散時間システムとして扱うことで簡単にシミュレーションを行うことができます. | ||
634行目: | 634行目: | ||
次のスクリプトは,先の慣性・粘性・弾性系の強制振動を離散時間システムに変換した上でシミュレーションするものです.まず,ss関数で4つの行列による状態空間表現をOctave上のシステム行列表現に変換し,その上でc2d関数で離散化しています.シミュレーションの計算自体は離散時間システムの式を繰り返し演算しているだけです. | 次のスクリプトは,先の慣性・粘性・弾性系の強制振動を離散時間システムに変換した上でシミュレーションするものです.まず,ss関数で4つの行列による状態空間表現をOctave上のシステム行列表現に変換し,その上でc2d関数で離散化しています.シミュレーションの計算自体は離散時間システムの式を繰り返し演算しているだけです. | ||
=== 離散時間システムに変換した慣性・粘性・弾性系のシミュレーション === | |||
dt = 0.01; % サンプリングタイム | dt = 0.01; % サンプリングタイム | ||
669行目: | 669行目: | ||
endfor | endfor | ||
plot(tim, y); % yをグラフ表示 | |||
grid on; | grid on; | ||
axis([0 10 -1 1]); | axis([0 10 -1 1]); | ||
xlabel('time (s)'); | xlabel('time (s)'); | ||
ylabel('y'); | ylabel('y'); |