bvp4c show Singular Jacobian Error Message

2 visualizaciones (últimos 30 días)
thiti prasertjitsun
thiti prasertjitsun el 12 de Jul. de 2019
Why Program Error -
Error using bvp4c (line 251)
Unable to solve the collocation equations -- a
singular Jacobian encountered.
Error in test_si (line 32)
sol1 = bvp4c(@addictive_ode,@addictive_bc,solinit);
close all;clear all;
% global N mu d u1 u2 k1 k2 k3 bet1 bet2 gam1 gam2 epsil1 epsil2 si;
xa=0;
xb=36;
x = linspace(xa,xb);
si = zeros(size(x));
for i = 1:length(x)
if x(i) >= xa & x(i)<=12;
si(i)=0.1526.*x(i).^2-2.5131.*x(i)+83.543;
elseif x(i)>12 & x(i)<=24;
si(i)=0.0005*x(i).^6-0.0171*x(i).^5+0.2288*x(i).^4-1.4429*x(i).^3+4.5116*x(i).^2-7.4376*x(i)+79.707;
else x>24;
si(i)=-0.0054*x(i).^4+0.1722*x(i).^3-1.7406*x(i).^2+6.3251*x(i)+69.433;
end
end
% si = 0.1526*x.^2-2.5131*x+83.543;
% si = 0.0005*x.^6-0.0171*x.^5+0.2288*x.^4-1.4429*x.^3+4.5116*x.^2-7.4376*x+79.707;
mu = 0.000833;
d = 0.000666;
epsil1 = 0.0020;
epsil2 = 0.000634;
bet1 = 0.002453;
bet2 = si*(0.25*0.02);
gam1 = 0.0048;
gam2 = si*(0.25*0.02)+0.00013;
k1 = 1;
k2 = 1.5;
k3 = 0.01;
% xa=0;
% xb=24;
solinit = bvpinit(linspace(xa,xb,100),[50 60 100 10 15 50]);
sol1 = bvp4c(@addictive_ode,@addictive_bc,solinit);
sol2 = bvp4c(@addictive_ode1,@addictive_bc,solinit);
% x = linspace(xa,xb);
y = deval(sol1,x);
y1 = deval(sol2,x);
for i=1:size(sol2.x,2)
N=sol2.y(1,i)+sol2.y(2,i)+sol2.y(3,i);
u1(i)=min(max(0,(((sol2.y(4,i)-sol2.y(5,i))*(sol2.y(1,i)*sol2.y(3,i)))/(2*k2*N))),1.0);
u2(i)=min(max(0,(((sol2.y(5,i)-sol2.y(6,i))*(sol2.y(2,i)*sol2.y(3,i)))/(2*k3*N))),1.0);
end
figure()
plot(x,y(3,:),'LineWidth',2.5) ,hold on
plot(x,y1(3,:),'-.','LineWidth',2.5)
plot(x,y1(2,:),'-.','LineWidth',2.5)
plot(x,y(2,:),'LineWidth',2.5)
xlabel('time','interpreter','latex')
% title('Evolution of $S$ and $A$','interpreter','latex')
legend('$A$ w/o c.','$A$ with c.','$S$ with c.','$S$ w/o c.',...
'Location','Best','interpreter','latex')
axis([0 xb 0 1])
figure()
plot(x,y(1,:),'LineWidth',2.5) ,hold on
plot(x,y1(1,:),'-.','LineWidth',2.5)
axis([0 xb 0 .5])
xlabel('time','interpreter','latex')
% title('Evolution of $N$','interpreter','latex')
legend('$N$ w/o c.','$N$ with c.','Location','Best',...
'interpreter','latex')
% axis([0 24 0 1])
figure()
plot(sol2.x,u1,'LineWidth',2.5)
xlabel('time','interpreter','latex')
% title('Variation of the optimal control $u_1$',...
% 'interpreter','latex')
% axis([0 xb 0 6*10^-3])
figure()
plot(sol2.x,u2,'LineWidth',2.5)
xlabel('time','interpreter','latex')
% title('Variation of the optimal control $u_2$',...
% 'interpreter','latex')
axis([0 xb 0 1])
figure()
plot(x,y1(4,:),'LineWidth',2.5),hold on
plot(x,y1(5,:),'LineWidth',2.5)
plot(x,y1(6,:),'LineWidth',2.5)
legend('p_1','p_2','p_3')
% -------------------------------------------------------------
% -------------------------- Function -------------------------
% -------------------------------------------------------------
function dydx = addictive_ode(x,y)
global N mu d u1 u2 k1 k2 k3 bet1 bet2 gam1 gam2 epsil1 epsil2 si;
N = y(1)+y(2)+y(3);
xa=0;
xb=36;
% si = 0.1526*x.^2-2.5131*x+83.543;
% si = 0.0005*x.^6-0.0171*x.^5+0.2288*x.^4-1.4429*x.^3+4.5116*x.^2-7.4376*x+79.707;
si = zeros(size(x));
for i = 1:length(x)
if x(i) >= xa & x(i)<=12;
si(i)=0.1526.*x(i).^2-2.5131.*x(i)+83.543;
elseif x(i)>12 & x(i)<=24;
si(i)=0.0005*x(i).^6-0.0171*x(i).^5+0.2288*x(i).^4-1.4429*x(i).^3+4.5116*x(i).^2-7.4376*x(i)+79.707;
else x>24;
si(i)=-0.0054*x(i).^4+0.1722*x(i).^3-1.7406*x(i).^2+6.3251*x(i)+69.433;
end
end
mu = 0.000833;
d = 0.000666;
epsil1 = 0.0020;
epsil2 = 0.000634;
bet1 = 0.002453;
bet2 = si*(0.25*0.02);
gam1 = 0.0048;
gam2 = si*(0.25*0.02)+0.00013;
k1 = 1;
k2 = 1.5;
k3 = 0.01;
u1=0;
u2=0;
dydx = [(mu*N)-(d*y(1))-((bet1+u1)*(y(1)*y(3))/N)-(bet2*y(1))+(epsil2*y(3))
((bet1+u1)*(y(1)*y(3))/N)+(bet2*y(1))-(d*y(2))-((gam1+u2)*(y(2)*y(3))/N)-(gam2*y(2))+(epsil1*y(3))
((gam1+u2)*(y(2)*y(3))/N)+(gam2*y(2))-(epsil2*y(3))-(epsil1*y(3))-(d*y(3))
-y(4)*(mu-d-(bet1+u1)*(y(3)/N)+(bet1+u1)*(y(1)*y(2)/N^2)-bet2)-...
y(5)*((bet1+u1)*(y(3)/N)-(bet1+u1)*(y(1)*y(2)/N^2)+bet2+(gam1+u2)*(y(2)*y(3))/N^2)+...
y(6)*((gam1+u2)*(y(2)*y(3))/N^2)
-k1-y(4)*(mu+(bet1+u1)*(y(1)*y(3)/N^2))-...
y(5)*(-(bet1+u1)*(y(1)*y(3)/N^2)-d-(gam1+u2)*(y(3)/N)+(gam1+u2)*(y(2)*y(3)/N^2)-gam2)-...
y(6)*((gam1+u2)*(y(3)/N)-(gam1+u2)*(y(2)*y(3)/N^2)+gam2)
-y(4)*(mu-(bet1+u1)*(y(1)/N)+(bet1+u1)*(y(1)*y(2)/N^2)+epsil2)-...
y(5)*((bet1+u1)*(y(1)/N)-(bet1+u1)*(y(1)*y(2)/N^2)-(gam1+u2)*(y(2)/N)+(gam1+u2)*(y(2)*y(3)/N^2)+epsil1)-...
y(6)*((gam1+u2)*(y(2)/N)-(gam1+u2)*(y(2)*y(3)/N^2)-epsil2-d-epsil1)];
end
% -------------------------------------------------------------
% ---------------------- Function control ---------------------
% -------------------------------------------------------------
function dydx = addictive_ode1(x,y)
global N mu d u1 u2 k1 k2 k3 bet1 bet2 gam1 gam2 epsil1 epsil2 si;
N = y(1)+y(2)+y(3);
xa=0;
xb=36;
% si = 0.1526*x.^2-2.5131*x+83.543;
% si = 0.0005*x.^6-0.0171*x.^5+0.2288*x.^4-1.4429*x.^3+4.5116*x.^2-7.4376*x+79.707;
si = zeros(size(x));
for i = 1:length(x)
if x(i) >= xa & x(i)<=12;
si(i)=0.1526.*x(i).^2-2.5131.*x(i)+83.543;
elseif x(i)>12 & x(i)<=24;
si(i)=0.0005*x(i).^6-0.0171*x(i).^5+0.2288*x(i).^4-1.4429*x(i).^3+4.5116*x(i).^2-7.4376*x(i)+79.707;
else x>24;
si(i)=-0.0054*x(i).^4+0.1722*x(i).^3-1.7406*x(i).^2+6.3251*x(i)+69.433;
end
end
mu = 0.000833;
d = 0.000666;
epsil1 = 0.0020;
epsil2 = 0.000634;
bet1 = 0.002453;
bet2 = si*(0.25*0.02);
gam1 = 0.0048;
gam2 = si*(0.25*0.02)+0.00013;
k1 = 1;
k2 = 1.5;
k3 = 0.01;
u1=min(max(0,((y(4)-y(5))*y(1)*y(3))/(2*k2*N)),1.0);
u2=min(max(0,((y(5)-y(6))*y(2)*y(3))/(2*k3*N)),1.0);
dydx = [(mu*N)-(d*y(1))-((bet1+u1)*(y(1)*y(3))/N)-(bet2*y(1))+(epsil2*y(3))
((bet1+u1)*(y(1)*y(3))/N)+(bet2*y(1))-(d*y(2))-((gam1+u2)*(y(2)*y(3))/N)-(gam2*y(2))+(epsil1*y(3))
((gam1+u2)*(y(2)*y(3))/N)+(gam2*y(2))-(epsil2*y(3))-(epsil1*y(3))-(d*y(3))
-y(4)*(mu-d-(bet1+u1)*(y(3)/N)+(bet1+u1)*(y(1)*y(2)/N^2)-bet2)-...
y(5)*((bet1+u1)*(y(3)/N)-(bet1+u1)*(y(1)*y(2)/N^2)+bet2+(gam1+u2)*(y(2)*y(3))/N^2)+...
y(6)*((gam1+u2)*(y(2)*y(3))/N^2)
-k1-y(4)*(mu+(bet1+u1)*(y(1)*y(3)/N^2))-...
y(5)*(-(bet1+u1)*(y(1)*y(3)/N^2)-d-(gam1+u2)*(y(3)/N)+(gam1+u2)*(y(2)*y(3)/N^2)-gam2)-...
y(6)*((gam1+u2)*(y(3)/N)-(gam1+u2)*(y(2)*y(3)/N^2)+gam2)
-y(4)*(mu-(bet1+u1)*(y(1)/N)+(bet1+u1)*(y(1)*y(2)/N^2)+epsil2)-...
y(5)*((bet1+u1)*(y(1)/N)-(bet1+u1)*(y(1)*y(2)/N^2)-(gam1+u2)*(y(2)/N)+(gam1+u2)*(y(2)*y(3)/N^2)+epsil1)-...
y(6)*((gam1+u2)*(y(2)/N)-(gam1+u2)*(y(2)*y(3)/N^2)-epsil2-d-epsil1)];
end
% -------------------------------------------------------------
% -------------------------- Boundary -------------------------
% -------------------------------------------------------------
function res = addictive_bc(ya,yb)
res = [ya(1)-0.4897
ya(2)-0.4018
ya(3)-0.1085
yb(4)-0
yb(5)-0
yb(6)-0];
end

Respuestas (0)

Categorías

Más información sobre Ordinary Differential Equations en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by