Matlab 如何编写for循环

Matlab 如何编写for循环,matlab,Matlab,我已经编写了一个代码,代码如下: r=16; n=10; w=[3 5] R2=n; R3=floor(r/w(2))*w(2); R4=floor(r/w(3))*w(3); [A2,padded]=vec2mat(vec(1:R2),w(1)); [A3,padded]=vec2mat(vec(R2+1:R2+R3),w(2)); 我需要为A100生成此代码。因此,如果我手动写入A100,看起来不太好。因此,我想使用for loop来编写此代码。我想在生成A2-A10的部分上使用

我已经编写了一个代码,代码如下:

r=16;
n=10;
w=[3 5]


R2=n;
R3=floor(r/w(2))*w(2);
R4=floor(r/w(3))*w(3);


[A2,padded]=vec2mat(vec(1:R2),w(1));
[A3,padded]=vec2mat(vec(R2+1:R2+R3),w(2)); 
我需要为
A100
生成此代码。因此,如果我手动写入A100,看起来不太好。因此,我想使用
for loop来编写此代码。
我想在
生成
A2-A10
的部分上使用
for loop


Matlab专家需要您的帮助。

您不应该将您的资料放在单独的变量中,而是放在Matlab中称为“单元数组”的数据结构中。如果这些值都是标量值,您甚至可以使用“普通”数组,即矩阵

所以,为了准备,你需要

R=56;
N=51;
W=[3 5 6 8 13 17 25 25 51];

R2=N; %//why that? are you sure?

RR = floor(R./W).*W;
%// So if you need this exception:
RR(1) = N;
%// or not, is up to you.

rows = cumsum(RR./W);

%//Now, whatever vec2mat returns, could be more than a simple scalar, so for AA we use
%//a cell array.

AA = repmat({[]}, 1, length(W));
offset=0;
for x=1:length(W)
    increment=RR(i)
    [AA{x},padded]=vec2mat(vec(offset+1:offset+increment),W(x));
    offset = offset+increment;
end
%%// Your AA values are now as well shifted by 1, so AA{1} is your old A2, and so on.
编辑:

使用矢量化作为查找
RR
row
。但是我不认为
AA
创建可以很好地矢量化

编辑2:

我刚把丹的解决方案加入我的方案中。对于
length(W)
的大值,它可能会带来巨大的性能提升

编辑3:


我为你的老问题编写的代码应该能让你了解这些概念;您可以尝试自己为新部件实现它们。当您没有成功时,您可以询问哪些不起作用。

+1 for
R2=N;%为什么?你确定吗?
,我的想法完全一样。这个值是R2=51,这就是为什么我要写R2=N。@glglglgl你想用我的矢量化代码替换前两个循环吗?然后我们可以留下你的答案,删除我的,因为我的答案不完整anyway@Dan我只是这么做了,但是我不认为删除你的答案有什么意义。我删除了。这没有任何意义。最好像现在一样将所有内容都放在一个答案中。@Dennis Jaheruddin代码已编辑请尝试启动一个新的matlab会话(或至少使用
清除
),然后粘贴此代码。你会发现它仍然不起作用。对不起,我忘了提到一个变量。现在它起作用了。