⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lan.m

📁 用于在matlab平台上进行有限元分析
💻 M
字号:
 function [Q,T,beta_first,beta_res] = lan(K,M,f,m)%--------------------------------------------------------------------------%  SYNTAX  [Q,T,beta_first,beta_res] = lan(K,M,f,m)%%  PURPOSE%     Transform a pair of matrices (K,M) with size n%     to tridiagonal form with size m%%  REFERENCES%     Written: H Carlsson 1993-02-03%     Revised: H Carlsson 1993-09-19%%  INPUT:%     K : Non-singular stiffness matrix%     M : Positive semi-definite mass matrix  %     f : Starting vector%     m : number of Lanczos vectors%%  OUTPUT:%     Q : n x m matrix containing the Lanczos vectors%     T : m x m Tridiagonal matrix %     beta_first : normalization factor for first Lanczos vector%     beta_res : norm of residual vector %%-------------------------------------------------------------------------%% LAST MODIFIED: H Carlsson 1993-09-19% Copyright (c)  Division of Structural Mechanics and%                Department of Solid Mechanics.%                Lund Institute of Technology%-------------------------------------------------------------------------[nr,nc] = size(K);Q = zeros(nr,m);T = zeros(m,m);%% 0. Factorize K[L,U] = lu(K);%% 1. First Lanczos vector and residual%y = L\f;r = U\y;pbar = M*r;beta_first = sqrt(pbar'*r);%Q(:,1) = r/beta_first;p=pbar/beta_first;y = L\p;rbar = U\y;%%alfa = p'*rbar;r = rbar - alfa*Q(:,1);pbar = M*r;beta = sqrt(pbar'*r);T(1,1) = alfa;T(2,1) = beta;T(1,2) = beta; %% 2. Lanczos vectors 2 to m%for j = 2:m%% Full reorthogonalization %   for i = 1:j-2      zold  = Q(:,i)'*p;      Q(:,j-1) = Q(:,j-1) - zold*Q(:,i);      z  = Q(:,i)'*pbar;      r = r - z*Q(:,i);   end   z = pbar'* Q(:,j-1);    r = r - z*Q(:,j-1);   p = M*Q(:,j-1);   qnorm = p'*Q(:,j-1);   p = p/qnorm;   Q(:,j-1) = Q(:,j-1)/qnorm;   T(j-1,j) =  T(j-1,j)*qnorm;   T(j,j-1) =  T(j,j-1)*qnorm;   z = r'*p;   T(j-1,j-1) = T(j-1,j-1) + z ;      r = r - z*Q(:,j-1);   pbar = M*r;   beta = sqrt(pbar'*r);%   Q(:,j) = r/beta;   p = pbar/beta;   y = L\p;   rbar = U\y;   rroof = rbar - beta*Q(:,j-1);   alfa = p'*rroof;   r = rroof - alfa*Q(:,j);   pbar = M*r;   beta = sqrt(pbar'*r);   T(j,j) = alfa;   if j ~= m       T(j+1,j) = beta;     T(j,j+1) = beta;   else     beta_res = beta;   endend%----------------------- end ---------------------------------- 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -