用随机数替换变量

时间:2014-05-01 22:03:25

标签: matlab random substitution

根据Mathematica中的计算,我在一些条目中得到了一个带有a[1],...,a[100]形式的编号变量的巨大矩阵。我想将此矩阵作为模板导入matlab,然后用随机数(正态分布)代替变量。我完全不熟悉Matlab中符号变量的支持,我不确定它是否支持索引符号变量。我需要一些搜索a[k]的函数,并用随机数替换它们。

在Mathematica中,我有矩阵长方形2 ^ n的矩阵,当n增长时,它变得越来越稀疏,并依赖于5 * n(但是符号)变量a [k]。对于n = 2,矩阵根本不稀疏,看起来像(在Mathematica-Code中):

  

{{a [3] + a [3],a [7] - I a [8],a [10],I a [8]},

     

{I a [8],+ a [6],I a [5],-I a [9] - a [8]},

     

{a [7] + I a [8],+ a [2],I a [5], - a [7]},

     

{I a [8],a [2],a [2] + I a [15], - a [8]}}

存在一个脚本ToMatlab,它将Mathematica表示矩阵转换为Matlab表示法。我基本上可以自由地重命名变量,因为它最适合在Matlab中使用。现在我想在Matlab中创建一个函数,它返回这个精确的矩阵(对于固定的n现在已经足够了,所以矩阵确实是固定的)并用正态分布的随机数替换a [k]。

1 个答案:

答案 0 :(得分:0)

假设你有一个字符串的单元格数组(比这个简单的例子大得多):

import = {'a1','a2';'a2','a4'};

然后你可以用正态分布的随机数替换100个值,如下所示(显然你需要用你需要的值替换常量等):

newMatrix = zeros(size(import));

% generate 100 random numbers:
mean = 123.45;
stdDev = 21.0;
N = 100;
randVals = randn(1,N) * stdDev + mean;

for ii=1:N
  indx = find(ismember(import, sprintf('a%d',ii)));
  newMatrix(indx) = randVals(ii);
end

新值将位于矩阵newMatrix

这不是超级有效的;但它可能是一个开始,它可能得到其他答案(如果你可以确认这确实做你想要的 - 仍然不是100%确定我理解你的问题。)