-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #377 from damar-wicaksono/dev-337
Add Lim et al. (2002) non-polynomial test function
- Loading branch information
Showing
8 changed files
with
216 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
--- | ||
jupytext: | ||
formats: ipynb,md:myst | ||
text_representation: | ||
extension: .md | ||
format_name: myst | ||
format_version: 0.13 | ||
jupytext_version: 1.14.1 | ||
kernelspec: | ||
display_name: Python 3 (ipykernel) | ||
language: python | ||
name: python3 | ||
--- | ||
|
||
(test-functions:lim-non-poly)= | ||
# Two-dimensional Non-Polynomial Function from Lim et al. (2002) | ||
|
||
```{code-cell} ipython3 | ||
import numpy as np | ||
import matplotlib.pyplot as plt | ||
import uqtestfuns as uqtf | ||
``` | ||
|
||
The non-polynomial test function from Lim et al. (2002) (or `LimNonPoly` for | ||
short) is a two-dimensional scalar-valued function. | ||
The function was used in {cite}`Lim2002` in the context of establishing the | ||
connection between Gaussian process metamodel and polynomials. | ||
|
||
```{code-cell} ipython3 | ||
:tags: [remove-input] | ||
from mpl_toolkits.axes_grid1 import make_axes_locatable | ||
my_fun = uqtf.LimNonPoly() | ||
# --- Create 2D data | ||
xx_1d = np.linspace(0.0, 1.0, 1000)[:, np.newaxis] | ||
mesh_2d = np.meshgrid(xx_1d, xx_1d) | ||
xx_2d = np.array(mesh_2d).T.reshape(-1, 2) | ||
yy_2d = my_fun(xx_2d) | ||
# --- Create two-dimensional plots | ||
fig = plt.figure(figsize=(10, 5)) | ||
# Surface | ||
axs_1 = plt.subplot(121, projection='3d') | ||
axs_1.plot_surface( | ||
mesh_2d[0], | ||
mesh_2d[1], | ||
yy_2d.reshape(1000,1000).T, | ||
linewidth=0, | ||
cmap="plasma", | ||
antialiased=False, | ||
alpha=0.5 | ||
) | ||
axs_1.set_xlabel("$x_1$", fontsize=14) | ||
axs_1.set_ylabel("$x_2$", fontsize=14) | ||
axs_1.set_zlabel("$\mathcal{M}(x_1, x_2)$", fontsize=14) | ||
axs_1.set_title("Surface plot of LimPoly", fontsize=14) | ||
# Contour | ||
axs_2 = plt.subplot(122) | ||
cf = axs_2.contourf( | ||
mesh_2d[0], mesh_2d[1], yy_2d.reshape(1000, 1000).T, cmap="plasma", levels=10, | ||
) | ||
axs_2.set_xlabel("$x_1$", fontsize=14) | ||
axs_2.set_ylabel("$x_2$", fontsize=14) | ||
axs_2.set_title("Contour plot of LimPoly", fontsize=14) | ||
divider = make_axes_locatable(axs_2) | ||
cax = divider.append_axes('right', size='5%', pad=0.05) | ||
fig.colorbar(cf, cax=cax, orientation='vertical') | ||
axs_2.axis('scaled') | ||
fig.tight_layout(pad=4.0) | ||
plt.gcf().set_dpi(75); | ||
``` | ||
|
||
|
||
## Test function instance | ||
|
||
To create a default instance of the test function: | ||
|
||
```{code-cell} ipython3 | ||
my_testfun = uqtf.LimNonPoly() | ||
``` | ||
|
||
Check if it has been correctly instantiated: | ||
|
||
```{code-cell} ipython3 | ||
print(my_testfun) | ||
``` | ||
|
||
## Description | ||
|
||
The test function is defined as follows[^location]: | ||
|
||
$$ | ||
\mathcal{M}(\boldsymbol{x}) = \frac{(30 + 5 x_1 \sin{(5 x_1)}) (4 + \exp{(-5x_2)}) - 100}{6} | ||
$$ | ||
where $\boldsymbol{x} = \{ x_1, x_2 \}$ | ||
is the two-dimensional vector of input variables further defined below. | ||
|
||
```{note} | ||
This function is a rescaled version of Eq. (6) in {cite}`Welch1992`. | ||
The function is also similar to its | ||
{ref}`polynomial counterpart <test-functions:lim-poly>`; in fact, | ||
the coefficients of the polynomial are chosen with that goal in mind. | ||
``` | ||
|
||
## Probabilistic input | ||
|
||
The input consists of two uniformly distributed random variables as shown | ||
below. | ||
|
||
```{code-cell} ipython3 | ||
:tags: [hide-input] | ||
print(my_testfun.prob_input) | ||
``` | ||
|
||
## Reference results | ||
|
||
This section provides several reference results of typical UQ analyses involving | ||
the test function. | ||
|
||
### Sample histogram | ||
|
||
Shown below is the histogram of the output based on $100'000$ random points: | ||
|
||
```{code-cell} ipython3 | ||
:tags: [hide-input] | ||
xx_test = my_testfun.prob_input.get_sample(100000) | ||
yy_test = my_testfun(xx_test) | ||
plt.hist(yy_test, bins="auto", color="#8da0cb"); | ||
plt.grid(); | ||
plt.ylabel("Counts [-]"); | ||
plt.xlabel("$\mathcal{M}(\mathbf{X})$"); | ||
plt.gcf().set_dpi(150); | ||
``` | ||
|
||
## References | ||
|
||
```{bibliography} | ||
:style: unsrtalpha | ||
:filter: docname in docnames | ||
``` | ||
|
||
[^location]: See Eq. (28), Section 7, p. 121 {cite}`Lim2002`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters