function F = formapolinomioinverso(nombrefuncion, K, grado, X)1%formapolinomioinverso2% F = formapolinomioinverso(funcion)3%4% Construye una aproximaci�n en forma de recetas en tiempo discreto de5% unas recetas en tiempo continuo, definidas en un script o con el6% comando inline; un ejemplo de este ultimo caso seria7% F = inline('[-280+575/k,-12; -120,-8+20/k; -280+400/k, -12]')8%9% F = formapolinomioinverso(funcion, K, grado)10% funcion nombre de la funci�n con las recetas en tiempo continuo11% K factores sobre los que se calcula la aproximaci�n12% grado n�mero de pasos temporales para el tiempo discreto13% F aproximaci�n con recetas en tiempo discreto14%15% Si K es un escalar la aproximaci�n se hace en el intervalo [K/2, K*3/2]1617if nargin < 2, K = []; end18if nargin < 3, grado = []; end19if nargin < 4, X = []; end2021if isempty(K), K = 1; end %si K no est� definido es 122if size(K(:),1) == 1, K = (K/2:K/5:K*3/2); end %si K es un escalar la aproximaci�n se efectua en [K/2, K*3/2] con 6 puntos23puntos = size(K, 2); %determina el n�mero de factores para los que se hace la aproximaci�n24if isempty(grado), grado = fix((puntos+3)/2); end %define el grado del polinomio inverso por defecto25if grado > puntos, grado = puntos; end %el grado debe ser menor o igual al numero de puntos analizados26%27if isempty(X) %si el problema est� escrito con una matriz de flujos actualizados28F0 = feval(nombrefuncion, K(1)); %calcula la magnitud de los flujos actualizados para K(1)29else %si el problema est� escrito con funciones de producci�n actualizadas30F0 = feval(nombrefuncion, K(1), X); %calcula la magnitud de los flujos actualizados para K(1) y X31end %32[filas, columnas] = size(F0); %establece el tama�o del problema33Fk = zeros(filas, columnas, puntos); %crea la variable para almacenar los resultados34Fk(:, :, 1) = F0; %almacena la magnitud de los flujos actualizados para K(1)35for c1 = 2:puntos %para el resto de K analizadas36if isempty(X) %si el problema est� escrito con una matriz de flujos actualizados37Fk(:,:,c1) = feval(nombrefuncion, K(c1)); %calcula la magnitud de los flujos actualizados para K(1)38else %si el problema est� escrito con funciones de producci�n actualizadas39Fk(:,:,c1) = feval(nombrefuncion, K(c1), X); %calcula la magnitud de los flujos actualizados para K(1) y X40end %41end %42x = 1 ./ K; %define x como 1 / K analizadas43y = zeros(1, puntos); %define y44for c1 = 1:filas %para cada fila45for c2 = 1:columnas %para cada columna46y(:) = Fk(c1, c2, :); %extrae y47F(c1, c2, :) = ajusta(x, y, puntos, grado); %calcula los coeficientes del polinomio inverso48end %49end %50515253545556function A = ajusta(x, y, fil, col) %funci�n para el c�lculo de los coeficientes de un polinomio inverso57M = zeros(fil, col); %crea la matriz del sistema lineal58for c1 = 1:fil %para cada fila59for c2 = 1:col %para cada columna60M(c1, col-c2+1) = x(c1) .^ (col-c2); %establece la matriz61end %62end %63A = (M \ y')'; %resuelve el sistema lineal para establecer los coeficientes del polinomio646566