.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_probabilistic_modeling/stochastic_processes/plot_mix_rv_process.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_probabilistic_modeling_stochastic_processes_plot_mix_rv_process.py: Create a process from random vectors and processes ================================================== .. GENERATED FROM PYTHON SOURCE LINES 6-21 The objective is to create a process defined from a random vector and a process. We consider the following limit state function, defined as the difference between a degrading resistance :math:`r(t) = R - bt` and a time-varying load :math:`S(t)`: .. math:: \begin{align*} g(t)= r(t) - S(t) = R - bt - S(t) \end{align*} We propose the following probabilistic model: - :math:`R` is the initial resistance, and :math:`R \sim \mathcal{N}(\mu_R, \sigma_R)`; - :math:`b` is the deterioration rate of the resistance; it is deterministic; - :math:`S(t)` is the time-varying stress, which is modeled by a stationary Gaussian process of mean value :math:`\mu_S`, standard deviation :math:`\sigma_S` and a squared exponential covariance model; - :math:`t` is the time, varying in :math:`[0,T]`. .. GENERATED FROM PYTHON SOURCE LINES 24-25 First, import the python modules: .. GENERATED FROM PYTHON SOURCE LINES 27-31 .. code-block:: default from openturns import * from openturns.viewer import View from math import * .. GENERATED FROM PYTHON SOURCE LINES 32-34 1. Create the gaussian process :math:`(\omega, t) \rightarrow S(\omega,t)` -------------------------------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 36-37 Create the mesh which is a regular grid on :math:`[0,T]`, with :math:`T=50`, by step =1: .. GENERATED FROM PYTHON SOURCE LINES 39-46 .. code-block:: default b = 0.01 t0 = 0.0 step = 1 tfin = 50 n = round((tfin-t0)/step) myMesh = RegularGrid(t0, step, n) .. GENERATED FROM PYTHON SOURCE LINES 47-54 Create the squared exeponential covariance model: .. math:: C(s,t) = \sigma^2e^{-\frac{1}{2} \left( \dfrac{s-t}{l} \right)^2} where the scale parameter is :math:`l=\frac{10}{\sqrt{2}}` and the amplitude :math:`\sigma = 1`. .. GENERATED FROM PYTHON SOURCE LINES 56-60 .. code-block:: default l = 10/sqrt(2) myCovKernel = SquaredExponential([l]) print('cov model = ', myCovKernel) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none cov model = SquaredExponential(scale=[7.07107], amplitude=[1]) .. GENERATED FROM PYTHON SOURCE LINES 61-62 Create the gaussian process :math:`S(t)`: .. GENERATED FROM PYTHON SOURCE LINES 64-67 .. code-block:: default S_proc = GaussianProcess(myCovKernel, myMesh) .. GENERATED FROM PYTHON SOURCE LINES 68-70 2. Create the process :math:`(\omega, t) \rightarrow R(\omega)-bt` ------------------------------------------------------------------ .. GENERATED FROM PYTHON SOURCE LINES 72-73 First, create the random variable :math:`R \sim \mathcal{N}(\mu_R, \sigma_R)`, with :math:`\mu_R = 5` and :math:`\sigma_R = 0.3`: .. GENERATED FROM PYTHON SOURCE LINES 75-79 .. code-block:: default muR = 5 sigR = 0.3 R = Normal(muR, sigR) .. GENERATED FROM PYTHON SOURCE LINES 80-81 The create the Dirac random variable :math:`B = b`: .. GENERATED FROM PYTHON SOURCE LINES 83-85 .. code-block:: default B = Dirac(b) .. GENERATED FROM PYTHON SOURCE LINES 86-92 Then create the process :math:`(\omega, t) \rightarrow R(\omega)-bt` using the :math:`FunctionalBasisProcess` class and the functional basis :math:`\phi_1 : t \rightarrow 1` and :math:`\phi_2: -t \rightarrow t` : .. math:: R(\omega)-bt = R(\omega)\phi_1(t) + B(\omega) \phi_2(t) with :math:`(R,B)` independent. .. GENERATED FROM PYTHON SOURCE LINES 94-102 .. code-block:: default const_func = SymbolicFunction(['t'], ['1']) linear_func = SymbolicFunction(['t'], ['-t']) myBasis = Basis([const_func, linear_func]) coef = ComposedDistribution([R, B]) R_proc = FunctionalBasisProcess(coef, myBasis, myMesh) .. GENERATED FROM PYTHON SOURCE LINES 103-105 3. Create the process :math:`Z: (\omega, t) \rightarrow R(\omega)-bt + S(\omega, t)` ------------------------------------------------------------------------------------ .. GENERATED FROM PYTHON SOURCE LINES 107-108 First, aggregate both processes into one process of dimension 2: :math:`(R_{proc}, S_{proc})` .. GENERATED FROM PYTHON SOURCE LINES 110-112 .. code-block:: default myRS_proc = AggregatedProcess([R_proc, S_proc]) .. GENERATED FROM PYTHON SOURCE LINES 113-124 Then create the spatial field function that acts only on the values of the process, keeping the mesh unchanged, using the *ValueFunction* class. We define the function :math:`g` on :math:`\mathbb{R}^2` by: .. math:: g(x,y) = x-y in order to define the spatial field function :math:`g_{dyn}` that acts on fields, defined by: .. math:: \forall t\in [0,T], g_{dyn}(X(\omega, t), Y(\omega, t)) = X(\omega, t) - Y(\omega, t) .. GENERATED FROM PYTHON SOURCE LINES 126-129 .. code-block:: default g = SymbolicFunction(['x1', 'x2'], ['x1-x2']) gDyn = ValueFunction(g, myMesh) .. GENERATED FROM PYTHON SOURCE LINES 130-131 Now you have to create the final process :math:`Z` thanks to :math:`g_{dyn}`: .. GENERATED FROM PYTHON SOURCE LINES 133-135 .. code-block:: default Z_proc = CompositeProcess(gDyn, myRS_proc) .. GENERATED FROM PYTHON SOURCE LINES 136-138 4. Draw some realizations of the process ---------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 140-146 .. code-block:: default N = 10 sampleZ_proc = Z_proc.getSample(N) graph = sampleZ_proc.drawMarginal(0) graph.setTitle(r'Some realizations of $Z(\omega, t)$') view = View(graph) .. image-sg:: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_mix_rv_process_001.png :alt: Some realizations of $Z(\omega, t)$ :srcset: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_mix_rv_process_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 147-149 5. Evaluate the probability that :math:`Z(\omega, t) \in \mathcal{D}` --------------------------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 151-152 We define the domaine :math:`\mathcal{D} = [2,4]` and the event :math:`Z(\omega, t) \in \mathcal{D}`: .. GENERATED FROM PYTHON SOURCE LINES 154-158 .. code-block:: default domain = Interval([2], [4]) print('D = ', domain) event = ProcessEvent(Z_proc, domain) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none D = [2, 4] .. GENERATED FROM PYTHON SOURCE LINES 159-160 We use the Monte Carlo sampling to evaluate the probability: .. GENERATED FROM PYTHON SOURCE LINES 162-178 .. code-block:: default MC_algo = ProbabilitySimulationAlgorithm(event) MC_algo.setMaximumOuterSampling(1000000) MC_algo.setBlockSize(100) MC_algo.setMaximumCoefficientOfVariation(0.01) MC_algo.run() result = MC_algo.getResult() proba = result.getProbabilityEstimate() print('Probability = ', proba) variance = result.getVarianceEstimate() print('Variance Estimate = ', variance) IC90_low = proba - result.getConfidenceLength(0.90)/2 IC90_upp = proba + result.getConfidenceLength(0.90)/2 print('IC (90%) = [', IC90_low, ', ', IC90_upp, ']') view.ShowAll() .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Probability = 0.7557575757575757 Variance Estimate = 5.6497333296231344e-05 IC (90%) = [ 0.7433940814993385 , 0.768121070015813 ] .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.166 seconds) .. _sphx_glr_download_auto_probabilistic_modeling_stochastic_processes_plot_mix_rv_process.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_mix_rv_process.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_mix_rv_process.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_