Source code for RCAIDE.Library.Methods.Utilities.Chebyshev.linear_data

# ----------------------------------------------------------------------
#  Imports
# ----------------------------------------------------------------------

import numpy as np

# ----------------------------------------------------------------------
#  Method
# ---------------------------------------------------------------------- 
[docs] def linear_data(N = 16, integration = True, **options): """Calculates the differentiation and integration matricies using chebyshev's pseudospectral algorithm, based on linearly spaced samples in x. D and I are not symmetric get derivatives with df_dy = np.dot(D,f) get integral with int_f = np.dot(I,f) where f is either a 1-d vector or 2-d column array A full example of how these operators are used is available in the chebyshev_data.py (same folder) Assumptions: None Source: N/A Inputs: N [-] Number of points integration (optional) <boolean> Determines if the integration operator is calculated Outputs: x [-] N-number of cosine spaced control points, in range [0,1] D [-] Differentiation operation matrix I [-] Integration operation matrix, or None if integration = False Properties Used: N/A """ # setup N = int(N) if N <= 0: raise RuntimeError("N = %i, must be > 0" % N) # --- X vector # linear spaced in range [0,1] x = np.linspace(0,1,N) # --- Differentiation Operator # coefficients c = np.array( [2.] + [1.]*(N-2) + [2.] ) c = c * ( (-1.) ** np.arange(0,N) ) A = np.tile( x, (N,1) ).T dA = A - A.T + np.eye( N ) cinv = 1./c; # build operator D = np.zeros( (N,N) ); # math c = np.array(c) cinv = np.array([cinv]) cs = np.multiply(c,cinv.T) D = np.divide(cs.T,dA) # more math D = D - np.diag( np.sum( D.T, axis=0 ) ); # --- Integration operator if integration: # invert D except first row and column I = np.linalg.inv(D[1:,1:]); # repack missing columns with zeros I = np.append(np.zeros((1,N-1)),I,axis=0) I = np.append(np.zeros((N,1)),I,axis=1) else: I = None # done! return x, D, I