gpt4 book ai didi

matlab - 具有随机变量条目的矩阵的合适数据结构是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:47 25 4
gpt4 key购买 nike

我目前在与模拟相关的领域工作,并尝试设计一种可以在矩阵中包含随机变量的数据结构。为了激发这一点,让我说我有以下矩阵:

[a b; c d]

我想找到一个允许a, b, c, d 为实数或随机变量的数据结构。例如,假设 a = 1b = -1c = 2 但让 d是均值为0、标准差为1的正态分布随机变量。

我心目中的数据结构不会赋予d任何值(value)。但是,我也希望能够设计一个可以接受结构的函数,模拟一个uniform(0,1),使用一个逆函数获得d的值CDF 然后吐出一个实际的矩阵。

我有几个想法可以做到这一点(都与 MATLAB icdf 函数相关)但想知道更有经验的程序员如何做到这一点。在此应用程序中,结构尽可能“精简”很重要,因为我将处理非常非常大的矩阵,内存将是一个问题。

编辑#1:

感谢大家的反馈。我决定使用单元格结构并将随机变量存储为函数句柄。为了节省大型应用程序的一些处理时间,我决定在“评估”部分引用随机变量的位置以节省时间。

最佳答案

一个解决方案是最初将矩阵创建为 cell array包含数值和 function handles到旨在为该条目生成值的函数。对于您的示例,您可以执行以下操作:

generatorMatrix = {1 -1; 2 @randn};

然后您可以创建一个采用上述形式的矩阵的函数,evaluates the cells containing function handles , 然后将结果与数字单元格条目组合到 create a numeric matrix用于进一步计算:

function numMatrix = create_matrix(generatorMatrix)
index = cellfun(@(c) isa(c,'function_handle'),... %# Find function handles
generatorMatrix);
generatorMatrix(index) = cellfun(@feval,... %# Evaluate functions
generatorMatrix(index),...
'UniformOutput',false);
numMatrix = cell2mat(generatorMatrix); %# Change from cell to numeric matrix
end

您可以做的一些其他事情是使用 anonymous functions使用内置函数做更复杂的事情或创建不同大小的单元格条目。以下示例矩阵说明了这一点,该矩阵可用于创建一个矩阵,其中第一行包含一个 5,后面跟着 9 个,其他 9 行包含一个 1,后面跟着 9 个从 5 到 10 之间均匀分布的数字:

generatorMatrix = {5 ones(1,9); ones(9,1) @() 5*rand(9)+5};

每次将此矩阵传递给 create_matrix 时,它都会创建一个新的 10×10 矩阵,其中 9×9 子矩阵将包含一组不同的随机值。


替代解决方案...

如果您的矩阵可以很容易地分解为子矩阵 block (如上面的第二个示例所示),那么使用元胞数组存储数值和函数句柄可能是您的最佳选择。

但是,如果随机值是稀疏地散布在整个矩阵中的单个元素,则类似于 user57368 suggested 的变体可能会更好。您可以将矩阵数据存储在三个部分中:一个带有占位符的数字矩阵(例如 NaN ),其中随机生成的值将放在其中,一个包含 linear indices 的索引向量随机生成值的位置,以及与包含 function handles 的索引向量长度相同的元胞数组用于生成随机值的函数。为了方便起见,您甚至可以将这三段数据存储在 structure 中。 .

例如,下面定义了一个 3×3 矩阵,其中 3 个随机值存储在索引 2、4 和 9 中,分别取自 normal distribution。 , 一个 uniform distribution从 5 到 10,以及一个 exponential distribution :

matData = struct('numMatrix',[1 nan 3; nan 2 4; 0 5 nan],...
'randIndex',[2 4 9],...
'randFcns',{{@randn , @() 5*rand+5 , @() -log(rand)/2}});

并且您可以定义一个新的 create_matrix 函数来轻松地从这些数据创建一个矩阵:

function numMatrix = create_matrix(matData)
numMatrix = matData.numMatrix;
numMatrix(matData.randIndex) = cellfun(@feval,matData.randFcns);
end

关于matlab - 具有随机变量条目的矩阵的合适数据结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4635654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com