# mud.examples package#

## mud.examples.comparison module#

MUD vs MAP Comparison Example

Functions for running 1-dimensional polynomial inversion problem.

mud.examples.comparison.comparison_plot(d_prob: DensityProblem, b_prob: BayesProblem, space: str = 'param', ax: = None, save_path: = None, dpi: int = 500)[source]#

Generate plot comparing MUD vs MAP solution

Parameters
• d_prob (mud.base.DensityProblem) – DensityProblem object that has been solved already with d_prob.estimate() or another such method.

• b_prob (mud.base.BayesProblem) – BayesProblem object that has been solved already with b_prob.estimate() or another such method.

• space (str, default="param") – What space to plot. Default is “param” to plot the parameter, or input, space, and thus the updated parameter distributions and associated MUD/MAP solutions. Any other value will plot the observable space, which includes the predicted distribution for the DensityProblem and the data-likelihood distribution for the BayesProblem.

• ax (matplotlib.pyplot.Axes, optional) – Existing matplotlib Axes object to plot onto. If none provided (default), then a figure is initialized.

• save_path (str, optional) – Path to save figure to.

• dpi (int) – If set to save_path is specified, then the resolution of the saved image to use.

Returns

ax – Axes object that was plotted onto or created.

Return type

matplotlib.pyplot.Axes

mud.examples.comparison.run_comparison_example(p: int = 5, num_samples: int = 1000, mu: float = 0.25, sigma: float = 0.1, domain: List[int] = [-1, 1], N_vals: List[int] = [1, 5, 10, 20], latex_labels: bool = True, save_path: = None, dpi: int = 500, close_fig: bool = False)[source]#

Run MUD vs MAP Comparison Example

Entry-point function for running simple polynomial example comparing Bayesian and Data-Consistent solutions. Inverse problem involves inverting the polynomial QoI map Q(lam) = lam^5.

Parameters
• p (int, default=5) – Power of polynomial in QoI map.

• num_samples (int, default=100) – Number of $$\lambda$$ samples to generate from a uniform distribution over domain for solving inverse problem.

• mu (float, default=0.25) – True mean value of observed data.

• sigma (float, default=0.1) – Standard deviation of observed data.

• domain (numpy.typing.ArrayLike, default=[[-1, 1]]) – Domain to draw lambda samples from.

• N_vals (List[int], default=[1, 5, 10, 20]) – Values for N, the number of data-points to use to solve inverse problems, to use. Each N value will produce two separate plots.

• save_path (str, optional) – If provided, path to save the resulting figure to.

• dpi (int, default=500) – Resolution of images saved

• close_fig (bool , default=False) – Set to True to close figure and only save it. Useful when running in notebook environments.

Returns

resmatplotlib.axes.Axes]] List of Tuples of (d_prob, b_prob, ax) containing the resulting Density and Bayesian problem objects in d_prob and b_prob, resp., and the matplotlib axis to which the results were plotted, for each N case run.

Return type

## mud.examples.exp_decay module#

Exponential Decay Example

mud.examples.exp_decay.exp_decay_1D(u_0=0.75, time_range=[0, 4.0], domain=[0, 1], num_samples=10000, lambda_true=0.5, t_start=0.0, sampling_freq=100.0, std_dev=0.05)[source]#
mud.examples.exp_decay.exp_decay_2D(time_range=[0, 3.0], domain=array([[0.7, 0.8], [0.25, 0.75]]), num_samples=100, lambda_true=[0.75, 0.5], N=100, t_start=0.0, sampling_freq=10.0, std_dev=0.05)[source]#

## mud.examples.linear module#

MUD Linear Examples

Functions for examples for linear problems.

mud.examples.linear.noisy_linear_data(M, reference_point, std, num_data=None)[source]#

Creates data produced by model assumed to be of the form:

Q(lam) = M * lam + odj,i =Mj(λ†)+ξi, ξi ∼N(0,σj2), 1≤i≤Nj

mud.examples.linear.random_linear_problem(dim_input: int = 10, dim_output: int = 10, mean_i: Optional[Union[_SupportsArray[dtype], _NestedSequence[_SupportsArray[dtype]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]] = None, cov_i: Optional[Union[_SupportsArray[dtype], _NestedSequence[_SupportsArray[dtype]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]] = None, seed: = None)[source]#

Construct a random linear Gaussian Problem

mud.examples.linear.random_linear_wme_problem(reference_point, std_dev, num_qoi=1, num_observations=10, dist='normal', repeated=False)[source]#

Create a random linear WME problem

Parameters
• reference_point (np.ndarray) – Reference true parameter value.

• dist (str, default='normal') – Distribution to draw random linear map from. ‘normal’ or ‘uniform’ supported at the moment.

• num_qoi (int, default = 1) – Number of QoI

• num_observations (int, default = 10) – Number of observation data points.

• std_dev (np.ndarray, optional) – Standard deviation of normal distribution from where observed data points are drawn from. If none specified, noise-less data is created.

mud.examples.linear.rotation_map(qnum=10, tol=0.1, b=None, ref_param=None, seed=None)[source]#

Generate test data linear rotation map

mud.examples.linear.rotation_map_trials(numQoI=10, method='ordered', num_trials=100, model_eval_budget=100, ax=None, color='r', label='Ordered QoI $(10\\times 10D)$', seed=None)[source]#

Run a set of trials for linear rotation map problems

mud.examples.linear.run_contours(plot_fig: Optional[List[str]] = None, save_path: = None, dpi: int = 500, close_fig: bool = False, **kwargs)[source]#

Run Contours

Produces contour plots of 2-D parameter space for 2-to-1 linear map found in Figures 3 and 5 of [ref]. These contour plots show the different regularization terms between Bayesian and Data-Consistent solutions that lead to a different optimization problem and therefore a different solution to the inverse problem.

Parameters
• plot_fig (str, default='all') – Which figures to produce. Possible options are data_mismatch,

• save_path (str, optional) – If provided, path to save the resulting figure to.

• dpi (int, default=500) – Resolution of images saved

• close_fig (bool, default=False) – Set to True to close figure and only save it.

• kwargs (dict, optional) –

kwargs to overwrite default arguments used to build linear problem. Possible values include and their expected types, and default values:

• A : 2D array, default=[[1, 1]]

• b - 1D array, default = 

• y - 1D array, default =

• mean_i - 1D array, default = [0.25, 0.25]

• cov_i - 2D array, default = [[1, -0.25], [-0.25, 0.5]]

• cov_o - 1D array, default = 

Returns

lin_prob – LinearGaussianProblem object with solved linear inverse problem and associated data within.

Return type

mud.base.LinearGaussianProblem

mud.examples.linear.run_high_dim_linear(dim_input: int = 100, dim_output: int = 100, seed: int = 21, save_path: = None, dpi: int = 500, close_fig: bool = True)[source]#

Run High Dimension Linear Example

Reproduces Figure 6 from [ref], showing the relative error between the true parameter value and the MUD, MAP and least squares solutions to linear gaussian inversion problems for increasing dimension and rank of a randomly generated linear map A.

Parameters
• dim_input (int, default=20) – Input dimension of linear map (number of rows in A).

• dim_output (int, default=5) – Output dimension of linear map (number of columns in A).

• seed (int, default = 21) – To fix results for reproducibility. Set to None to randomize results.

• save_path (str, optional) – If provided, path to save the resulting figure to.

• dpi (int, default=500) – Resolution of images saved

• close_fig (bool, default=False) – Set to True to close figure and only save it.

Returns

rank_errs, dim_errs – Tuple containing the error between the true solution and each of the (mud, map, least_squares) solutions for increasing dimension and rank from 1 to dim_output. These arrays are used to produce the plots given.

Return type

Tuple[np.array, np.array]

mud.examples.linear.run_wme_covariance(dim_input: int = 20, dim_output: int = 5, sigma: float = 0.1, Ns: List[int] = [10, 100, 1000, 10000], seed: = None, save_path: = None, dpi: int = 500, close_fig: bool = False)[source]#

Weighted Mean Error Map Updated Covariance

Reproduces figure 4 from [ref], showing the spectral properties of the updated covriance for a the Weighted Mean Error map on a randomly generated linear operator as more data from repeated measurements is used to constructthe QoI map.

Parameters
• dim_input (int, default=20) – Input dimension of linear map (number of rows in A).

• dim_output (int, default=5) – Output dimension of linear map (number of columns in A).

• sigma (float, default=1e-1) – N(0, sigma) error added to produce “measurements” from linear operator.

• Ns (List[str]. default = [10, 100, 1000, 10000]) – List of number of data points to collect in constructing Q_WME map to view how the spectral properties of the updated covariance change as more data is included in the Q_WME map.

• seed (int, default = 21) – To fix results for reproducibility. Set to None to randomize results.

• save_path (str, optional) – If provided, path to save the resulting figure to.

• dpi (int, default=500) – Resolution of images saved

• close_fig (bool, default=False) – Set to True to close figure and only save it.

Returns

linear_wme_prob, ax – Tuple containing solved linear WME problems for each Ns value, and axes containing the plot of the first 20 eigenvalues of the updated covariances for each Q_WME map.

Return type

Tuple[mud.base.LinearWMEProblem, matplotlib.pyplot.Axes]

## mud.examples.simple module#

Simple Example

mud.examples.simple.identity_1D_bayes_prob(num_samples=1000, num_obs=50, mu=0.5, sigma=0.05, init_dist=<scipy.stats._distn_infrastructure.rv_continuous_frozen object>, domain=None)[source]#

Identity 1D Bayes Problem

Solving 1d identity map parameter estimation problem using the BayesProlem class and the map point estimate.

mud.examples.simple.identity_1D_density_prob(num_samples=2000, num_obs=20, mu=0.5, sigma=0.05, weights=None, init_dist='uniform', normalize=False, domain=[0, 1], analytical_pred=True)[source]#

Identity 1D Density Problem

Solving 1d identity map parameter estimation problem using the DensityProblem class and the mud point estimate.

mud.examples.simple.identity_1D_temporal_prob(num_samples=2000, num_obs=20, y_true=0.5, noise=0.05, weights=None, init_dist=<scipy.stats._distn_infrastructure.rv_continuous_frozen object>, normalize=False, domain=None, wme_map=True, analytical_pred=True)[source]#

Identity 1D Temporal Problem

Solving 1d identity map parameter estimation problem using the SpatioTemporalProblem class to construct DensityProblem class using the WME map to aggregate data.

mud.examples.simple.polynomial_1D_data(p: int = 5, num_samples: int = 1000, domain: ~typing.Union[~numpy._typing._array_like._SupportsArray[~numpy.dtype], ~numpy._typing._nested_sequence._NestedSequence[~numpy._typing._array_like._SupportsArray[~numpy.dtype]], bool, int, float, complex, str, bytes, ~numpy._typing._nested_sequence._NestedSequence[~typing.Union[bool, int, float, complex, str, bytes]]] = [[-1, 1]], init_dist=<scipy.stats._distn_infrastructure.rv_continuous_frozen object>, mu: float = 0.25, sigma: float = 0.1, N: int = 1)[source]#

Polynomial 1D QoI Map

Generates test data for an inverse problem involving the polynomial QoI map

(1)#$\begin{split}Q_p(\\lambda) = \\lambda^p\end{split}$

Where the uncertain parameter to be determined is $$\lambda$$. num_samples samples from a uniform distribution over domain are generated using numpy.random.uniform() and pushed through the forward model. N observed data points are generated from a normal distribution centered at mu with standard deviation sigma using scipy.stats.norm.

Parameters
• p (int, default=5) – Power of polynomial in QoI map.

• num_samples (int, default=100) – Number of $$\lambda$$ samples to generate from a uniform distribution over domain for solving inverse problem.

• domain (numpy.typing.ArrayLike, default=[[-1, 1]]) – Domain to draw lambda samples from.

• mu (float, default=0.25) – True mean value of observed data.

• sigma (float, default=0.1) – Standard deviation of observed data.

• N (int, default=1) – Number of data points to generate from observed distribution. Note if 1, the default value, then the singular drawn value will always be mu.

Returns

data – Tuple of (lam, q_lam, data) where lam is contains the $$\lambda$$ samples, q_lam the value of $$Q_p(\lambda)$$, and data the observed data values from the $$\mathcal{N}(\mu, \sigma)$$ distribution.

Return type

Tuple[numpy.ndarray,]

Examples

Note when N=1, data point drawn is always equal to mean.

>>> import numpy as np
>>> from mud.examples.comparison import polynomial_1D_data
>>> lam, q_lam, data = polynomial_1D_data(num_samples=10, N=1)
>>> data
0.25
>>> len(lam)
10


For higher values of N, values are drawn from N(mu, sigma) distribution.

>>> lam, q_lam, data = polynomial_1D_data(N=10, mu=0.5, sigma=0.01)
>>> len(data)
10
>>> np.mean(data) < 0.6
True