Problema. Para matrices simétricas, algunas veces, la necesaria normalización (factor de escala) asociada al método de la potencia viene dada por el denominado cociente de Rayleigh. En concreto, se establece la recurrencia xn+1 = 1 xt Axn Axn , donde ρn = nt , ρn xn xn y bajo las condiciones habituales sobre A (matriz con un único autovalor dominante de módulo máximo λ1 ) se tiene que la sucesión (ρn ) converge prácticamente siempre a dicho λ1 . 1. Diseñe una función de Matlab que implemente el anterior método de la potencia con el cociente de Rayleigh como factor de escala. Los argumentos de entrada deben ser la correspondiente matriz A, el vector inicial x0 y el número máximo de iteraciones MaxIter. 2. Siendo N ≥ 2 un número natural y ⎡ 2 ⎢ −1 ⎢ ⎢ CN = N 2 ⎢ ⎢ ⎣ AN (t) = ∙ 10 10cN x ∈ R, considere las matrices ⎤ −1 ⎥ 2 −1 ⎥ ⎥ ... ... ... ⎥ ∈ RN×N , ⎥ 1 2 −1 ⎦ −1 2 ¸ 10ctN ∈ R(N +1)×(N +1) , BN (t) donde BN (t) = CN − 30 sen(t)IN , IN es la matriz identidad de orden N y cN = [1, 1/2, ..., 1/N]t . Para N = 4 y t = 0.2, calcule los autovalores de AN (t) con la orden eig y compruebe que la función del apartado uno aplicado a AN (t) con x0 = [1, 1, 1, 1, 1] y MaxIter = 20, 30, 40, estima varias cifras correctas del autovalor dominante de módulo máximo de AN (t). 3. Estime el autovalor dominante de módulo máximo de la matriz AN (t) con N = 103 y t = 0.2. Para ello, utilice la función del apartado uno con x0 = [1, 1, ..., 1] ∈ RN+1 y MaxIter = 100. Asimismo, estime también el autovalor dominante de módulo mínimo de dicha matriz AN (t). Para ello, utilice la correspondiente versión del método de potencia con factor de escala la componente de módulo máximo y con x0 = [1, 1, ..., 1] ∈ RN+1 y MaxIter = 100. (1) function rh0=rayleigh(A,x0,maxiter) x0=x0(:); for k=1:maxiter x=A*x0; rh0=(x0’*x)/(x0’*x0); x0=(1/rh0)*x; end (2) Primero creamos un fichero que genere la matriz AN (t). function A=matriz(N,t) e=ones(N,1); C=spdiags([-e,2*e,-e,],-1:1,N,N); C=N^2*C; d=1./(1:N)’; A=[10,10*d’;10*d,C-30*sin(t)*eye(N)]; Abordamos el apartado 2 con el correspondiente fichero de ejecución. function ap2 A=matriz(4,0.2); format long display(’Autovalores de A’) eig(A) format pause x0=ones(5,1); for k=2:4 N=10*k; autovalor=rayleigh(A,x0,N); fprintf(’N=%2.0f Estimacion=%16.15f\n’,N,autovalor) pause(0.1) end Ejecutamos el fichero. >> ap2 Autovalores de A ans = -6.255639778215888 11.561206306633474 20.069927853365435 36.772394372080086 52.011791550729470 N=20 Estimacion=52.008565124529589 N=30 Estimacion=52.011788408661957 N=40 Estimacion=52.011791547670242 2 Admitiendo los valores proporcionados por eig como vemos que con N = 20 obtenemos 3 cifras correctas, con N = 30 obtenemos 6 cifras correctas y con N = 40 obtenemos 9 cifras correctas. (3) Comenzamos con el fichero que implementa el método de potencia con factor de escala la componente de módulo máximo para el cálculo del autovalor dominante de módulo mínimo (si lo hay, claro). function autovalor=potencia_min(A,x0,maxiter) x0=x0(:); for k=1:maxiter x=A\x0; [m,j]=max(abs(x)); x0=(1/x(j))*x; end autovalor=1/(x(j)); Abordamos el apartado 3 con el correspondiente fichero de ejecución. function ap3(N,t,maxiter) A=matriz(N,t); v=eig(A); [m,j]=max(abs(v)); disp(’Autovalor dominante de módulo máximo’) fprintf(’Estimacion con eig=%20.10f\n’,v(j)) pause x0=ones(N+1,1); autovalor=rayleigh(A,x0,maxiter); fprintf(’Estimacion con rayleigh=%20.10f\n’,autovalor) pause disp(’Autovalor dominante de módulo mínimo’) [m,j]=min(abs(v)); fprintf(’Estimacion con eig=%16.15f\n’,v(j)) pause autovalor=potencia_min(A,x0,maxiter); fprintf(’Estimacion con PotMin=%16.15f\n’,autovalor) Ejecutamos el fichero. >> ap3(1e3,0.2,100) Autovalor dominante de módulo máximo Estimacion con eig= 3999984.1900333995 Estimacion con rayleigh= 3969843.3309101081 Autovalor dominante de módulo mínimo Estimacion con eig=3.779227317655030 Estimacion con PotMin=3.779227318020457 3