Dynamic-Calibration/utils/SDPT3-4.0/Examples/igmres.m

49 lines
1.5 KiB
Matlab
Executable File

%%********************************************************************
%% igmres: compute ideal GMRES polynomial of deg m
%% of a matrix B.
%%
%% min || p(B) ||_2
%% where p is a polynomial of degree <= m and p(0) = 1.
%%
%% B = a general square matrix.
%%-----------------------------------------------------------
%%
%% [blk,Avec,C,b,X0,y0,Z0,objval,p] = igmres(B,m,feas,solve);
%%
%% B = a square matrix.
%% m = degree of polynomial.
%% feas = 1 if want feasible starting point
%% = 0 if otherwise.
%% solve = 0 just to initialize
%% = 1 if want to solve the problem.
%%
%% p = ideal GMRES polynomial in Matlab format.
%%*****************************************************************
%% SDPT3: version 4.0
%% Copyright (c) 1997 by
%% Kim-Chuan Toh, Michael J. Todd, Reha H. Tutuncu
%% Last Modified: 16 Sep 2004
%%*****************************************************************
function [blk,Avec,C,b,X0,y0,Z0,objval,p] = igmres(B,m,feas,solve)
if (nargin <= 3); solve = 0; end;
if (nargin <= 2); feas = 0; end;
N = length(B);
if (m >= N); error('degree >= size of B'); end;
A = cell(1,m+1);
[V,H,R] = orthbasis(B,m-1);
A{1} = eye(N);
for k = [1:m]; A{k+1} = B*V{k}; end;
[blk,Avec,C,b,X0,y0,Z0,objval,xx] = norm_min(A,feas,solve);
if (solve)
y = xx;
x1 = R(1:m,1:m)*y(1:m);
p = [x1(m:-1:1); 1];
else
objval = []; p = [];
end
%%********************************************************************