2011-12-15 5 views
0

특정 수학 함수를 수행하기 위해 짧은 Matlab 코드를 작성하려고합니다. 이 코드는 1, 2 또는 3 (및 다른 요인에 따라 크기가) 항목을 가진 벡터 H를 생성합니다. (내 마음 속에서) 숫자 1, 2 및 3은 세 개의 특정 행렬에 해당합니다. 프로그램에서 H를 계산하면 해당 항목이 나타내는 모든 행렬을 함께 곱할 수 있기를 바랍니다. 명확히하기 위해, H = [1 2 3 2]라면, 나는 A * B * C * B를 계산하도록 코드를 원한다. 이 작업을 수행하는 가장 간단한 방법은 무엇입니까? 나는 항목이 벡터 인 벡터를 벡터에 작성하고 벡터의 항목을 제공하는 함수를 사용하는 방법에 대해 생각했지만 작동하도록 만들지는 못했습니다. Matlab에 아주 새로운).Matlab에서 행렬의 '레이블'을 행렬로 변환합니다.

이상적으로 나는 나머지 코드를 다시 작성하지 않을 것입니다. 제가 지금까지 한 일을이 코드에서 작동하게하는 방법이 있다면 그것은 좋을 것입니다. 매끄러운 코딩에 반대되는 기능을 찾고 있습니다. 작동하는 한 서투른지는 중요하지 않습니다.

답변

2

@zuloos 행렬의 크기가 문제가 될 수 있습니다. 같은 - 특히 행 수가 다른 경우. 행렬을 셀에 넣으면 작동해야합니다.

matrices = {A,B,C,D}; 

result = matrices{H(1)}; 
for i=2:numel(H) 
    result = result * matrices{H(i)}; 
end 
+0

고마워 -이 작품. 왜 중괄호 {}를 사용합니까? –

+0

중괄호는 "셀"용입니다. 행렬과 달리 셀에 거의 모든 것을 넣을 수 있습니다. 필요한 경우 필요할 수 있습니다. @zuloo와 같이 저장하면 모든 행렬의 크기가 동일해야합니다. – bdecaf

0

매트릭스를 다른 matice에 넣으면 H 값을 키로 사용하여 올바른 매트리스 matices = [A, B, C, D]을 선택할 수 있습니다. 그런 다음 H을 하나씩 실행하고 마지막 작업 결과를 곱하십시오. 당신은 다른 행렬과 같은 크기의 대각선 matrice로 시작하고 여기에 의미가 있다면 내가 아는 해달라고 H

matrices = [A, B, C, D] 
// d is dimension of your matrices (i guess they are square) 
erg = diag(d) 
for i=length(H):1 
    // supposed your matices are 2d 
    erg = matrices(H(i),:,:)*init 
end 

의 값 coreesponding matrices의 matrice와 루프의 각 라운드를 곱합니다 왼쪽에서 각 단계를 곱하면됩니다. (OpenGL에서와 마찬가지로)하지만이 방법을 사용하면 단계별로 작업을 분할 할 수 있습니다 (OpenGL에서 행해진 것처럼).

+0

내가 정확한 코드를 내 MATLAB 구문 기술을 새로 고쳐야 할 ... 난 이해가 아주 확실하지 않다 – zuloo

+0

이 몇 분 정도 걸릴 수 있습니다. 다음과 같은 의미입니까 :i = 1 : size (H) H (i) = 1 행렬 (i) = A 등? –

+0

당신은 matlab에 matlab에있는 새로운 "배열"에 배열 된 행렬을 넣은 다음 H를 반복하여 해당 matlice를 얻고 마지막 단계의 결과와 곱합니다. 대각선 매트리스 (그래서 X * DIAG = X)로 결과를 초기화해야 할 것입니다. – zuloo

관련 문제