2014-12-01 3 views
1

matlab에 대한 (초보자) 질문이 있습니다. 여러 가지 시도 (예 : 벡터화 된 루프로 작성하거나 'if-loop'로 쓰고 명시 적으로 합계를 계산)을 시도했지만 실수를 저지르고 있으므로 MATLAB에서 오류가 계속 발생합니다. L와matlab에 두 번 더하기

\sum_{i=1}^{L} \sum_{k=1}^K (r_k^3 t_{ik}) 

는, K는, r_k 알려진 :

나는 다음과 같은 기능을 극대화 할 수 있습니다. 또한 t_ik은 desicion 변수이므로 {0,1}에 값을 갖습니다.

도움을 주시면 감사하겠습니다.

답변

0

당신은 루프의 두 배를 묘사 : 나는 당신의 문제는 MATLAB 관련이없는 것으로 생각하지만

result=0; 
for i=1:L 
    for k=1:K 
     result=r(K)^3*t(i*k)+result ; 
    end 
end 

, 당신은 단지 코드에 수학에서 변환하는 방법을 잘 모릅니다. 사람이 찾고 오면

+1

고맙습니다.하지만 제 질문을 잘못 작성한 것처럼 보입니다. 그러나 실제 문제에 대한 해결책을 찾았으나이 질문에 대한 올바른 답변이므로 올바른 것으로 표시하겠습니다. 불편을 드려 죄송합니다. – Riley

-2

,이 작업을 수행하는 올바른 방법은 당신의 행렬입니다

sum(sum(a)) 

이다. 이것은 더 많은 차원까지 확장됩니다.

+0

기술적으로는 올바르지 만 질문에는 해당되지 않습니다. 행렬이 아닌 합계가 필요한 세 개의 개별 벡터가 있습니다. – rayryeng

+0

그런 다음 하나의 행렬로 연결하고 내 방법을 사용하십시오. 귀하의 문제가 매우 벡터화 된 것처럼 보입니다. 앞으로 시도한 코드를 게시하면 귀하의 상황에 더욱 적합한 대상의 답변을 얻을 수 있습니다. –

+0

단순히 벡터를 연결하여 행에 대해 '합계'를 적용 할 수는 없습니다. 올바른 결과를 계산하지 않습니다. 내 대답을 보라. – rayryeng

3

더 많은 벡터화 된 결과를 얻으려면 전체 행렬에 bsxfun 다음에 전체 행렬에 대해 sum의 합을 계산하여 제품을 만들 수 있습니다 (à la Adam Farabaugh). LaTeX의 형태로 귀하의 식 (나 읽기 쉽게) 다음과 같습니다 r는 벡터 동안 t는 2 차원 매트릭스처럼

것 같습니다. 위의 문장을 보면 t의 각 행을 가져 와서이 행에 r을 곱하고 r의 각 요소를 세 번째 힘까지 곱한 것처럼 보입니다. t에있는 모든 행에 대해이 작업을 반복 한 다음 결과를 요약합니다. r의 요소 수는 r은 행 벡터, 및 t의 열 양이라고 일치 가정, 같은 것을 할 :

prods = bsxfun(@times, r.^3, t); 
result = sum(prods(:)); 

첫 번째 문은 r을하고 매트릭스를 생성 곳의 각 행 행렬은 r의 사본이됩니다. 이것은 bsxfun의 결과이며 바이너리 싱글 톤 확장 기능의 약어입니다. 요컨대, 두 변수 사이에 더 작은 차원을 갖는 변수의 차원을 복제하고 두 변수가 크기가 일치하도록 요소를 복제합니다.

그런 다음이 새 행렬을 취하여 행렬 t을 사용하여 요소 별 곱셈을 수행합니다. 이렇게하면이 행렬의 모든 요소를 ​​간단하게 합합니다. sum을 아담이 제안한 것과 같이 중첩 할 수 있지만 더 일반적으로 만들고 싶다면 을 열어 행렬을 풀어 단일 벡터가되도록 한 다음 sum을이 단일 벡터에 적용하면됩니다.