1

테스트 할 Monte Carlo Markov Chain 시뮬레이션이 있습니다. 시스템 크기는 n입니다. 지금 나는 n 사이의 관계와 비용이 무엇인지 알고 싶습니다. 즉, n의 전력/주문을 비용으로 알고 싶습니다 (예 : n^2.5 또는 n^2.8)?시뮬레이션 알고리즘의 비용을 계산하는 방법

많은 요인과 단계가 있기 때문에 우선 복잡도를 분석하지 않는 것이 좋습니다. 컴퓨터 시간 비용을 얻기 위해 시뮬레이션을 실행하고 싶습니다. 그래서 내 질문은 기계 시간에 따라 x 알 수없는 어디 n^x 비용 관계를 어떻게해야합니까?

예를 들어, n = 1000 일 때 전체 스위프를 수행하려면 t_1이 걸립니다. 이는 1000 몬테카를로 단계입니다. n = 666 일 때 전체 스위프를 실행하려면 t_2이 걸립니다.이 시간은 666 몬테카를로 단계입니다. 나는 n의 다른 크기를위한 t_1, t_2, t_3를 얻을 수 있었다, 그 때 비용의 순서를 어떻게 체크하나요?

사실 컴퓨터 시간을 가져 오기 위해 다른 컴퓨터를 사용하는 것이 중요합니까? 나의 무지를 유감스럽게 생각합니다.

+0

tic, toc를 사용하여 다른 n 시간을 구하십시오 (주어진 시간에 대한 분포가있을 경우 평균을 구해야합니다). 로그를 사용하여 지수를 구할 수 있습니다 (지수를 가정 할 때). 양식)을 사용하고 서로 다른 n 값에 가장 잘 맞습니다. – Lazarus

+0

@Lazarus 고맙습니다. 따로 대답 해 주시면 답변 해 드릴 수 있습니까? –

+0

@Lazarus 평균화하면, n의 시스템에 대해 k * n 번 실행해야하고 k에 평균 시간이 필요하다는 의미입니까? –

답변

2

tic, toc을 사용하면 다른 n 시간을 얻을 수 있습니다. 주어진 n에 대한 시간 분포가 있다면 평균을 구하십시오. 당신이 지수 형태를 갖는다 알고있는 경우

그런 다음, 당신은 n 값 각각에 대해 서로 다른 순서 값으로

order = log(avgtime); 

를 얻을 수 있습니다, 당신은 가장 적합한 (아마도 polyfit)를 실행합니다.

+0

다른 컴퓨터를 사용하여 컴퓨터 시간을 얻으면 문제가 발생합니까? 나의 무지를 유감스럽게 생각합니다. 컴퓨터 시간은 특정 컴퓨터와 관련이 없어야합니다. 맞습니까? –

+0

시간은 컴퓨터에 따라 다릅니다. 복잡성은 없어야합니다. 기술적으로 A * n^p를 얻을 수 있습니다. 여기서 p는 복잡성이고 A는 기계에 따라 달라지는 상수입니다. – Lazarus

1

This MathWorks article에는 timeit, tic/toccputime을 비롯한 몇 가지 일반적인 권장 사항이 있습니다.

timeit 기능은 종종 it accounts for first-time run costs부터 더 좋습니다. 이 핸들에서, 선택적으로 출력 인수의 수를 함수 핸들을 소요하고 있기 때문에, 그것은 조금 더 복잡한 실행하는 것입니다 :

X = [1 2; 3 4; 5 6; 7 8]; 
f = @() svd(X); 
t = timeit(f, 3) 

tic에 비해 매우 편리하고, 정확한 이유/

timeit 여러 번 지정된 함수를 호출하고, 측정 값의 평균을 계산 : 때문에 toc이다.

cputime 기능은 멀티 스레드 시스템에 tic/toctimeit에 비해 높은 숫자를 줄 것 같은 흥미 롭다. 계산상의 부담에 관심이 있다면 아마도 이것은 더 관련있는 척도 일 것입니다. The cputime Function vs. tic/toc and timeit.

부동 소수점 연산 수를 반환하는 명령은 flops 이었지만 그 값은 removed ages ago입니다. 만약 당신이 정말로 슬리퍼를 계산하고 싶다면, Lightspeed toolbox에는이 목적을위한 기능이 있습니다.

+0

유익한 답변을 보내 주셔서 대단히 감사합니다. 나는 네가 언급 한 것을 조사하고있다. –

관련 문제