Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 用随机数替换变量_Matlab_Random_Substitution - Fatal编程技术网

Matlab 用随机数替换变量

Matlab 用随机数替换变量,matlab,random,substitution,Matlab,Random,Substitution,从Mathematica中的一个计算中,我得到了一个巨大的矩阵,其中一些条目中有编号为a[1]、…、a[100]的变量。我想把这个矩阵作为模板导入matlab,然后用随机数(正态分布)代替变量。我完全不熟悉Matlab中对符号变量的支持,也不确定它是否支持索引符号变量。我需要一些函数来搜索a[k],并用随机数替换它们 在Mathematica中,我有长度为2^n的矩阵,其中随着n的增长,它们变得越来越稀疏,并且依赖于5*n(但符号)变量a[k]。对于n=2,矩阵还不是稀疏的,看起来像(在Math

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

在Mathematica中,我有长度为2^n的矩阵,其中随着n的增长,它们变得越来越稀疏,并且依赖于5*n(但符号)变量a[k]。对于n=2,矩阵还不是稀疏的,看起来像(在Mathematica代码中):

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

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

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

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


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

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

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

新值将出现在矩阵
newMatrix


这不是超高效的;但这可能是一个开始,它可能会得到其他答案(如果你能确认这确实符合你的意图-仍然不能100%确定我理解你的问题)。

你能提供更多信息吗?请用你拥有的数据做一个“玩具”示例?听起来你有一个非常大的(N>>100)矩阵,里面只有100个不同的符号。您是否将其存储为字符串的单元格数组?我只是想澄清一下-我认为您有几个步骤。1) Mathematica生成了一个“巨大的矩阵”。2) 将该矩阵导入Matlab(如何?)3)用值替换符号。你很清楚该怎么做。您对(2)和(3)都有问题吗?谢谢您的评论。我非常清楚如何将包含数字的矩阵导入Matlab,但我不知道如何处理符号矩阵。然而,导入并不是我主要关心的问题,因为我会找到一些方法来自动化它,如果需要的话,可以使用一些外部脚本。我不知道如何在Matlab中做(3),到目前为止,我只知道如何生成随机数的向量,但我不知道如何将这样的向量替换为符号变量。你需要澄清如何存储“符号变量”。它们是字符串的单元数组吗?从技术上讲,它们
a[k]
是在k中计算的(尚未定义的)函数。但它们只能用作索引变量。这不需要经常做,所以我想这就足够了。非常感谢。
import = {'a1','a2';'a2','a4'};
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