SENSITIVITY ANALYSIS: DEPENDENT INPUT VARIABLES¶
In this example, the Kucherenko and ANCOVA sensitivity indices are computed and compared for the <https://www.sfu.ca/~ssurjano/shortcol short column function> with correlated input parameters.
Package imports¶
from uqpylab import sessions
Start a remote UQCloud session¶
# Start the session
mySession = sessions.cloud()
# (Optional) Get a convenient handle to the command line interface
uq = mySession.cli
# Reset the session
mySession.reset()
Processing .
.
done! uqpylab.sessions :: INFO :: This is UQ[py]Lab, version 1.00, running on https://uqcloud.ethz.ch. UQ[py]Lab is free software, published under the open source BSD 3-clause license. To request special permissions, please contact: - Stefano Marelli (marelli@ibk.baug.ethz.ch). A new session (3b12439f2607429b9bbbf8d911d74a89) started.
uqpylab.sessions :: INFO :: Reset successful.
Set the random seed for reproducibility¶
uq.rng(101,'twister');
2 - COMPUTATIONAL MODEL¶
The short-column function is an analytical 3-dimensional function that models the limit state of a short steel column with a rectangular cross-section, subjected to a bending moment and an axial force. The short column function |uq_shortcol| is supplied with UQpyLab.
Create a MODEL object from the function file:
ModelOpts = {
'Type': 'Model',
'ModelFun': 'shortcol.model',
}
myModel = uq.createModel(ModelOpts)
3 - PROBABILISTIC INPUT MODEL¶
The probabilistic input model consists of three random variables with the following marginals:
Variable | Description | Distribution | Mean | Std. deviation |
---|---|---|---|---|
Y | Yield stress | Lognormal | 5 MPa | 0.5 MPa |
M | Bending moment | Gaussian | 2000 N.mm | 400 N.mm |
P | Axial force | Gaussian | 500 N | 100 N |
Define the marginal distributions of the input model:
InputOpts = {
'Marginals': [
{
'Name': 'Y', # yield stress
'Type': 'Lognormal',
'Moments': [5, 0.5] # (MPa)
},
{
'Name': 'M', # bending moment
'Type': 'Gaussian',
'Moments': [2000, 400] # (N.mm)
},
{
'Name': 'P', # axial force
'Type': 'Gaussian',
'Moments': [500, 100] # (N)
}]
}
The parameters $P$ and $M$ are assumed to be correlated under Gaussian copula with a rank correlation of 0.72.
Define the Gaussian copula and its parameters:
InputOpts['Copula'] = {
'Type': 'Gaussian',
'RankCorr': [[1, 0, 0], [0, 1, 0.72], [0, 0.72, 1]]
}
Create an INPUT object based on the specified marginals and copula:
myInput = uq.createInput(InputOpts)
Show the correlated input:
uq.display(myInput);