Changeset 719

Show
Ignore:
Timestamp:
02/23/10 14:45:49 (5 months ago)
Author:
hodgestar
Message:

Fix rounding of output. Solve on all constraints. Report residual of solution.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • hodgestar/PythonCode/PyramidProblem/pyramid.py

    r718 r719  
    88        self.initial = initial 
    99        self.solution = None 
     10        self.residual = None 
    1011 
    1112    def _loc(self, row, col): 
     
    3132        n_constraints = n_tri_constraints + n_init_contraints 
    3233 
    33         constraints = np.zeros((n_unknowns, n_unknowns)) 
    34         rhs = np.zeros((n_unknowns, 1)) 
     34        constraints = np.zeros((n_constraints, n_unknowns)) 
     35        rhs = np.zeros((n_constraints, 1)) 
    3536        constraint = 0 
    3637        loc = self._loc 
     
    5253            rhs[constraint] = val 
    5354            constraint += 1 
    54             # just skip over-constrainted stuff 
    55             if constraint >= n_unknowns: 
    56                 break 
    5755 
    5856        # phew! 
    5957        #print constraints 
    6058        #print rhs 
    61         self.solution = lg.solve(constraints, rhs) 
     59        self.solution, self.residuals = lg.lstsq(constraints, rhs)[:2] 
     60        #print self.solution 
    6261 
    6362    def __str__(self): 
     
    7271                acol = [] 
    7372                for col in range(1, row+1): 
    74                     acol.append("%5d " % self.solution[self._loc(row, col)]) 
     73                    acol.append("%5d" % int(np.round(self.solution[self._loc(row, col)]))) 
    7574                s.append("  " + "".join(acol)) 
    7675 
     
    8685            if good: 
    8786                s.append("  No constraints violated.") 
     87                s.append("  Residual: %f" % np.sum(self.residuals)) 
    8888 
    8989            s.append("  -----") 
     
    101101    if len(sys.argv) < 3: 
    102102        print "Usage: pyramid.py <height> <inital value> ..." 
    103         print "e.g. pyramid.py 6 1,1=234 4,2=28 5,2=28 5,4=56 6,1=83 6,4=-69 6,5=125" 
     103        print "e.g. pyramid.py 6 1,1=234 4,2=29 5,2=29 5,4=56 6,1=79 6,4=-69 6,5=125" 
    104104        print "e.g. pyramid.py 2 1,1=2 2,1=1" 
    105105        sys.exit(1)