Python function to solve Ax = b by back substitution
Question: Okay, for my numerical methods class I have the following question:

Write a Python function to solve Ax = b by back substitution, where A is an
upper triangular nonsingular matrix. MATLAB code for this is on page 190 which
you can use as a pseudocode guide if you wish. The function should take as
input A and b and return x. Your function need not check that A is
nonsingular. That is, assume that only nonsingular A will be passed to your
function.

The MATLAB code that it refers to is:

    
    
    x(n) = c(u)/U(n,n) 
    for i = n-1 : -1 : 1
      x(i) = c(i);
      for j = i+1 : n 
        x(i) = x(i) - U(i,j)*x(j);
        end
      x(i) = x(i)/U(i,i);
    end
    

My Python code, which I wrote using the MATLAB code snippet, is with an upper
triangular test matrix(not sure if its nonsingular! How do I test for
singularity?):

    
    
    from scipy import mat
    c=[3,2,1]
    U=([[6,5,1],[0,1,7],[0,0,2]])
    a=0
    x=[]
    while a<3:
        x.append(1)
        a=a+1
    
    n=3
    i=n-1
    x[n-1]=c[n-1]/U[n-1][n-1]
    while i>1: 
        x[i]=c[i]
        j=i+1
        while j<n-1:
            x[i]=x[i]-U[i][j]*x[j];
        x[i]=x[i]/U[i][i]
        i=i-1
    print mat(x)
    

The answer I am getting is [[1 1 0]] for x. I not sure if I am doing this
correctly. I assume it is wrong and can't figure out what to do next. Any
clues?


Answer: 
    j=i+1
    while j<n-1:
        x[i]=x[i]-U[i][j]*x[j];
    

is infinite ... and never gets executed

your indexing is fubared:

    
    
    for i in range(n-2,-1,-1):
    ....
        for j in range(i+1,n):
    

notice, range is half open unlike matlab

