# Create a metamodel using Kriging¶

In this example we are going to create an approximation of a model response using a kriging model. We consider a bidimensional function with gaussian inputs. Then we create a kriging metamodel with a constant basis and a SquaredExponential covariance.

We consider the function

for any . We assume that and have a gaussian distribution :

[1]:

from __future__ import print_function
import openturns as ot


We define the model.

[2]:

dimension = 2
input_names = ['x1', 'x2']
formulas = ['cos(x1 + x2)']
model = ot.SymbolicFunction(input_names, formulas)


We generate a simple Monte-Carlo input sample and evaluate the corresponding output sample.

[3]:

distribution = ot.Normal(dimension)
samplesize = 15
x  = distribution.getSample(samplesize)
y = model(x)


Then we create a kriging metamodel, using a constant trend and a squared exponential covariance model.

[4]:

basis = ot.ConstantBasisFactory(dimension).build()
covarianceModel = ot.SquaredExponential([0.1]*dimension, [1.0])
algo = ot.KrigingAlgorithm(x, y, covarianceModel, basis)
algo.run()
result = algo.getResult()
metamodel = result.getMetaModel()


It is not so easy to visualize a bidimensional function. In order to simplify the graphics, we consider the value of the function at the input . This amounts to create a ParametricFunction where the first variable (at input index 0) is set to .

[5]:

x1ref = 0.5
metamodelAtXref = ot.ParametricFunction(metamodel, [0], [x1ref])
modelAtXref = ot.ParametricFunction(model, [0], [x1ref])


For this given value of , we plot the model and the metamodel with from its 1% up to its 99% quantile. We configure the X title to “X2” because the default setting would state that this axis is the first value of the parametric function, which default name is “X0”.

[6]:

x2min = ot.Normal().computeQuantile(0.01)[0]
x2max = ot.Normal().computeQuantile(0.99)[0]
graph = metamodelAtXref.draw(x2min, x2max)
graph.setLegends(["Kriging"])
curve = modelAtXref.draw(x2min, x2max)
curve.setLegends(["Model"])
curve.setColors(['red'])

[6]: