Model模块(UQLab)

简介

如今,计算模型已用于自然科学、社会科学和工程的大多数领域。 UQLAB 平台的目的是量化模型参数中的不确定性对此类模型预测的影响。本文描述了如何在 UQLab 平台中定义这样的计算模型。模型可以像 Matlab 句柄函数或 Matlab.m 文件一样简单。可以通过将第三方代码包装到 m 文件中来使用它们。
不确定量化中常见模型有:分析函数、数值模型、第三方代码包装、工作流。UQLAB MODEL 模块提供了一个方便的工具,可以在不确定性量化分析中包含前三种类型的模型(函数、数值模型和包装器)。

方法

创建分析函数模型

在这里插入图片描述
其中 a = 7 和 b = 0.1 是标量值。输入向量 X 包括 3 个均匀分布在区间 Xi ∼ U(-π, π) 中的分量。
(运行下一块代码时记得clear,以免出错!)
(1)从*.m文件中创建分析函数模型

ishigami_function.m
function Y = ishigami_function(X)
    Y = sin(X(:,1)) + 7*(sin(X(:,2).^2)) + 0.1*(X(:,3).^4).*sin(X(:,1));
end

该函数是矢量化的,

size(X)=[N,M];

X的每一行对应X的一个实现,每一列对应于X的一个分量。可以在 UQLAB 中从刚刚创建的函数中创建一个 MODEL 对象,如下所示:

uqlab
%字符串中的值为函数名
modelopts.mFile = 'ishigami_function';
myModel = uq_createModel(modelopts);

可以对输入矩阵X的模型响应进行评估:

Y = uq_evalModel(X);

UQLab默认*.m文件是矢量化的,可以指定所提供函数为非矢量化的:

ishigami_function_nonVec.m
function Y = ishigami_function_nonVec(X)
Y = sin(X(1)) + 7*(sin(X(2)^2)) + 0.1*X(3)^4.*sin(X(1));
end

启用非矢量评估

modelopts.mFile = 'ishigami_function_nonVec';
modelopts.isVectorized = false;
myModel = uq_createModel(modelopts);

在许多情况下,模型函数需要额外的非随机参数才能正确执行,例如非随机值、标志甚至配置文件。可以使用 .Parameters 结构在 MODEL 对象中包含非随机参数。其函数如下:

ishigami_function_parametric.m
function Y = ishigami_function_parametric(X,P)
Y = sin(X(:,1)) + P(1)*(sin(X(:,2).^2)) + P(2)*(X(:,3).^4).*sin(X(:,1));
end

可以使用如下代码设置P的值:

modelopts.mFile = 'ishigami_function_parametric';
modelopts.Parameters = [7, 0.1];
myModel = uq_createModel(modelopts);

可以随时更改现有模型的参数值:

myModel.Parameters(2) = 0.05;

(2)从函数句柄创建模型

f = @(X) sin(X(1)) + 7*(sin(X(2)^2)) + 0.1*(X(3)^4).*sin(X(1));
modelopts.mHandle = f;
myModel = uq_createModel(modelopts);

默认情况下,函数句柄是非矢量化的。同样,可以设置成矢量化的:

f = @(X) sin(X(:,1)) + 7*(sin(X(:,2).^2)) + 0.1*(X(:,3).^4).*sin(X(:,1));
modelopts.mHandle = f;
modelopts.isVectorized = true;
myModel = uq_createModel(modelopts);

函数句柄设置参数:

f = @(X,P) sin(X(1)) + P(1)*(sin(X(2)^2)) + P(2)*(X(3)^4).*sin(X(1));
modelopts.mHandle = f;
modelopts.Parameters = [7, 0.1];
myModel = uq_createModel(modelopts);

更改模型参数:

myModel.Parameters(2) = 0.05;

(3)从文本字符串创建模型
该函数模型的非参数、非矢量化版本可以定义为:

modelopts.mString = 'sin(X(1)) + 7*(sin(X(2)^2)) + 0.1*X(3)^4.*sin(X(1))'

矢量化:

modelopts.mString = 'sin(X(:,1)) + 7*(sin(X(:,2).^2)) + 0.1*(X(:,3).^4).*sin(X(:,1))';
modelopts.isVectorized = true;
myModel = uq_createModel(modelopts);

参数字符串:

modelopts.mString = 'sin(X(:,1)) + P(1)*(sin(X(:,2).^2)) + P(2)*(X(:,3).^4).*sin(X(:,1))';
modelopts.Parameters = [7, 0.1];
myModel = uq_createModel(modelopts);

更改参数:

myModel.Parameters(2) = 0.05;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值