Matlab - hallar una función

 
Vista:

hallar una función

Publicado por Mathias (2 intervenciones) el 22/10/2020 03:00:14
Hola. Me encuentro en un dilema. Estoy elaborando un trabajo para cálculo avanzado y nos dan un sistema de ecuaciones, para los cuales nos piden hallar una función para distintos valores de una variable:

el sistema: P(n) = P(n-1)*(1-0.01*P(n-1))-0.001*P(n-1)*D(n-1);
D(n) = r*D(n-1)*(1-0.01*D(n-1))-0.001*D(n-1)*P(n-1);

Supninedo que Po=Do=20 y r variable.

Entonces el código en matlab que escribimos es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function aaa2(r,N)
 
 
a= 20; %Poblacion inicial de los predadores.
b= 20; %Poblacion inicial de las presas.
flag = 0;
 
while (flag==0) %definimos un bucle para que siga pidiendo valores de r2 y N
N = input('N(cantidad de generaciones)=:  ') %cantidad de generaciones
r = input('ingrese el r (0 para terminar)=: '); %el r
P(1)=a;%guardo en el primer lugar del vector x el tamaño inicial, por medio de un for calculo iterativamente los tamaños poblacionales
D(1)=b; %lo mismo q antes pero con la otra funcion
t(1)=0;
 
figure; axes;  hold on;
xlim([0 N]); 'auto y'; %Rango de ejes
 
 
 
title 'Comportamiento del sistema para diferentes valores de r2' %título del gráfico
xlabel 'semanas(N-iteraciones)'
ylabel 'N0 clientes'
 
    for n = 2:N;
        t(n) = n-1;
        P(n) = P(n-1)*(1-0.01*P(n-1))-0.001*P(n-1)*D(n-1);
        D(n) = r*D(n-1)*(1-0.01*D(n-1))-0.001*D(n-1)*P(n-1);
    end
 
 
plot(t,P, '-ro') % circulos  rojos van a ser para P
plot(t,D, '--bo') % circulos azules van a ser para D
legend ('empresa P','empresa D') %nombre de las series
 
 
 
end


De esta forma siempre nos pide un valor de iteraciones N y de r, y va graficando.
El asunto es que quiero hallar las ecuaciones, las funcones que ajustan a esas curvas, ya que me pide que halle una función

Alguien que pueda ayudarme?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jon
Val: 354
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

hallar una función

Publicado por Jon (161 intervenciones) el 22/10/2020 08:44:28
Hola Mathias,

He probado tu programa con N=10 y r=0, obteniendo el siguiente gráfico:

Grafico

Para obtener la función de las curvas, MATLAB ofrece una ToolBox llamada Curve Fitting que puede ser de utilidad en este caso. Eso sí, esta herramienta se abre manualmente y se realiza el ajuste de los puntos a una línea, polinomio de X grado, etc.

De este modo, la función de la empresa P podría ser la siguiente:

Ajuste_P

En cambio, en el caso de la empresa D la función tendría que ser por partes:

Ajuste_D

El mayor inconveniente de estas regresiones es que las tienes que hacer a mano. No conozco cómo automatizar este proceso (quitando las regresiones polinómicas que las puedes hacer con la función polyfit), pero puedes mirar la función fitnlm de MATLAB: https://es.mathworks.com/help/stats/fitnlm.html.

Un saludo,

Jon
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

hallar una función

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 22/10/2020 18:09:20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function aaa2(r,N)
if  nargin==0
    r=5;
    N=6;
end
 
 
a= 20; %Poblacion inicial de los predadores.
b= 20; %Poblacion inicial de las presas.
flag = 0;
 
%while (flag==0) %definimos un bucle para que siga pidiendo valores de r2 y N
%N = input('N(cantidad de generaciones)=:  ') %cantidad de generaciones
%r = input('ingrese el r (0 para terminar)=: '); %el r
P(1)=a;%guardo en el primer lugar del vector x el tamaño inicial, por medio de un for calculo iterativamente los tamaños poblacionales
D(1)=b; %lo mismo q antes pero con la otra funcion
t(1)=0;
 
figure; axes;  hold on;
xlim([0 N]); 'auto y'; %Rango de ejes
 
title 'Comportamiento del sistema para diferentes valores de r2' %título del gráfico
xlabel 'semanas(N-iteraciones)'
ylabel 'N0 clientes'
 
    for n = 2:N
        t(n) = n-1;
        P(n) = P(n-1)*(1-0.01*P(n-1))-0.001*P(n-1)*D(n-1);
        D(n) = r*D(n-1)*(1-0.01*D(n-1))-0.001*D(n-1)*P(n-1);
    end
 
plot(t,P, '-ro') % circulos  rojos van a ser para P
plot(t,D, '--bo') % circulos azules van a ser para D
legend ('empresa P','empresa D') %nombre de las series
 CP=polyfit(t,P,N-1);
 syms x
 Pol1(x)=poly2sym(CP);
 
 CD=polyfit(t,D,N-1);
 Pol2(x)=poly2sym(CD);
 disp('Polinomio para P')
 pretty(Pol1)
 disp('Polinomio para D')
 pretty(Pol2)
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

hallar una función

Publicado por Mathias (2 intervenciones) el 22/10/2020 20:53:12
Hola muchas gracias. Lo terminé descubriendo. Entonces lo que hice está bien. Para r entre 0 y 4 hallé distintos comportamientos.
Lo que creí que pedía era que hallara una función como cuando hay que resolver un sistema de ODE, pero estas son funciones de variable discretas jaja

Gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar