「シミュレーション」の版間の差分

編集の要約なし
編集の要約なし
編集の要約なし
 
(同じ利用者による、間の3版が非表示)
72行目: 72行目:
  endfor
  endfor
   
   
plot(tim, x);
  grid on;
  grid on;
  axis([0 10 0 1.5]);
  axis([0 10 0 1.5]);
plot(tim, x);
  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]);
plot(tim, x(1, :)); % x_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]);
plot(tim, x);
  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]);
plot(tim, x(1, :)); % x_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]);
plot(tim, x(1, :)); % x_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]);
plot(tim, x(1, :)); % x_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]);
plot(tim, y); % yをグラフ表示
  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]);
plot(tim, y); % yをグラフ表示
  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]);
plot(t, x(:, 1)); % thetaすなわちx(1)をグラフ表示.xは列方向が時間軸になっているの注意
  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]);
plot(t, x(:, 1)); % thetaすなわちx(1)をグラフ表示.xは列方向が時間軸になっているの注意
  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]);
plot(t, y); % yをグラフ表示
  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]);
plot(tim, y); % yをグラフ表示
  xlabel('time (s)');
  xlabel('time (s)');
  ylabel('y');
  ylabel('y');