Está en la página 1de 2

5 El problema de frontera y + xy + y = 2x, (1 < x < 3), y(1) = 1, y'(3) = 1 tiene como solucin exacta y(x) = x.

Halle una solucin aproximada por el mtodo del disparo. Ayuda: observe que si h 0, entonces y(3) y(3 h) y(3)/h Compare con la solucin exacta y halle el mximo error cometido en la aproximacin.
En primer lugar, hemos de poner nuestra ecuacin diferencial de una forma que Matlab la entienda, as:
function z=derivada(x,y) % y''=2*x-x*y'-y z=[y(2);2*x-x*y(2)-y(1)];

Como se puede observar, hemos despejado nuestra y'' y la hemos puesto como un vector columna. Despus hemos de aplicar el algoritmo diseado en clase, varindolo ligeramente:
function [X,Y]=disparo(f,a,b,alfa,beta,n,tol,maxiter) %Proceso t0=atan((beta-alfa)/(b-a)); t1=t0-1; %por ejemplo x=(a:(b-a)/n:b); [~,Y]=ode45(f,x,[alfa,t0]); yb(1)=Y(n+1,2); [X,Y]=ode45(f,x,[alfa,t1]); yb(2)=Y(n+1,2); k=2; while abs(yb(end)-beta)>tol && k<maxiter t=t1-(yb(k)-beta)/((yb(k)-yb(k-1))/(t1-t0)); [X,Y]=ode45(f,x,[alfa,t1]); yb(k+1)=Y(n+1,2); k=k+1; t0=t1; t1=t; end

Lo que hacemos, es en primer lugar, empezar con unas condiciones iniciales t0 y t1 (como por ejemplo la arcotangente del cociente de los parmetros que introducimos en la funcin y t1= t0-1). Despus disparamos con ode45 dos veces, una para obtener yb(1) que ser el ultimo elemento de la matriz Y resultante de ode45, pero como y'(3) = 1 en vez de cogerlo de la primera columna, lo cogemos de la segunda, que corresponde a y2(xn), es decir la primera derivada de y, de ah que en el algoritmo original sea Y(n+1,1) mientras que en el nuestro es Y(n+1,2). Despus entramos en un bucle while, el cual se va acercando a nuestra solucin exacta, y que se realiza mientras la diferencia entre el ltimo elemento yb y beta sea mayor que la tolerancia introducida, y que el nmero de iteraciones sea menor que el introducido. Utilizamos la frmula de la secante, volvemos a disparar con ode45 y finalmente actualizamos los datos. As pues, en Matlab pondremos [X,Y]=disparo('derivada',1,3,1,1,20,10^-6,100); (la tolerancia ser pequea y las iteraciones muchas para acercarnos lo mximo posible) David Serrano Carrera Prctica 4 B2B MAT III

Como del enunciado tenemos que la solucin exacta es y(x) = x , podemos comparar la solucin que nos ha dado con la exacta, y la tabulamos para su mejor visionado:
>> [X';Y(:,1)']

ans = Columns 1 through 9 1.0000 1.0000 1.1000 1.1000 1.2000 1.2000 1.3000 1.3000 1.4000 1.4000 1.5000 1.5000 1.6000 1.6000 1.7000 1.7000 1.8000 1.8000

Columns 10 through 18 1.9000 1.9000 2.0000 2.0000 2.1000 2.1000 2.2000 2.2000 2.3000 2.3000 2.4000 2.4000 2.5000 2.5000 2.6000 2.6000 2.7000 2.7000

Columns 19 through 21 2.8000 2.8000 2.9000 2.9000 3.0000 3.0000

Si restamos ambos valores, el error es muy pequeo:


>> [X'-Y(:,1)']
ans = 1.0e-006 * Columns 1 through 9 0 0.1772 0.3343 0.4705 0.5857 0.6804 0.7556 0.8128 0.8535

Columns 10 through 18 0.8798 0.8935 0.8967 0.8912 0.8788 0.8611 0.8395 0.8154 0.7895

Columns 19 through 21 0.7629 0.7361 0.7097

Si, probramos con una tolerancia mayor y un nmero de iteraciones ms pequeo, la solucin sera mucho ms errnea.

David Serrano Carrera

Prctica 4 B2B

MAT III

También podría gustarte