用Matlab编写一个序列

时间:2017-10-06 14:38:01

标签: matlab sequence

我正在努力将这个问题写入Matlab Code。我知道我应该使用' for'循环,但我不知道如何使用它来做到这一点。 对于n≥1,考虑以下行向量序列v(n):

v(1) = (1)

v(2) = (1, 1)

v(3) = (2, 1)

v(4) = (1, 2, 1, 1)

v(5) = (1, 1, 1, 2, 2, 1)

v(6) = (3, 1, 2, 2, 1, 1)

通过读出上面行的内容给出每一行,例如v(6)包含“三个,两个二,一个”,这给出了v6。编写脚本以打印v(n),n = 1,最多n = 12。

1 个答案:

答案 0 :(得分:1)

一个可能的版本:

N = 6;
v = cell(N,1);
v{1} = 1;
for ii = 2:N
    v1 = v{ii-1};
    stop_point = find(diff(v1));
    if isempty(stop_point)
        n = length(v1);
        m = v1(1);
        v{ii} = [n,m];
    else
        n = diff([0,stop_point,length(v1)]);
        m = v1([stop_point,end]);
        v2 = [n;m];
        v{ii} = v2(:).';
    end
end

示例输出:

>> v{:}

ans =

     1


ans =

     1     1


ans =

     2     1


ans =

     1     2     1     1


ans =

     1     1     1     2     2     1


ans =

     3     1     2     2     1     1

>> 

注意:不等长度的行向量不能包含在矩阵中。存储它们的简单方法是使用单元阵列。