%------------------------------------------------------------------------------------------------------%
% first derivative of bvar: twopoint formula
for k=1:K+1
if k==K+1
constraint = [constraint, [(0-bvar(k))/ds(k-1) == dbvar(k)]:'Derivative last']; % endpoint
elseif k==1
constraint = [constraint, [(bvar(k+1)-0)/ds(k) == dbvar(k)]:'Derivative first']; % startpoint
else
constraint = [constraint, [(bvar(k+1)-bvar(k))/ds(k) == dbvar(k)]:'Derivative mid']; % startpoint
end
end
%------------------------------------------------------------------------------------------------------%
%------------------------------------------------------------------------------------------------------%
% second derivative of bvar: threepoint fromula
for k=1:K+1
if k==1
constraint = [constraint, ...
[( 2*bvar(k)/(ds(k)*(ds(k)+ds(k+1))) -2*bvar(k+1)/(ds(k)*ds(k+1)) +2*bvar(k+2)/(ds(k+1)*(ds(k)+ds(k+1))) )...
== ddbvar(k)]: 'DDerivative first']; % startpoint
elseif k>=2 && k<=K
constraint = [constraint, ...
[( 2*bvar(k-1)/(ds(k-1)*(ds(k-1)+ds(k))) -2*bvar(k)/(ds(k-1)*ds(k)) +2*bvar(k+1)/(ds(k)*(ds(k-1)+ds(k))) )...
== ddbvar(k)]: 'DDerivative mid']; % midpoin
elseif k==K+1
constraint = [constraint, ...
[( 2*bvar(k-2)/(ds(k-2)*(ds(k-2)+ds(k-1))) -2*bvar(k-1)/(ds(k-2)*ds(k-1)) +2*bvar(k)/(ds(k-1)*(ds(k-1)+ds(k-2))) )...
== ddbvar(k)]: 'DDerivative last']; % endpoint
end
end
%------------------------------------------------------------------------------------------------------%