如何在 Matlab 中存储矩阵/向量和值



我正在尝试存储向量。当我在循环中运行程序时,我看到了所有值,但是当在循环外引用时,仅计算和存储最后一个向量(以素数 953 结尾的向量,见下文)。使用PVX向量完成的任何计算仅通过最后一个条目完成。我希望PVX对所有结果进行计算,而不仅仅是最后一个条目。如何存储这些结果以进行计算?

这是代码:

PV=[2 3 5 7 11 13 17 19 23 29];
for numba=2:n
    if mod(numba,PV)~=0;
        xp=numba;
     PVX=[2 3 5 7 11 13 17 19 23 29 xp]

    end
end

前几个结果如下所示:

PVX:素向量(结果)

PVX =
     2     3     5     7    11    13    17    19    23    29    31
PVX =
     2     3     5     7    11    13    17    19    23    29    37
PVX =
     2     3     5     7    11    13    17    19    23    29    41
PVX =
     2     3     5     7    11    13    17    19    23    29    43

PVX =  ...........................................................

PVX =
     2     3     5     7    11    13    17    19    23    29    953

如果要存储所有PVX值,请为每个值使用不同的行:

PV = [2 3 5 7 11 13 17 19 23 29];
PVX = [];
for numba=2:n
    if mod(numba,PV)~=0;
        xp = numba;
        PVX = [PVX; 2 3 5 7 11 13 17 19 23 29 xp];
    end
end

当然,如果最好将PVX矩阵初始化为适当的大小,但行数很难预测。


或者,构建不带循环的PVX

xp = setdiff(primes(n), primes(29)).'; %'// all primes > 29 and <= n
PVX = [ repmat([2 3 5 7 11 13 17 19 23 29], numel(xp), 1) xp ];

例如,对于n=100,上述任何一种方法都给出了

PVX =
     2     3     5     7    11    13    17    19    23    29    31
     2     3     5     7    11    13    17    19    23    29    37
     2     3     5     7    11    13    17    19    23    29    41
     2     3     5     7    11    13    17    19    23    29    43
     2     3     5     7    11    13    17    19    23    29    47
     2     3     5     7    11    13    17    19    23    29    53
     2     3     5     7    11    13    17    19    23    29    59
     2     3     5     7    11    13    17    19    23    29    61
     2     3     5     7    11    13    17    19    23    29    67
     2     3     5     7    11    13    17    19    23    29    71
     2     3     5     7    11    13    17    19    23    29    73
     2     3     5     7    11    13    17    19    23    29    79
     2     3     5     7    11    13    17    19    23    29    83
     2     3     5     7    11    13    17    19    23    29    89
     2     3     5     7    11    13    17    19    23    29    97

我假设你要这样做:

PVX=[2 3 5 7 11 13 17 19 23 29];
for numba=2:n
    if mod(numba,PVX)~=0;
        xp=numba;
        PVX(end+1) = xp;
        %// Or alternatively PVX = [PVX, xp];
    end
end

但是,如果您可以估计最终 PVX 的大小,则应首先预先分配阵列以显著加快速度。

所以,看起来你需要所有的素数直到n

正如丹所说,使用这个:

PVX=[2 3 5 7 11 13 17 19 23 29 ];
for numba=2:n
    if mod(numba,PVX)~=0
        xp=numba;
        PVX=[ PVX xp];
    end
end

或者为什么不简单地使用primes功能?

PVX = primes( n ) ;

最新更新