MATLAB中有这个功能吗?

Cha*_*Tan 0 arrays optimization matlab simplify

考虑以下示例,对于指定奇数N = 51 的用户,应看到以下输出:

A = [1 4 2 5 3];

为了N = 7 A = [1 5 2 6 3 7 4];

奇数的更一般形式N

A = [1 ceil(N/2+1) 2 ceil(N/2+2) ... N ceil(N/2)];

我是这样解决这个问题的

A = zeros(1, N);
a1 = 1:ceil(N/2): a2 = ceil(N/2+1):N;
j = 1; k = 1; 

for i = 1:N
    if rem(i, 2) ~= 0
        A(i) = a1(j);
        j = j+1;
    else 
        A(i) = a2(k);
        k = k+1;
    end
end 
Run Code Online (Sandbox Code Playgroud)

我觉得有更好的方法来解决这个问题,优化和简单化。如果您能引导我走向我所追求的目标,我将不胜感激。

rah*_*ma1 8

一个线性解:

A([1:2:N, 2:2:N]) = 1:N;
Run Code Online (Sandbox Code Playgroud)

可以看作是这些索引操作的组合:

A(1:2:N) = 1:(N+1)/2;
A(2:2:N) = (N+3)/2:N;
Run Code Online (Sandbox Code Playgroud)