```Date: Oct 20, 2011 12:12 PM
Author: Halley
Subject: Re: Matrix dimensions must agree

"Halley" wrote in message <j7pgmh\$egc\$1@newscl01ah.mathworks.com>...> "Matt J" wrote in message <j7pf7q\$9b3\$1@newscl01ah.mathworks.com>...> > "Halley" wrote in message <j7pdmt\$3o9\$1@newscl01ah.mathworks.com>...> > >> > > %Calculate old values  > > >   rho(i) = (x_a(i,:).*A.*x(:,i))./(x_a(i,:).*B.*x(:,i))> > ========> > > > I suspect you mean to do * instead of .*> > > > In any case, the sizes definitely aren't compatible  for the .* operation > > I think this is the simplest solution, thanks.  I had actually been toying with that solution as I waited for responses when I ran across a new problem.  With each iteration my values are not changing.  As I mentioned, x(i) should become xnorm(i) and rho(i) should equal rho(i+1).  I suspect that this is the problem, that somehow the order of the operations regarding rho is making it so that the relative error doesn't change.  I have tried taking rho(i) out of the loop and calculating rho(1) but that did not seem to help either.  I've been struggling with these problems for a few days so the help is really appreciated.%Declare initial variablesA = [2 -1;-1 4];b = [1;1];B = [1 0;0 1];Nmax = 20;TOL = 1*10^-5;k = 1;x = zeros(2,21);x_a = zeros(21,2);rho = zeros(21,1);xnorm = zeros(2,21);x(:,1) = A\b;x_a(1,:) = x(:,1)';for i =1:Nmax%Calculate old valuesrho(i) = (x_a(i,:)*A*x(:,i))/(x_a(i,:)*B*x(:,i))%Calculate new values  xnorm(:,i) = (1/sqrt(x_a(i,:)*B*x(:,i)))*x(:,i)   rho(i+1) = (x_a(i,:)*A*x(:,i))/(x_a(i,:)*B*x(:,i))    %Check for convergencerelative_error = abs((rho(i+1)-rho(i))/rho(i+1))if ( relative_error ~= 0 && relative_error <= TOL )x(:,i+1) = xnorm(:,i)rho(i+1) = rho(i+1)k = kreturnelseif (relative_error == 0) x(:,i) = xnorm(:,i)rho(i) = rho(i+1)k = k+1elseif (relative_error > TOL)x(:,i) = xnorm(:,i)rho(i) = rho(i+1)k = k+1    end    end
```