f = cb.model # %% # The random variable of interest Y is then Y = ot.CompositeRandomVector(f, X) Y.setDescription('Y') # %% # Taylor expansion # ---------------- # %% # Perform Taylor approximation to get the expected value of Y and the importance factors. # %% taylor = ot.TaylorExpansionMoments(Y) taylor_mean_fo = taylor.getMeanFirstOrder() taylor_mean_so = taylor.getMeanSecondOrder() taylor_cov = taylor.getCovariance() taylor_if = taylor.getImportanceFactors() print('model evaluation calls number=', f.getGradientCallsNumber()) print('model gradient calls number=', f.getGradientCallsNumber()) print('model hessian calls number=', f.getHessianCallsNumber()) print('taylor mean first order=', taylor_mean_fo) print('taylor variance=', taylor_cov) print('taylor importance factors=', taylor_if) # %% graph = taylor.drawImportanceFactors() view = viewer.View(graph)
formulas = ot.Description(3) formulas[0] = 'a+b+c' formulas[1] = 'a-b*c' formulas[2] = '(a+2*b^2+3*c^3)/6' analytical = ot.SymbolicFunction(input, formulas) analytical.setName('analytical') analytical.setOutputDescription(['z1', 'z2', 'z3']) myStudy.add('analytical', analytical) # Create a TaylorExpansionMoments algorithm antecedent = ot.RandomVector( ot.IndependentCopula(analytical.getInputDimension())) antecedent.setName('antecedent') composite = ot.CompositeRandomVector(analytical, antecedent) composite.setName('composite') taylorExpansionsMoments = ot.TaylorExpansionMoments(composite) taylorExpansionsMoments.setName('taylorExpansionsMoments') taylorExpansionsMoments.getMeanFirstOrder() taylorExpansionsMoments.getMeanSecondOrder() taylorExpansionsMoments.getCovariance() myStudy.add('taylorExpansionsMoments', taylorExpansionsMoments) # Create a FORMResult input2 = ot.Description(2) input2[0] = 'x' input2[1] = 'y' formula2 = ot.Description(1) formula2[0] = 'y^2-x' model = ot.SymbolicFunction(input2, formula2) model.setName('sum')
for i in range(dim): sigma[i] = 0.1 * (i + 1) R = ot.CorrelationMatrix(dim) for i in range(1, dim): R[i, i - 1] = 0.25 distribution = ot.Normal(meanPoint, sigma, R) # We create a distribution-based RandomVector X = ot.RandomVector(distribution) # We create a composite RandomVector Y from X and myFunction Y = ot.RandomVector(myFunc, X) # We create a quadraticCumul algorithm algo = ot.TaylorExpansionMoments(Y) # We test the attributes here print('algo=', algo) # We compute the several elements provided by the quadratic cumul algorithm print('First order mean=', repr(algo.getMeanFirstOrder())) print('Second order mean=', repr(algo.getMeanSecondOrder())) print('Covariance=', repr(algo.getCovariance())) print('Value at mean=', repr(algo.getValueAtMean())) print('Gradient at mean=', repr(algo.getGradientAtMean())) print('Hessian at mean=', repr(algo.getHessianAtMean())) algo_1 = ot.TaylorExpansionMoments(Y.getMarginal(0)) print('Importance factors=', repr(algo_1.getImportanceFactors()))