加速子空间迭代法(Accelerated Subspace Iteration)求特征值问题matlab程序
2017-07-27 21:31
495 查看
最基本的特征值问题分为三类:
1、标准的线性特征值问题:
Ax=λx,A∈Cn∗n
2、普遍的线性特征值问题:
Ax=λBx,A、B∈Cn∗n
3、普遍的艾米特正定线性特征值问题:
Ax=λBx,A、B∈Cn∗n
A∗=A,B∗=B>0∈Cn∗n
下面给出用加速子空间迭代法求解特征值问题的matlab代码:
A是输入的大规模矩阵,求出来的EE和VV蕴含了部分的特征值和特征向量。程序中的所使用的FILTER可以改变。barbell.mat包含的数据如下形式:
运行结果示例:
1、标准的线性特征值问题:
Ax=λx,A∈Cn∗n
2、普遍的线性特征值问题:
Ax=λBx,A、B∈Cn∗n
3、普遍的艾米特正定线性特征值问题:
Ax=λBx,A、B∈Cn∗n
A∗=A,B∗=B>0∈Cn∗n
下面给出用加速子空间迭代法求解特征值问题的matlab代码:
% Demo routines for the subspace iteration with Rayleigh-Ritz projection. rng(0); load barbell.mat; % A matrix pencil arising from solving the Laplacian eigenvalue % problem in a barbell shaped domain. n = size(A,1); % matrix size J = 5; % subspace size %FILTER = 'Exact spectral projector'; FILTER = 'Power iteration'; %FILTER = 'Multi-step power iteration'; % --- Define filters switch FILTER case 'Exact spectral projector' % 1. rhoM(Q) = exact projector [V, E] = eigs(A, B, J); L = chol(V' * B * V); V = V / L'; % B orthonormalization rhoM = @(Q) V*(V'*(B*Q)); case 'Power iteration' % 2. rhoM(Q) = M*Q. [L, U, P] = lu(B); rhoM = @(Q) U\(L\(P*(A*Q))); case 'Multi-step power iteration' % 3. rhoM(Q) = M*M*Q. [L, U, P] = lu(B); rhoM0 = @(Q) U\(L\(P*(A*Q))); rhoM = @(Q) rhoM0( rhoM0(Q) ); otherwise error('TESTING CASE NOT FOUND') end % Subspace iteration with Rayleigh-Ritz projection maxit = 100; resd = zeros(maxit,J); Q = randn(n,J); nA = norm(A,1); nB = norm(B,1); for j=1:maxit Y = rhoM(Q); AA = Y' * (A * Y); BB = Y' * (B * Y); [VV, EE] = eig(AA, BB, 'chol'); BBB = VV' * BB * VV; BBB = (BBB+BBB')/2; LL = chol(BBB); VV = VV / LL'; % B orthonormalization Q = Y * VV; % evaluate relative residual norm of each Ritz pair for jj = 1:J r = A*Q(:,jj) - B*Q(:,jj) * EE(jj,jj); res = norm(r) / norm(Q(:,jj)) / (nA + nB*abs(EE(jj,jj))); resd(j,jj) = res; end end % residual plot figure semilogy(sort(resd')', '+') xlabel('iteration') ylabel('relative residual norms') title(FILTER); % eigenvalue plot figure ee = eig(full(A),full(B)); plot(real(ee), imag(ee), 'or', 'DisplayName', 'exact eigval'); hold on; eec = diag(EE); plot(real(eec), imag(eec), '+b', 'DisplayName', 'computed eigval'); legend show; title(FILTER); %END %
A是输入的大规模矩阵,求出来的EE和VV蕴含了部分的特征值和特征向量。程序中的所使用的FILTER可以改变。barbell.mat包含的数据如下形式:
运行结果示例:
相关文章推荐
- 降维(子空间学习)的matlab代码程序 Matlab codes for dimensionality reduction (subspace learning)
- 特征值问题的有限元MATLAB程序(一维)
- .解决带迅盘的机器WIN7关机速度慢的问题(去掉 ReadyBoost),怎样用询盘加速程序运行(装turbo momery dashboard)
- 安装及调用Matlab程序可能存在的问题解决办法
- 最速下降法求特征值matlab程序
- TSP问题遗传算法通用Matlab程序
- 四阶龙格-库塔法求解常微分方程的初值问题-matlab通用程序
- eclipse调试java调用matlab程序的7.17dll找不到的问题
- 关于matlab程序打包成exe可执行文件或者jar包的常见问题
- 如何分析matlab程序的主要效率问题
- MATLAB中常见的程序出错问题整理
- 解决matlab中无法调用c程序的问题
- 使用MATLAB自带函数求解二次特征值问题
- 编写高阶统计量的Matlab程序的一些问题
- matlab程序运行eig函数时问题
- MATLAB程序运行中会出现的问题
- 对ChiMerge问题的解析与程序实现(matlab)
- 牛顿迭代法求方程根的MATLAB程序
- 雅克比(Jacobi)迭代法解线性方程组(Matlab程序)
- 艾特肯加速法求方程根的MATLAB程序