Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
162 views
1
function [k, X, Y, pasos] = vnnewton(F, signoX, signoXF, k)
2
%vnnewton
3
% [k, X, Y] = vnnewton(F)
4
%
5
% busca la soluci�n de VN intentando resolver la ecuaci�n u(k) = 0
6
% mediante el m�todo de Newton, donde u(k) es la distancia al crecimiento
7
% proporcional establecida como el valor del juego para la matriz de
8
% pagos F(k) convertida a la forma can�nica.
9
%
10
% [k, X, Y] = vnnewton(F, signoX, signoXF, k0)
11
% F recetas en tiempo discreto o continuo
12
% signoX signo de las intensidades; por defecto X >= 0
13
% signoXF signo de los balances materiales; por defecto X F(k) = 0
14
% k0 factor con el que se inicia la iteraci�n; por defecto 1
15
% k, X, Y factor, intensidades y valores soluci�n
16
%
17
% Los c�digos para los signos son 0 = 1 >= 2 <= 3 >=<
18
19
% necesita cpdistancia.m, forma0.m, forma1.m
20
21
if nargin < 2, signoX = []; end
22
if nargin < 3, signoXF = []; end
23
if nargin < 4, k = []; end
24
25
cero = 1e-14; %define la precisi�n del cero
26
if isempty(k), k = 1; end %si no est� definida, define k como 1
27
for pasos = 1:100 %inicia una iteraci�n de hasta 100 pasos
28
kmem = k; %almacena la magnitud de k
29
[u, X, Y] = cpdistancia(forma0(F,k), signoX, signoXF); %calcula la distancia al crecimiento proporcional
30
du = X * forma1(F, k) * Y; %establece la derivada de la distancia = X F'(k) Y
31
if abs(du)<cero, disp('Atenci�n, derivada nula'); return; end %si la derivada es nula avisa e interrumpe
32
k = k - u / du; %establece la nueva k
33
if k <= 0, disp('Atenci�n, factor no positivo'); return; end %si el nuevo factor no es positivo avisa e interrumpe
34
if abs(kmem - k) < cero; return, end %si k cambia poco interrumpe
35
end %repite la iteraci�n
36
disp('Atenci�n, se ha superado el m�ximo de iteraciones'); %avisa de que se ha superado el m�ximo de iteraciones
37
38