MATLAB Linear Algebra - LU Decomposition using MATLAB

AI Thread Summary
The discussion focuses on a MATLAB code for LU decomposition that needs modification to output results in a specific format, particularly the solution vector x. A user initially faced issues with variable naming, as MATLAB is case sensitive, which was resolved by redefining the variable x. However, the user encountered an unexpected zero in the output when solving a specific system of equations, prompting requests for troubleshooting advice. The conversation highlights the importance of correct variable handling and debugging in MATLAB for accurate results. Overall, the thread emphasizes the need for clarity in code output and potential errors during matrix operations.
tironel
Messages
10
Reaction score
0
Below I have a code written for solving the L U decomposition of a system of equations however I need my code to just output the answers with this format it outputs the variables in the matrix for example i need the function to output x [1;2;3;4] any suggestions?

Code:
   function[L,U,X]=LU_Parker(A,B)
[m n]=size(A);
if (m ~= n )
disp ( 'LR2 error: Matrix must be square' );
return;
end;
    % Part 2 : Decomposition of matrix into L and U
  L=zeros(m,m);
  U=zeros(m,m);
  for i=1:m
  % Finding L
  for k=1:i-1
  L(i,k)=A(i,k);
  for j=1:k-1
  L(i,k)= L(i,k)-L(i,j)*U(j,k);
  end
  L(i,k) = L(i,k)/U(k,k);
  end
  % Finding U
  for k=i:m
  U(i,k) = A(i,k);
  for j=1:i-1
  U(i,k)= U(i,k)-L(i,j)*U(j,k);
  end
  end
  end
  for i=1:m
  L(i,i)=1;
  end
  % Program shows U and L
  U
  L
  % Now use a vector y to solve 'Ly=b'
  y=zeros(m,1);
  y(1)=B(1)/L(1,1);
  for i=2:m
  y(i)=-L(i,1)*y(1);
  for k=2:i-1
  y(i)=y(i)-L(i,k)*y(k);
  y(i)=(B(i)+y(i))/L(i,i);
  end;
  end;
% Now we use this y to solve Ux = y
x=zeros(m,1);
x(1)=y(1)/U(1,1);
for i=2:m
x(i)=-U(i,1)*x(1);
for k=i:m
      x(i)=x(i)-U(i,k)*x(k);
      x(i)=(y(i)+x(i))/U(i,i);
end;
   end
 
Physics news on Phys.org
Could you rephrase the question? It's a little hard to understand you without any punctuation.

One comment about your code: you define the variable x, but the function returns X. Variable names in Matlab are case sensitive. Maybe that's the problem?
 
Yes, redefining the x like you said allowed the function to output what I was needing, however I must have an error in my coding because I inputed the following matrices and got the following answer but I am getting a 0 for one of the answers which should not be there. Any possible solutions?

INPUT

Code:
A=[ 6 0 0 0 0; 0 1 0 -2 0; 1 0 -3 0 0; 0 8 -4 -3 -2; 0 2 0 0 -1];
B=[1;0;0;1;0];
LU_Parker(A,B)


Output:
Code:
X =

    0.1667
         0
    0.0432
    0.1841
    1.7778


ans =

    1.0000         0         0         0         0
         0    1.0000         0         0         0
    0.1667         0    1.0000         0         0
         0    8.0000    1.3333    1.0000         0
         0    2.0000         0    0.3077    1.0000
 
Back
Top