2017-03-25 1 views
0

A의 대안은 국가의 각 산업이 다른 나라의 다른 산업과 얼마나 관련이 있는지 나타냅니다. 그것은 약 1.00에서 값을 취할 수 있습니다. 따라서 행렬 A의 대각선 요소는 1에 가깝지만 행렬 A의 대각 원소는 각 산업이 대부분 자체와 관련되기 때문에 1보다 훨씬 작습니다.slow() 느린

I, J는 각각 1:44 인 국가를 나타냅니다.
주의! ("I"는 IN (I-A_omit가 (J는 J가)))는 DIAG (2,464 인 해결한다.
난, j는 1시 56분 각이다 산업 약자.

X는 A가 출력되고 길이 44의 벡터 벡터 56 산업 = 2464
(diag (2464) -A)의 역수로 F를 곱한 값 (특정 국가에서 산업의 최종 수요를 나타내는 2464 * 1 행렬 인 행렬 .

X_omit (J, j)는 j 나라의 산업 j의 모든 값을 0으로 변경하는 함수입니다.
여기에서, 행렬 X의 j + 56 * (J-1) 열은
그런데 해결할 때 "I"(I-A_omit (J, j))는 진단 (2464).

X_omit (solve 사용)의 계산에는 약 20 초가 걸립니다. A은 2464 * 2464 매트릭스이고 X은 2464 * 1 매트릭스입니다. 계산을 가정합니다 b_link 약 20 초 * 2464 계산 하나의 단일 값에 대해 14 시간입니다.
그러나이 경우 sum을 사용하여 간단한 방정식으로 변경했습니다.이 경우에는 Ii을 분리해도 상관 없습니다. 하지만 다음 계산에서는 I, i, J, j 크기는 1:44,1:56,1:44,1:56이고 각 문자는 합계를 사용하지 않고 구분해야합니다.

더 빨리 만들 수있는 유일한 방법은 solve()으로 20 초 빨라진다는 것입니다. solve(I-A_omit(J,j))의 [A] 행렬은 대칭이 아니며 숫자로 채워진 정상적인 행렬입니다.

당신은 루프 외부 X_omit(J,j)을 계산할 수 있습니다 내 코드

X_omit <- function (J,j) {solve((I-A_omit(J,j)),F)} 
B_linkages_inter <- function (I,J) { 
    for (j in 1:56) { 
    for (i in 1:56) { 
     sum((X[i+56*(I-1)]-X_omit(J,j)[i+56*(I-1)])/X[j+56*(J-1)]) 
    } 
    } 
} 
+0

안녕하세요, 대신 이미지 대신 질문에 코드를 추가 할 수 있습니까? ps 감사합니다. [작은 예제를 추가하여 사람들에게 기대되는 결과를 얻을 수 있다면 좋을 것입니다. 초점은 문제 차원까지 확대 조정할 수 있습니다.] – user20650

+0

업데이트 해 주셔서 감사합니다. 그러나 예제를 많이 추가하십시오. 작은 척도를 사용하여 수행하려는 작업을 표시하십시오. 질문의 맨 아래에 추가하십시오. – user20650

+0

'solve (A) % * % b' 대신'solve (A, b)'를 사용할 수 있습니다. 실제로 행렬을 반전하지 않기 때문에 더 빠릅니다. 여전히 느린 경우 R의 Revolution R 공개 배포판을 사용해 볼 수 있습니다. – Ryan

답변

1

입니다. 게다가 루프 밖에서 X[j+56*(J-1)])을 계산할 수도 있습니다.

+0

코드를 국가 간 역방향 연결로 변경했습니다. 제 생각에는 아무 것도 루프 바깥에 올 수 없습니다. A_omit <- function (J, j) {A [, j + 56 * (J-1)] <- 0; 에이}. A는 단지 2464 * 2464 매트릭스입니다. – user73233

+0

왜 코드를 변경하여 외부에 아무 것도 나오지 않도록 했습니까? – user31264

+0

이전 하나는 국가 내에서 역방향 연결이었습니다. 이제는 국가 간 역방향 연계가 있는데, 이는 내가 알아야 할 자료이기도합니다. – user73233