Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- dimension, order = 3, 2
- from numpy.linalg import inv
- degreesOfFreedom = []
- monomials = []
- if dimension == 2:
- for i in range(order+1):
- for j in range(order+1):
- if i + j > order:
- break
- t = map(lambda x: x/float(order), [i,j] )
- degreesOfFreedom.append( tuple(t) )
- monomials.append( (i,j) )
- elif dimension == 3:
- for i in range(order+1):
- for j in range(order+1):
- for k in range(order+1):
- if i + j + k > order:
- break
- t = map(lambda x: x/float(order), [i,j,k] )
- degreesOfFreedom.append( tuple(t) )
- monomials.append( (i,j,k) )
- referenceBaseFunctions = []
- if dimension == 2:
- for i in range( len(degreesOfFreedom) ):
- matrix = []
- for (x,y) in degreesOfFreedom:
- row = []
- for (ex,ey) in monomials:
- row.append( pow(x,ex) * pow(y,ey) )
- matrix.append(row)
- inverse = inv(matrix)
- column = list( inverse[:,i] ) # inverse * vector
- def baseFunc(x,y):
- s = 0
- for i in range( len(monomials) ):
- C = column[i]
- (ex,ey) = monomials[i]
- s += C * (pow(x,ex) * pow(y,ey))
- return s
- referenceBaseFunctions.append(baseFunc)
- elif dimension == 3:
- for i in range( len(degreesOfFreedom) ):
- matrix = []
- for (x,y,z) in degreesOfFreedom:
- row = []
- for (ex,ey,ez) in monomials:
- row.append( pow(x,ex) * pow(y,ey) * pow(z,ez) )
- matrix.append(row)
- inverse = inv(matrix)
- column = list( inverse[:,i] ) # inverse * vector
- def baseFunc(x,y,z):
- s = 0
- for i in range( len(monomials) ):
- C = column[i]
- (ex,ey,ez) = monomials[i]
- s += C * (pow(x,ex) * pow(y,ey) * pow(z,ez))
- return s
- referenceBaseFunctions.append(baseFunc)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement