| Gaofixedpoint.m | | function [X, counter, err]=Gaofixedpoint(A, Q, C, k, q, errtol) | | % Solving X = kQ + A∧(Xhat − C)∧qA, with Xhat = kronecker(I,X) | | % Input: matrices , , , k > 1, 0 < q < 1, errtol | | % Output: solution , iteration counter, final equation relative error | | m, n = size (A); [p, w] = size (Q); [r, s] = size (C); % Input size etc checks | | if floor (m/n) ~= m/n n ~= p n ~= w r ~= m s ~= m k | | <= 1 … q <= 0 q>= 1, | | error (’incompatible inputs’), | | return, | | end | | I = eye (m/n); X = kQ; counter = 0; err = 10000; % Initialize | | while err >= errtol Iterate | | X = kQ + A’(kron(I, X) − C)∧qA; update X | | S = X − kQ − A’(kron(I, X) − C)∧qA; form error matrix S | | err = norm(S, 1)/norm(X, 1); relative iteration error | | counter = counter + 1; Iteration counter | | end | | X = (X + X’)/2; make sure X is symmetric | | S = X − kQ − A’(kron(I, X) − C)∧qA; form final error matrix S | | err = norm(S, 1)/norm(X, 1); |
|