www.gusucode.com > matlab矩阵函数工具箱 > matlab矩阵函数工具箱/matlab矩阵函数工具箱/cosmsinm.m

    function [C,S,cost,s] = cosmsinm(A)
%COSMSINM  Matrix cosine and sine by double angle algorithm.
%   [C,S,COST,s] = COSMSINM(A) computes the cosine C and the sine S
%   of the matrix A using the double angle algorithm with Pade
%   approximation.  The total number of matrix multiplications and
%   linear systems solved is returned as COST and s specifies the
%   amount of scaling (A is scaled to 2^(-s)*A).

n = length(A);
theta = [0.00613443965526 0.11110098037055  0.43324697422211 0.98367255274344 ...
         1.72463663220280 2.61357494421368 3.61521023400301 4.70271938553349 ...
         5.85623410320942 7.06109053959248 0 9.58399601173102];

normA = norm(A,inf);
d = [2 4 6 8 10 12 14 16 20];
for i = d(1:8)
    if normA <= theta(i/2);
        m = i;
        cost = m/2+3;
        [C,S] = cosmsinm_pade(A,m);
        s = m;
        return
    end
end

s = 0;
if normA > theta(20/2)
    s = max( ceil( log2( normA/theta(20/2) ) ), 1 );
    A = A/(2^s);
    normA = normA/(2^s);
end

if normA > 2*theta(12/2)
    m = 20; cost = 12;
elseif normA > theta(16/2)
    A = A/2; m = 12; cost = 9; s = s+1;
else
    m = 16; cost = 11;
end

[C,S] = cosmsinm_pade(A,m);
for i = 1:s
    S = 2*S*C;
    C = 2*(C^2) - eye(n);
end
cost = cost + 2*s;