Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function f=minf(C,k)
- % c = numero al que se quiere que converja la funcion
- % k = numero que determina el paso h (h=2^k)
- % e = error con el que se evaluara la convergencia
- e=0.0001;
- % ad = paso con el que se busca f
- ad=0.0001;
- % Haremos una recta en 1 y=1 para mostrar que la aproximacion
- % no puede converger a 1
- w=1:800;
- z=ones(1,length(w));
- plot(w,z,'green-')
- % h= paso del metodo de Euler Modificado
- h=(2^k);
- % Se elige f inicial 0.0175 pues desde ese punto la EDO
- % aproximada no se va a -infinito
- f=0;
- % Elegimos un un valor de f donde se detendra la busqueda
- % para que no sea un loop infinito la busqueda en caso que
- % no exista f tal que la Edo converge. Elegimos 4 pues si
- % no encontramos f antes tampoco lo encontraremos despues
- % pues con 4 la EDO converge a más de 3
- while f<=4
- hold on
- % Se hace una aproximacion a la EDO para verificar si con f
- % la aproximacion converge a C, guardamos la aproximacion en
- % Y
- [T,Y]=EM(0,0.1,f,k);
- plot(T,Y,'-')
- xlim([0 800]);
- ylim([-2 2]);
- % La revision de "convergencia" parte de n=1
- n=1;
- % Se utilizan n's hasta el que indexa al penultimo elemento de
- % Y
- while h*n<800
- % Se verifica que el n-esimo termino de Y este "cerca" de
- % C y del siguiente termino
- if (C-e)<=Y(n) && Y(n)<=(C+e) && (Y(n)-e)<=Y(n+1)&& Y(n+1)<=(Y(n)+e)
- % Se verifica que cada elemento que sigue del que cumplió
- % la condicion anterior este "cerca" de C
- while (C-e)<=Y(n) && Y(n)<=(C+e)
- % si hasta el ultimo termino de Y se culple lo anterior
- % se concluye que la aproximacion converge a C
- if n*h==800
- return
- end
- % Se aumenta el indice n para iterar
- n=n+1;
- end
- end
- % Se aumenta el indice n para iterar
- n=n+1;
- end
- % Si la aproximacion no "converge" buscamos un f aumentado
- % en ad y se verifica si converge a C
- f=f+ad
- end
- end
- -------------------------------------------------------------------------------------------------------------------------------
- function [T,Y]=EM(u0,a,f,k)
- % u0 = condicion inicial;
- % a = alpha
- % f = numero real de la EDO
- % k = numero k, con el que se obtiene el paso h( h=2^k)
- % L = hasta donde se aproxima la EDO
- L=800;
- % c = constante de la EDO
- c=0.175;
- % h = paso de la aproximacion
- h=2^k;
- % T = vector que contiene los t con que se evalua la
- %funcion solucion de la Edo
- T=0:h:L;
- %Y= vector que contiene los valores aproximados
- % de la EDO evaluados en x
- Y=zeros(1,length(T));
- % Se añade condicion inicial al vector Y
- Y(1)=u0;
- % Se establece u0 como primer valor de y
- y=u0;
- % Se itera hasta llegar a L
- for n=1:length(T)-1
- % Se calcula el valor del integrando en el punto medio
- % del intervalo [n*h,(n+1)*h]
- Yy=y+(h/2)*(c*(y-a)*(1-y)+f);
- % Se calcula y(n+1) valor de la aproximacion de la EDO
- % usando Yy
- y=y+h*(c*(Yy-a)*(1-Yy)+f);
- % Se agrega aproximacion n+1-esimo de y al vector Y
- Y(n+1)=y;
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement