Ignore:
Timestamp:
Sep 16, 2004, 12:01:21 PM (21 years ago)
Author:
duncan
Message:

added basic smoothing function to least squares

File:
1 edited

Legend:

Unmodified
Added
Removed
  • inundation/ga/storm_surge/pyvolution/least_squares.py

    r305 r309  
    1212class Interpolation(Mesh):
    1313
    14     def __init__(self, vertex_coordinates, triangles, data):
     14    def __init__(self, vertex_coordinates, triangles, data_coordinates):
    1515        """ Build interpolation matrix mapping from
    1616        function values at vertices to function values at data points
     
    2424          integers representing indices of all vertices in the mesh.
    2525
    26           data: List of coordinate pairs [x, y] of data points
     26          data_coordinates: List of coordinate pairs [x, y] of data points
    2727          (or an nx2 Numeric array)
    2828         
     
    3333
    3434        #Convert input to Numeric arrays
    35         data = array(data).astype(Float)
     35        data_coordinates = array(data_coordinates).astype(Float)
    3636        vertex_coordinates = array(vertex_coordinates).astype(Float)
    3737        triangles = array(triangles).astype(Int)               
     
    4343        #Build n x m interpolation matrix       
    4444        m = vertex_coordinates.shape[0] #Number of basis functions (1/vertex)
    45         n = data.shape[0]               #Number of data points         
     45        n = data_coordinates.shape[0]               #Number of data points         
    4646
    47         self.matrix = zeros((n,m), Float)
     47        self.A_m = zeros((n,m), Float)
    4848
    4949        #Compute matrix elements
    5050        for i in range(n):
    51             #For each data point
     51            #For each data_coordinate point
    5252
    53             x = data[i]
     53            x = data_coordinates[i]
    5454            for k in range(len(self)):
    5555                #For each triangle (brute force)
     
    7878                if sigma0 >= 0 and sigma1 >= 0 and sigma2 >= 0:
    7979
    80                     #Assign values to matrix
     80                    #Assign values to A_m
    8181                    j = self.triangles[k,0] #Global vertex id
    82                     self.matrix[i, j] = sigma0
     82                    self.A_m[i, j] = sigma0
    8383
    8484                    j = self.triangles[k,1] #Global vertex id
    85                     self.matrix[i, j] = sigma1
     85                    self.A_m[i, j] = sigma1
    8686
    8787                    j = self.triangles[k,2] #Global vertex id
    88                     self.matrix[i, j] = sigma2
     88                    self.A_m[i, j] = sigma2
    8989
    90                
    91 
    92                
    93 
    94                
    95                
    96                
     90    def smooth_to_mesh(self, z):
     91        from Numeric import zeros, array, Float,transpose,dot
     92        from LinearAlgebra import solve_linear_equations
     93        #Convert input to Numeric arrays
     94        z = array(z).astype(Float)
     95        At_m = transpose(self.A_m)
     96        #print "z", z
     97        #print "At_m",At_m
     98        self.AtA_m = dot(At_m, self.A_m)
     99        Atz_m = dot(At_m, z)
     100        f = solve_linear_equations(self.AtA_m,Atz_m)
     101        return f
Note: See TracChangeset for help on using the changeset viewer.