牛顿迭代法在求解特征值问题中的应用
牛顿迭代法在求解特征值问题中的应用牛顿迭代法常被应用于求解非线性方程(组),通过几步简单的迭代,就能得到真解。下面给出几个牛顿迭代法在求解矩阵特征值文中的几个算例:牛顿反迭代% inverse_iterationclcclearn = 2; F = @(z) [exp(1i*z.^2) 1; 1 1];Fp = @(z) [2i*z*exp(1i*z.^2) 0; 0 0];tol
·
牛顿迭代法在求解特征值问题中的应用
牛顿迭代法常被应用于求解非线性方程(组),通过几步简单的迭代,就能得到真解。
下面给出几个牛顿迭代法在求解矩阵特征值文中的几个算例:
- 牛顿反迭代
% inverse_iteration
clc
clear
n = 2; F = @(z) [exp(1i*z.^2) 1; 1 1];
Fp = @(z) [2i*z*exp(1i*z.^2) 0; 0 0];
tol = 1e-8; maxit = 20; lam = 2.2 + 1e-4i;
v = [1; 1]; v = v/norm(v); u = [1; 0];
for k = 0:maxit-1
if norm(F(lam)*v) < tol, break; end
vt = F(lam)\Fp(lam)*v;
lam = lam - u'*v/(u'*vt)
v = vt/norm(vt);
end
if k < maxit, nbr_iter = k, lambda = lam, end
- 牛顿隐式因子法
% Newton_implicit_determinant
n = 2; F = @(z) [exp(1i*z.^2) 1; 1 1];
Fp = @(z) [2i*z*exp(1i*z.^2) 0; 0 0];
tol = 1e-8; maxit = 20; b = [0; 1]; c = b; lam = 2.2 + 1e-4i;
for k = 0:maxit
[L,U] = lu([F(lam) b; c.' 0]);
xf = U\(L\[zeros(n,1); 1]);
if abs(xf(n+1))/norm(F(lam),'fro') < tol, break, end
xfp = U\(L\[-Fp(lam)*xf(1:n); 0]);
lam = lam - xf(n+1)/xfp(n+1);
end
if k < maxit, nbr_iter = k, lambda = lam, end
- QR分解法
% Newton_QR
n = 2; F = @(z) [exp(1i*z.^2) 1; 1 1];
Fp = @(z) [2i*z*exp(1i*z.^2) 0; 0 0];
tol = 1e-8; maxit = 20; lam = 2.2 + 1e-4i;
for k = 0:maxit
[Q,R,P] = qr(F(lam));
if abs(R(n,n))/norm(F(lam),'fro') < tol, break, end
p = R(1:n-1,1:n-1)\R(1:n-1,n);
lam = lam - R(n,n)/(Q(:,n)'*Fp(lam)*P*[-p; 1]);
end
if k < maxit, nbr_iter = k, lambda = lam, end
- 迹方法
% Newton_trace
F = @(z) [exp(1i*z.^2) 1; 1 1];
Fp = @(z) [2i*z*exp(1i*z.^2) 0; 0 0];
tol = 1e-8; maxit = 20; lam = 2.2 + 1e-4i;
for k = 0:maxit
[L,U] = lu(F(lam));
if abs(prod(diag(U)))/norm(F(lam),'fro')<tol, break, end
corr = trace(U\(L\Fp(lam)));
lam = lam - 1/corr;
end
if k < maxit, nbr_iter = k, lambda = lam, end
这个比较简单,就不多说什么了。
更多推荐
所有评论(0)