Note
Go to the end to download the full example code.
Create a custom covariance model¶
This example illustrates how the user can define his own covariance model.
import openturns as ot
import openturns.viewer as viewer
from matplotlib import pylab as plt
import math as m
ot.Log.Show(ot.Log.NONE)
Construct the covariance model¶
Create the time grid
N = 32
a = 4.0
mesh = ot.IntervalMesher([N]).build(ot.Interval(-a, a))
Create the covariance function at (s,t)
def C(s, t):
return m.exp(-4.0 * abs(s - t) / (1 + (s * s + t * t)))
Create the large covariance matrix
covariance = ot.CovarianceMatrix(mesh.getVerticesNumber())
for k in range(mesh.getVerticesNumber()):
t = mesh.getVertices()[k]
for ll in range(k + 1):
s = mesh.getVertices()[ll]
covariance[k, ll] = C(s[0], t[0])
Create the covariance model
covmodel = ot.UserDefinedCovarianceModel(mesh, covariance)
Draw the covariance model as a function¶
Define the function to draw
def f(x):
return [covmodel([x[0]], [x[1]])[0, 0]]
func = ot.PythonFunction(2, 1, f)
func.setDescription(["$s$", "$t$", "$cov$"])
Draw the function with default options
cov_graph = func.draw([-a] * 2, [a] * 2, [512] * 2)
cov_graph.setLegendPosition("")
view = viewer.View(cov_graph)
Draw the function in a filled contour graph
cov_graph = func.draw(
0, 1, 0, [0] * 2, [-a] * 2, [a] * 2, [512] * 2, ot.GraphImplementation.NONE, True
)
view = viewer.View(cov_graph)
Draw the covariance model as a matrix¶
Use raw matshow
plt.matshow(covariance)
<matplotlib.image.AxesImage object at 0x7ff3e7bd2f00>
Draw the covariance model as a matrix with the correct axes.
To obtain the correct orientation of the y axis we use the origin argument. To obtain the correct graduations we use the extent argument. We also change the colormap used.
pas = 2 * a / (N - 1)
plt.matshow(
covariance,
cmap="gray",
origin="lower",
extent=(-a - pas / 2, a + pas / 2, -a - pas / 2, a + pas / 2),
)
plt.show()
Total running time of the script: (0 minutes 5.370 seconds)