www.gusucode.com > matlab矩阵函数工具箱 > matlab矩阵函数工具箱/matlab矩阵函数工具箱/sqrtm_dbp.m
function [X,M,k] = sqrtm_dbp(A,scale) %SQRTM_DBP Matrix square root by product form of Denman-Beavers iteration. % [X,M,k] = SQRTM_DBP(A,SCAL) computes the principal square root X % of the matrix A using the product form of the Denman-Beavers % iteration. The matrix M tends to EYE. % SCAL specifies the scaling: % SCAL == 0, no scaling. % SCAL == 1, determinantal scaling (default). % k is the number of iterations. n = length(A); if nargin < 2, scale = 1; end tol = mft_tolerance(A); X = A; M = A; maxit = 25; for k = 1:maxit if scale == 1 g = (abs(det(M)))^(-1/(2*n)); X = g*X; M = g^2*M; end Xold = X; invM = inv(M); X = X*(eye(n) + invM)/2; M = 0.5*(eye(n) + (M + invM)/2); Mres = norm(M - eye(n),'fro'); reldiff = norm(X - Xold,'fro')/norm(X,'fro'); if reldiff < 1e-2, scale = 0; end % Switch to no scaling. if Mres <= tol, return; end end error('Not converged after %2.0f iterations', maxit)