function task4CaProbeCameleonDoseResponse()
%Cameleon Ca応答をシミュレート
param = [1.33*10^6,0.33]; % kf,kbのパラメータ:cameleon 3.6
% param = [2.36*10^7,0.33]; % kf,kbのパラメータ:cameleon Nano15
y0 = [0,1*10^(-6),0];  % A：カルシウム,B：プローブ,AB：複合体の初期濃度(M)

figure;%フィギュアを作成
hold on;%フィギュアを上書きする

dt=20;%刺激の時間間隔
axis([0, 2*dt, 0, 2*10^(-6)]);% x軸　0-2*dt秒、y軸0-2uMまで表示

Dt=zeros(20,2);%平衡状態になった時のカルシウム濃度と複合体濃度を格納する行列をつくる
for i=0:20;
    t0 = 0;%シミュレーション開始時刻を0に設定
    y0 = [0,1*10^(-6),0]; % A：カルシウム,B：プローブ,AB：複合体の初期濃度(M)
    
    [t,y] = ode15s(@(t,y) ODE(t,y,param),[t0,t0+dt],y0);%ODEソルバを解く
    plot(t,y(:,1),'b',t,y(:,2),'r',t,y(:,3),'k'); %ODEソルバから返されたベクトルt、yをプロット
    
    t0 = t(end);%ｔの最後の値を次のシミュレーションの初期値に設定し直す
    y0(1) = 1*10^(-7)*i;%y0(1),つまりカルシウムの濃度を(100*i)nMに設定
    %※forループが回るとforループの変数iが1つずつ大きくなる。これを利用してカルシウム濃度を上昇させる
    
    [t,y] = ode15s(@(t,y) ODE(t,y,param),[t0,t0+dt],y0);%ODEソルバを解く
    plot(t,y(:,1),'b',t,y(:,2),'r',t,y(:,3),'k'); %ODEソルバから返されたベクトルt、yをプロット
    
    **= y0(1);%y0(1),つまりカルシウムの濃度をDt(i+1,1)に格納
    **= y(end,3);%y(end,3),つまり複合体の濃度をDt(i+1,2)に格納
end

%ラベリング
xlabel('time (sec)');
ylabel('conc. (M)');
legend('Ca','CaProbe','Complex');
hold off;%1つ目のフィギュアの重ね書き終了

figure;
hold on;
plot(**,**)%x軸：カルシウム濃度、y軸複合体濃度のグラフをプロットする。
%ある行列Aの1行目全体を指定する時はA(:,1)
xlabel('Ca2+ conc. (M)');
ylabel('Ca-probe complex (M)');
hold off;%2つ目のフィギュアの重ね書き終了
end

function dydt = ODE(t,y,param) % ODE(t,y,param)という関数の定義
A = y(1); % A:カルシウムの濃度
B = y(2); % B：プローブの濃度
AB = y(3); % AB：複合体の濃度

kf = param(1); % kfはparamの1番目の値
kb = param(2); % kbはparamの2番目の値

dydt(1,:) = 0; % dydtの1行目(分子A:カルシウム)の式の定義
dydt(2,:) = -kf*A*B+kb*AB; % dydtの2行目(分子B：プローブ)の式の定義
dydt(3,:) = kf*A*B-kb*AB;  % dydtの3行目(分子AB：複合体)の式の定義
end