2013-08-05 3 views
0

4 개의 인덱스 i, j, k 및 l을 사용하여 생성 된 행렬이 있습니다. 나는이 작업을 수행 할 때인덱싱 매트릭스

for i = 1:N 
for j = 1:2 
    for k = 1:2 
    for l = 1:N 
    Matrix(l,2(j+2*i-3)+k) = Value 
    end 
    end 
end 
end 

는 다음과 같이 변경 매트릭스를 생산하고, 행렬을 만들려면 다음 기법을 사용

       Columns 
     i = 1 i = 1 i = 1 i = 1 i = 2 i = 2 i = 2 i = 2 ... 
     j = 1 j = 1 j = 2 j = 2 j = 1 j = 1 j = 2 j = 2 ... 
     k = 1 k = 2 k = 1 k = 2 k = 1 k = 2 k = 1 k = 2 ... 
l = 1 
l = 2 
    . 
    . 
    . 

불행히도 내가 잘못 색인을 변경해야합니다. 나는 계산을 바꾸고 싶지 않습니다. 나는에 위의 매트릭스를 변경하는 코드가 필요합니다 다음 즉

       Columns 
      l = 1 l = 1 l = 2 l = 2 l = 1 l = 1 l = 2 l = 2 ... 
      k = 1 k = 2 k = 1 k = 2 k = 1 k = 2 k = 1 k = 2 ... 
i = 1 j = 1    
i = 1 j = 2    
i = 2 j = 1 
i = 2 j = 2  
     . 
     . 
     . 

모양을 코드, 나는이 작업을 수행하려면 어떻게

for i = 1:N 
for j = 1:2 
    for k = 1:2 
    for l = 1:N 
    Matrix(New Index) = Matrix(Old Index) 
    end 
    end 
end 
end 

를? 감사.

을 설치해야 Matrix 크기 N x 4N의 (그것을 a 전화) 및 매트릭스를 크기 2N x 2N의 (그것을 b 전화) 만들려면 :

+0

, 그냥 다시 있지만, 올바른 지표와 코드를 실행하려면 그나마 그 이유는 무엇입니까? –

+0

예. 계산은 복잡하고 중첩, 다중 좌표 변환 및 2 가지 유형의 가우스 통합이 필요합니다. –

+0

나는 당신이 이미 올바른 지표를 알고 있다고 생각하니? 다른 말로하면 새로운 색인과 이전 색인의 관계를 알 수 있습니까? –

답변

0

내가 문제를 정확하게 이해하고 있는지 확인 할 수 있습니다. 그것은 위의 올바른

b = f(1,1,1,1) f(1,1,2,1) f(1,1,1,2) f(1,1,2,2) ... f(1,1,2,N) 
    f(1,2,1,1) f(1,2,2,1) f(1,2,1,2) f(1,2,2,2) ... f(1,2,2,N) 
    f(2,1,1,1) f(2,1,2,1) f(2,1,1,2) f(2,1,2,2) ... f(2,1,2,N) 
    f(2,2,1,1) f(2,2,2,1) f(2,2,1,2) f(2,2,2,2) ... f(2,2,2,N) 
    ... 
    f(N,2,1,N) f(N,2,2,N) f(N,2,1,N) f(N,2,2,N) ... f(N,2,2,N) 

모든 당신이 할 필요가 : 이제

a = f(1,1,1,1) f(1,1,2,1) f(1,2,1,1) f(1,2,2,1) ... f(N,2,2,1) 
    f(1,1,1,2) f(1,1,2,2) f(1,2,1,2) f(1,2,2,2) ... f(N,2,2,2) 
    f(1,1,1,3) f(1,1,2,3) f(1,2,1,3) f(1,2,2,3) ... f(N,2,2,3) 
    f(1,1,1,4) f(1,1,2,4) f(1,2,1,4) f(1,2,2,4) ... f(N,2,2,4) 
    ... 
    f(1,1,1,N) f(1,1,2,N) f(1,2,1,N) f(1,2,2,N) ... f(N,2,2,N) 

당신이되도록 b 원하는 : a

요소가되도록 설정 (i,j,k,l)에 의해 정의된다 is :

b = zeros(2*N); 
b(:, 1:2:end) = a(:, 1:2:end)'; 
b(:, 2:2:end) = a(:, 2:2:end)'; 

예 :

n = 5; 
a = 1:(4*n*n); 
a = reshape(a, n, 4*n); 

b = zeros(2*n); 
b(:, 1:2:end) = a(:, 1:2:end)'; 
b(:, 2:2:end) = a(:, 2:2:end)'; 

출력 : 나는 좋은 이유가 추측

a = 

Columns 1 through 13: 

    1  6 11 16 21 26 31 36 41 46 51 56 61 
    2  7 12 17 22 27 32 37 42 47 52 57 62 
    3  8 13 18 23 28 33 38 43 48 53 58 63 
    4  9 14 19 24 29 34 39 44 49 54 59 64 
    5 10 15 20 25 30 35 40 45 50 55 60 65 

Columns 14 through 20: 

    66 71 76 81 86 91 96 
    67 72 77 82 87 92 97 
    68 73 78 83 88 93 98 
    69 74 79 84 89 94 99 
    70 75 80 85 90 95 100 

b = 

    1  6  2  7  3  8  4  9  5 10 
    11 16 12 17 13 18 14 19 15 20 
    21 26 22 27 23 28 24 29 25 30 
    31 36 32 37 33 38 34 39 35 40 
    41 46 42 47 43 48 44 49 45 50 
    51 56 52 57 53 58 54 59 55 60 
    61 66 62 67 63 68 64 69 65 70 
    71 76 72 77 73 78 74 79 75 80 
    81 86 82 87 83 88 84 89 85 90 
    91 96 92 97 93 98 94 99 95 100