Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
44 lines (39 sloc) 1.48 KB
function invcheck(invA,detA,A,tol,meth,sev,goods)
% INVCHECK(invA,detA,A,tol,meth,sev,goods)
%
% Checks the inverse of a two-by-two symmetric matrix of wavenumbers
%
% INPUT:
%
% invA The purported inverse of A [Nx3]
% detA The determinant of A [N]
% A The actual matrix whose inverse this should be [Nx3]
% tol The negative of the tolerance exponent [be explicit!]
% meth 1 By the Cayley-Hamilton theorem (uses the determinant)
% 2 By multiplication and comparing against the identity
% sev The severity of the output message [default: 0]
% goods Message string [default: NaN, choose [] for DIFER's default]
%
% Last modified by fjsimons-at-alum.mit.edu, 12/19/2012
% The zero wavenumbers are always going to be trouble
kbadi=find(sum(isinf(invA),2));
kgoodi=skip(1:size(A,1),kbadi);
% disp(sprintf('Troublesome wave number at %3g',k(kbadi)))
defval('sev',0)
defval('goods',NaN)
switch meth
case 1
warning off MATLAB:divideByZero
chek1=invA-[A(:,3) -A(:,2) A(:,1)]./repmat(detA,1,3);
difer(chek1(~isnan(chek1))/length(chek1),tol,sev,goods)
warning on MATLAB:divideByZero
case 2
chek2=invA(kgoodi,1).*A(kgoodi,1)+invA(kgoodi,2).*A(kgoodi,2)-1;
difer(chek2(~isnan(chek2)),tol,sev,goods)
chek3=invA(kgoodi,1).*A(kgoodi,2)+invA(kgoodi,2).*A(kgoodi,3);
difer(chek3(~isnan(chek3)),tol,sev,goods)
chek4=invA(kgoodi,2).*A(kgoodi,2)+invA(kgoodi,3).*A(kgoodi,3)-1;
difer(chek4(~isnan(chek4)),tol,sev,goods)
otherwise
error('Specify valid method')
end