Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
162 views
1
function [k, X, Y, pasos] = vnbiseccion(F, signoX, signoXF, ksi, kno)
2
%vnbiseccion
3
% [k, X, Y] = vnbiseccion(F)
4
%
5
% Busca la soluci�n de VN con el m�todo de bisecci�n. Se parte de un
6
% ksi para el que existe un crecimiento proporcional y de un kno mayor
7
% que ksi para el que no. Se procede comprobando si en el medio del
8
% intervalo [ksi, kno) existe un crecimiento proporcional y bisecando el
9
% intervalo en consecuencia hasta que kno-ksi sea menor que una cota.
10
%
11
% [k, X, Y] = vnbiseccion(F, signoX, signoXF, ksi, kno)
12
% F recetas en tiempo discreto o continuo
13
% signoX signo de las intensidades; por defecto X >= 0
14
% signoXF signo de los balances materiales; por defecto X F(k) = 0
15
% ksi factor para el que existe un crecimiento proporcional
16
% kno factor, mayor que ksi, para el que no existe
17
% k, X, Y factor, intensidades y valores soluci�n.
18
%
19
% Los c�digos para los signos son 0 = 1 >= 2 <= 3 >=<
20
21
% necesita cpdistancia.m, forma0.m
22
23
if nargin < 2, signoX = []; end
24
if nargin < 3, signoXF = []; end
25
if nargin < 4, ksi = []; end
26
if nargin < 5, kno = []; end
27
28
cero = 1e-14; %define la precisi�n del cero
29
if isempty(ksi), ksi = 0.01; end %si no est� definido define ksi como 0.01
30
if isempty(kno), kno = 100; end %si no est� definido define kno como 100
31
for pasos = 1:100 %inicia una iteraci�n de hasta 100 pasos
32
k = (ksi + kno) / 2; %k es el punto medio del intervalo [ksi, kno)
33
[u, X, Y] = cpdistancia(forma0(F,k), signoX, signoXF); %calcula si existe un crecimiento proporcional para k
34
if u >= -cero, ksi = k; else kno = k; end %si existe el intervalo queda [k, kno) y si no [ksi, k)
35
if abs(kno-ksi) < cero; return, end %si kno-ksi es inferior a una cota interrumpe
36
end %repite la iteraci�n
37
disp('Atenci�n, se super� el m�ximo de iteraciones'); %avisa de que se ha superado el m�ximo de iteraciones
38
39