def inv_transform(xs, ys, zs, M): iM = linear_algebra.inverse(M) vec = vec_pad_ones(xs, ys, zs) vecr = nx.matrixmultiply(iM, vec) try: vecr = vecr / vecr[3] except OverflowError: pass return vecr[0], vecr[1], vecr[2]
def mfuncC(f, x): """ mfuncC(f, x) : matrix function with possibly complex eigenvalues. Note: Numeric defines (v,u) = eig(x) => x*u.T = u.T * Diag(v) This function is needed by sqrtm and allows further functions. """ x = array(x) (v, u) = numerix.mlab.eig(x) uT = transpose(u) V = numerix.mlab.diag(f(v + 0j)) y = matrixmultiply(uT, matrixmultiply(V, linear_algebra.inverse(uT))) return approx_real(y)
def mfuncC(f, x): """ mfuncC(f, x) : matrix function with possibly complex eigenvalues. Note: Numeric defines (v,u) = eig(x) => x*u.T = u.T * Diag(v) This function is needed by sqrtm and allows further functions. """ x = array(x) (v, u) = numerix.mlab.eig(x) uT = transpose(u) V = numerix.mlab.diag(f(v+0j)) y = matrixmultiply( uT, matrixmultiply( V, linear_algebra.inverse(uT))) return approx_real(y)
def polyfit(x,y,N): """ Do a best fit polynomial of order N of y to x. Return value is a vector of polynomial coefficients [pk ... p1 p0]. Eg, for N=2 p2*x0^2 + p1*x0 + p0 = y1 p2*x1^2 + p1*x1 + p0 = y1 p2*x2^2 + p1*x2 + p0 = y2 ..... p2*xk^2 + p1*xk + p0 = yk Method: if X is a the Vandermonde Matrix computed from x (see http://mathworld.wolfram.com/VandermondeMatrix.html), then the polynomial least squares solution is given by the 'p' in X*p = y where X is a len(x) x N+1 matrix, p is a N+1 length vector, and y is a len(x) x 1 vector This equation can be solved as p = (XT*X)^-1 * XT * y where XT is the transpose of X and -1 denotes the inverse. For more info, see http://mathworld.wolfram.com/LeastSquaresFittingPolynomial.html, but note that the k's and n's in the superscripts and subscripts on that page. The linear algebra is correct, however. See also polyval """ x = asarray(x)+0. y = asarray(y)+0. y = reshape(y, (len(y),1)) X = Matrix(vander(x, N+1)) Xt = Matrix(transpose(X)) c = array(linear_algebra.inverse(Xt*X)*Xt*y) # convert back to array c.shape = (N+1,) return c
def polyfit(x, y, N): """ Do a best fit polynomial of order N of y to x. Return value is a vector of polynomial coefficients [pk ... p1 p0]. Eg, for N=2 p2*x0^2 + p1*x0 + p0 = y1 p2*x1^2 + p1*x1 + p0 = y1 p2*x2^2 + p1*x2 + p0 = y2 ..... p2*xk^2 + p1*xk + p0 = yk Method: if X is a the Vandermonde Matrix computed from x (see http://mathworld.wolfram.com/VandermondeMatrix.html), then the polynomial least squares solution is given by the 'p' in X*p = y where X is a len(x) x N+1 matrix, p is a N+1 length vector, and y is a len(x) x 1 vector This equation can be solved as p = (XT*X)^-1 * XT * y where XT is the transpose of X and -1 denotes the inverse. For more info, see http://mathworld.wolfram.com/LeastSquaresFittingPolynomial.html, but note that the k's and n's in the superscripts and subscripts on that page. The linear algebra is correct, however. See also polyval """ x = asarray(x) + 0. y = asarray(y) + 0. y = reshape(y, (len(y), 1)) X = Matrix(vander(x, N + 1)) Xt = Matrix(transpose(X)) c = array(linear_algebra.inverse(Xt * X) * Xt * y) # convert back to array c.shape = (N + 1, ) return c