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

时间:2014-02-24 08:33:25

标签: 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:Prime矢量(结果)

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

3 个答案:

答案 0 :(得分:2)

我假设你要这样做:

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的大小,你应该首先预先分配数组以获得显着的加速。

答案 1 :(得分:2)

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

正如Dan所说:

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 ) ;

答案 2 :(得分:2)

如果要存储所有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