function [k, X, Y, pasos] = vnbiseccion(F, signoX, signoXF, ksi, kno)1%vnbiseccion2% [k, X, Y] = vnbiseccion(F)3%4% Busca la soluci�n de VN con el m�todo de bisecci�n. Se parte de un5% ksi para el que existe un crecimiento proporcional y de un kno mayor6% que ksi para el que no. Se procede comprobando si en el medio del7% intervalo [ksi, kno) existe un crecimiento proporcional y bisecando el8% intervalo en consecuencia hasta que kno-ksi sea menor que una cota.9%10% [k, X, Y] = vnbiseccion(F, signoX, signoXF, ksi, kno)11% F recetas en tiempo discreto o continuo12% signoX signo de las intensidades; por defecto X >= 013% signoXF signo de los balances materiales; por defecto X F(k) = 014% ksi factor para el que existe un crecimiento proporcional15% kno factor, mayor que ksi, para el que no existe16% k, X, Y factor, intensidades y valores soluci�n.17%18% Los c�digos para los signos son 0 = 1 >= 2 <= 3 >=<1920% necesita cpdistancia.m, forma0.m2122if nargin < 2, signoX = []; end23if nargin < 3, signoXF = []; end24if nargin < 4, ksi = []; end25if nargin < 5, kno = []; end2627cero = 1e-14; %define la precisi�n del cero28if isempty(ksi), ksi = 0.01; end %si no est� definido define ksi como 0.0129if isempty(kno), kno = 100; end %si no est� definido define kno como 10030for pasos = 1:100 %inicia una iteraci�n de hasta 100 pasos31k = (ksi + kno) / 2; %k es el punto medio del intervalo [ksi, kno)32[u, X, Y] = cpdistancia(forma0(F,k), signoX, signoXF); %calcula si existe un crecimiento proporcional para k33if u >= -cero, ksi = k; else kno = k; end %si existe el intervalo queda [k, kno) y si no [ksi, k)34if abs(kno-ksi) < cero; return, end %si kno-ksi es inferior a una cota interrumpe35end %repite la iteraci�n36disp('Atenci�n, se super� el m�ximo de iteraciones'); %avisa de que se ha superado el m�ximo de iteraciones373839