matlab 衝突のシミュレーション
現在、Matlabで簡単な衝突のシミュレーションを行っていますが、うまくいかず、どなたがご教授ください。
【やりたいこと】
ボールを自由落下させた時の地面との衝突のシミュレーションを、
Simulinkではなく、自分で作成したmfileから実現させたい。
【質問】
以下のプログラムでodeの計算が終わらず、どのようにすればいいのか
ご教授ください。
=======================
【diff_freefall.m】
function dx = diff_freefall(t,x0)
g = 9.81; % 重力
k = 1; % 反発係数
A = [0 1;
0 0];
B = [ 0;
-g];
% 衝突判定
if x0(1)<=0 && x0(2)<0
x0(1) = 0;
x0(2) = -k*x0(2);
end
dx = A * x0 + B;
=======================
=======================
【simu.m】
Ts = 0; %シミュレーション開始時間
Te = 10; %シミュレーション終了時間
y0 = [10; 15;]; %初期位置、初期速度
[T,Y] = ode45('diff_freefall',[Ts:0.1:Te],y0);
subplot(2,1,1);
plot(T,Y(:,1),'g');
subplot(2,1,2);
plot(T,Y(:,2),'r');
=======================
【補足】
・以下のmathworksのサイトのサンプル(simulink版)を、mfileで記述したいです。
<http://jp.mathworks.com/help/simulink/examples/simulation-of-a-bouncing-ball_ja_JP.html>
・すべてのodeのタイプを試しましたが、ずっと終わらない、
もしくは途中でシミュレーションが止まります。
・衝突した時に、odeの積分の累積値がクリアできていないことが原因だと思うのですが、
クリアする方法がわからず困っています。