Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.11 KB | None | 0 0
  1. function f=minf(C,k)
  2. % c = numero al que se quiere que converja la funcion
  3. % k = numero que determina el paso h (h=2^k)
  4. % e = error con el que se evaluara la convergencia
  5. e=0.0001;
  6. % ad = paso con el que se busca f
  7. ad=0.0001;
  8. % Haremos una recta en 1 y=1 para mostrar que la aproximacion
  9. % no puede converger a 1
  10. w=1:800;
  11. z=ones(1,length(w));
  12. plot(w,z,'green-')
  13. % h= paso del metodo de Euler Modificado
  14. h=(2^k);
  15. % Se elige f inicial 0.0175 pues desde ese punto la EDO
  16. % aproximada no se va a -infinito
  17. f=0;
  18. % Elegimos un un valor de f donde se detendra la busqueda
  19. % para que no sea un loop infinito la busqueda en caso que
  20. % no exista f tal que la Edo converge. Elegimos 4 pues si
  21. % no encontramos f antes tampoco lo encontraremos despues
  22. % pues con 4 la EDO converge a más de 3
  23. while f<=4
  24.     hold on
  25.     % Se hace una aproximacion a la EDO para verificar si con f
  26.     % la aproximacion converge a C, guardamos la aproximacion en
  27.     % Y
  28.     [T,Y]=EM(0,0.1,f,k);
  29.     plot(T,Y,'-')
  30.     xlim([0 800]);
  31.     ylim([-2 2]);
  32.     % La revision de "convergencia" parte de n=1
  33.     n=1;
  34.     % Se utilizan n's hasta el que indexa al penultimo elemento de
  35.     % Y
  36.     while h*n<800
  37.         % Se verifica que el n-esimo termino de Y este "cerca" de
  38.         % C y del siguiente termino
  39.         if (C-e)<=Y(n) && Y(n)<=(C+e) && (Y(n)-e)<=Y(n+1)&& Y(n+1)<=(Y(n)+e)
  40.             % Se verifica que cada elemento que sigue del que cumplió
  41.             % la condicion anterior este "cerca" de C
  42.             while (C-e)<=Y(n) && Y(n)<=(C+e)
  43.                 % si hasta el ultimo termino de Y se culple lo anterior
  44.                 % se concluye que la aproximacion converge a C
  45.                 if n*h==800
  46.                     return
  47.                 end
  48.                 % Se aumenta el indice n para iterar
  49.                 n=n+1;
  50.             end
  51.         end
  52.         % Se aumenta el indice n para iterar
  53.         n=n+1;
  54.     end
  55.     % Si la aproximacion no "converge" buscamos un f aumentado
  56.     % en ad y se verifica si converge a C
  57.     f=f+ad
  58. end
  59. end
  60.  
  61. -------------------------------------------------------------------------------------------------------------------------------
  62.  
  63. function [T,Y]=EM(u0,a,f,k)
  64. % u0 = condicion inicial;
  65. % a = alpha
  66. % f = numero real de la EDO
  67. % k = numero k, con el que se obtiene el paso h( h=2^k)
  68. % L = hasta donde se aproxima la EDO
  69. L=800;
  70. % c = constante de la EDO
  71. c=0.175;
  72. % h = paso de la aproximacion
  73. h=2^k;
  74. % T = vector que contiene los t con que se evalua la
  75. %funcion solucion de la Edo
  76. T=0:h:L;
  77. %Y= vector que contiene los valores aproximados
  78. % de la EDO evaluados en x
  79. Y=zeros(1,length(T));
  80. % Se añade condicion inicial al vector Y
  81. Y(1)=u0;
  82. % Se establece u0 como primer valor de y
  83. y=u0;
  84. % Se itera hasta llegar a L
  85. for n=1:length(T)-1
  86.     % Se calcula el valor del integrando en el punto medio
  87.     % del intervalo [n*h,(n+1)*h]
  88.     Yy=y+(h/2)*(c*(y-a)*(1-y)+f);  
  89.     % Se calcula y(n+1) valor de la aproximacion de la EDO
  90.     % usando Yy
  91.     y=y+h*(c*(Yy-a)*(1-Yy)+f);
  92.     % Se agrega aproximacion n+1-esimo de y al vector Y
  93.     Y(n+1)=y;
  94. end
  95. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement