Résolution d'un système d'ODE (équa. diff)
Bonjour,
je tente de résoudre un système d'équation différentielle de premier ordre sous Matlab et afficher l'évolution des variables en fonction du temps, mais j'obtient une matrice remplit de 'NaN' et le warning "Matrix is singular, close to singular or badly scaled.Results may be inaccurate. RCOND = NaN.'' Comment faire pour remedier à la situation ?
Voici mon code:
PFE.m:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
global t;
global y;
% Conditions initiales
y0=zeros(47,1);
y0(1) = 0; %EGFR_EGR
y0(2) = 0; %2EGFR_EGF
y0(3) = 0; %EGFR_P
y0(4) = 0; %Gr_G
y0(5) = 0; %PI3K_Gr_G
y0(6) = 0; %EGFR_PI3K;
y0(7) = 0; %PIP3
y0(8) = 0; %PIP3_Akt_PDK
y0(9) = 0; %Akt_P
y0(10)= 0; %PIP2
y0(11)= 0; %EGFR_PL
y0(12)= 0; %EGFR_PLP
y0(13)= 0; %PLCr_P
y0(14)= 1.05*10^-7; %PLCr
y0(15)= 0; %PKC
y0(16)= 0; %Ca2+
y0(17)= 1.5*10^-7; %Shc
y0(18)= 0; %ShcP
y0(19)= 8.5*10^-7; %Grb2
y0(20)= 0; %PI3K*
y0(21)= 3.4*10^-8; %SOS
y0(22)= 0; %EGFR_G
y0(23)= 0; %EGFR_G_S
y0(24)= 0; %G_S
y0(25)= 0; %EGFR_Sh
y0(26)= 0; %EGFR_Sh_P
y0(27)= 0; %EGFR_Sh_G
y0(28)= 0; %EGFR_Sh_G_S
y0(29)= 0; %Sh_G
y0(30)= 0;%Sh_G_S
y0(31)= 1*10^-8; %PI3K
y0(32)= 1.107*10^-8; %Ras-GDP
y0(33)= 0 ;%Ras-GTP
y0(34)= 5.531*10^-9; %Raf
y0(35)= 0; %RafP
y0(36)= 8*10^-7; %PI
y0(37)= 1.9926*10^-7; %MEK
y0(38)= 0; %MEKP
y0(39)= 0; %MEKPP
y0(40)= 4.1514*10^-7; %ERK
y0(41)= 0; %ERKP
y0(42)= 0; %ERKPP
y0(43)= 3.33*10^-8; %EGF
y0(44)= 8.307*10^-9; %EGFR
y0(45)= 1*10^-8; %Akt
y0(46)= 4.3*10^-8; %Gab1
y0(47)= 1*10^-8; %Pkt
%Plage de temps de simulation
tspan=[0, 100];
% Appelle au solveur ode
[t, y] = ode23s(@equation, tspan, y0);
plot(t,y(:,1));
plot(t,y(:,2)); |
et mon fichier equation.m contenant la fonction equation:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Fonction equation.m
%Cette fonction contient l'ensemble des équations différentielles à
%résoudre, formé des réactions v1 à v44, déclaré ci-dessous.
function dydt=equation(t,y)
global t;
global y;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Constantes cinétiques
%
k1=3*10^6;k_1=0.06;
k2=1*10^7;k_2=0.1;
k3=1;k_3=0.01;
Vmax4=4.5*10^-7;Km4=5*10^-8;
k5=6*10^7;k_5=0.2;
k6=1;k_6=0.05;
k7=0.3;k_7=6*10^6;
Vmax8=4.5*10^-7;Km8=5*10^-8;
k9=3*10^6;k_9=0.05;
k10=1*10^7;k_10=0.06;
k11=0.03;k_11=6*10^7;
k12=0.015;k_12=1*10^5;
k13=9*10^7; k_13=0.6;
k14=6; k_14=0.06;
kcat15=0.2;Km15=8.3333*10^-7;
Vmax16=1.7*10^-9;Km16=3.4*10^-7;
k17=3*10^6; k_17=0.1;
k18=0.3;k_18=9*10^5;
k19=1*10^7; k_19=0.0214;
k20=0.12;k_20=2.4^5;
k21=3*10^6; k_21=0.1;
k22=3*10^6; k_22=0.064;
k23=01; k_23=2.1*10^7;
k24=9*10^6; k_24=0.0429;
kcat26=0.222 ;Km26=0.181;
Vmax28=0.289; Km28=0.0571;
k29=9.85 ;k_29=0.0985;
k30=3.6*10^7; k_30=0.05;
kcat31=1.53;Km31=11.7;
Vmax32=5*10^-6;Km32=3.3*10^-9;
kcat33=9*10^-9;Km33=4*10^-9;
Vmax35=5*10^-6;Km35=3.3*10^-7;
kcat37=0.138; Km37=6*10^-8;
Vmax39=6*10^-6;Km39=1*10^-7;
kcat41=16.67; Km41=5.54*10^-10;
kcat42=0.1667; Km42=5.4*10^-10;
k44=0.27; k_44=2;
kcat46=16.9; Km46=39.1;
k47=509; k_47=234;
Vmax48=2*10^4; kcat48=2*10^4; Km48=8*10^5;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Équations de réaction
%
v1=k1*y(43)*y(44)-k_1*y(1);
v2=k2*y(1)*y(1)-k_2*y(2);
v3=k3*y(2)- k_3*y(3);
v4=Vmax4*((y(3)/(Km4 * y(3))));
v5=k5*y(3)*y(14)-k_5*y(11);
v6=k6*y(11)-k_6*y(12);
v7=k7*y(12)-k_7*y(3)*y(13);
v8=Vmax8 *((y(13)/(Km8+y(13))));
v9=k9*y(3)*y(19)-k_9*y(22);
v10=k10*y(22)*y(21)-k_10*y(23);
v11=k11*y(23)-k_11*y(3)*y(24);
v12=k12*y(24)-k_12*y(19)*y(21);
v13=k13*y(3)-k_13*y(25);
v14=k14*y(25)-k_14*y(26);
v15=(kcat15*y(3)*y(17))/(Km15+y(17));
v16=Vmax16*(y(18)/(Km16+y(18)));
v17=k17*y(26)-k_17*y(27);
v18=k18*y(27)-k_18*y(3)*y(29);
v19=k19*y(27)*y(21)-k_19*y(28);
v20=k20*y(28)-k_20*y(3)*y(30);
v21=k21*y(18)*y(19)-k_21*y(29);
v22=k22*y(29)*y(21)-k_22*y(30);
v23=k23*y(30)-k_23*y(18)*y(24);
v24=k24*y(26)-k_24*y(28);
v26=(kcat26*y(28)*y(32))/(Km26+y(32));
v27=0;
v28=Vmax28*(y(33)/(Km28+y(33)));
v29=k29*y(6)-k_29*y(3)*y(20);
v31=(kcat31*y(33)*y(34))/(Km31+y(34));
v32=Vmax32*(y(35)/(Km32+y(35)));
v33=(kcat33*y(35)*y(37))/(Km33+y(37));
v34=(kcat33*y(38)*y(35))/(Km33+y(38));
v35=Vmax35*(y(38)/(Km35+y(38)));
v36=Vmax35*(y(39)/(Km35+y(39)));
v37=(kcat37*y(39)*y(40))/(Km33+y(40));
v38=(kcat37*y(39)*y(41))/(Km33+y(41));
v39=Vmax39*(y(41)/(Km39+y(41)));
v40=Vmax39*(y(42)/(Km39+y(42)));
v41=(kcat41*y(23)*y(32))/(Km41+y(32));
v43=0;
v44=k44*y(4)*y(31)-k_44*y(5);
v46=kcat46*y(20)*y(31)/Km46+y(20);
v47=k47*y(7)*y(45)*y(47)-k_47*y(8);
v48=Vmax48*y(8)/(Km48*(1+(y(9)/kcat48)+y(8)));
v49=0;
v50=0;
v51=0;
v52=v36;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Équations différentielles
dydt=zeros(47,1);
dydt(1)=v1-v2;
dydt(2)=v2+v3-v4;
dydt(3)=v4-v3-v5-v9-v13-v27+v7+v11+v15+v18+v20+v29;
dydt(4)=v43-v44;
dydt(5)=v44-v27;
dydt(6)=v27-v46;
dydt(7)=v46-v47;
dydt(8)=v47-v8;
dydt(9)=v8;
dydt(10)=-v46-v49;
dydt(11)=v5-v6;
dydt(12)=v6-v7-v49;
dydt(13)=v7-v8;
dydt(14)=v8-v5;
dydt(15)=v49;
dydt(16)=v49;
dydt(17)=v16-v13;
dydt(18)=v15+v33-v16;
dydt(19)=v12-v9-v17-v21;
dydt(20)=v29-v46;
dydt(21)=v12-v10-v22;
dydt(22)=v9-v10;
dydt(23)=v10-v11-v41;
dydt(24)=v11-v12+v23;
dydt(25)=v13-v14;
dydt(26)=v14-v17-v15-v24;
dydt(27)=v17-v18-v19;
dydt(28)=v19+v24-v26-v20-v26;
dydt(29)=v21-v18-v22;
dydt(30)=v22-v20-v23;
dydt(31)=-v44;
dydt(32)=v26+v41-v28+v31;
dydt(33)=v28-v26;
dydt(34)=v31-v32;
dydt(35)=v31-v32-v33-v34;
dydt(36)=-v46;
dydt(37)=v35-v33;
dydt(38)=v33-v34-v35;
dydt(39)=v34-v36-v37-v38-v50;
dydt(40)=v39-v37;
dydt(41)=v37-v38-v39-v40;
dydt(42)=v38-v40;
dydt(43)=-v1;
dydt(44)=-v1;
dydt(45)=-v47;
dydt(46)=-v43;
dydt(47)=-v47; |
Tout compile bien orsque je lance PFE.m, mais j'obtiens des NaN comme réponse ?