2015-01-13 6 views
1

다음 코드 : 오류가MATLAB 오류 : 함수 또는 변수?

matlabpool('open','local',2) 

parfor i=1:5 
    proc = System.Diagnostics.Process; 
end 

결과 : 나는 (오류 후) 다시 parfor 루프를 실행할 때

Error: MATLAB cannot determine whether "System" refers to a function or variable. 

그러나, 그것은을 통해 실행! 몇 가지 유사한 질문을 발견했지만 제안 된 솔루션을 구현할 수 없었습니다.

MATLAB parfor - cannot determine whether "ModelUtil" refers to a function or variable?

MATLAB using parfor (parallel computing toolbox) and custom packages with +

나는 루프가 두 번째로 실행하는 이유 주위에 내 마음을 포장 할 수 없다. 그런 다음

matlabpool close 

번으로 전화를 걸어 다시 전체 스크립트를 실행하면 오류가 다시 나타납니다. 따라서 수영장이 시작된 이후에만 처음으로 발생합니다. 어떤 아이디어?

답변

4

이는 어떤 변수 또는 시간을 구문 분석에 코드 에 명시 적으로 를 정의해야하는 parfor 루프에서 사용하는 기능을 수행합니다. 모호함이있는 경우, Matlab은 가정에 의해 어수선하기보다는 오류를 던집니다.

그냥 당신이 parfor 루프 전에 할 개체를 만들 익명 함수를 정의, 당신은 것입니다 parfor 루프로 사용할 수 있습니다.

내 컴퓨터에이 실행 미세 (matlab에 R2013a) :

getSystemProcess = @() System.Diagnostics.Process ; 
parfor i=1:5 
    proc = getSystemProcess(); 
end 

변수/함수 이름이 parfor 루프에서 해석하는 방법에 대한 자세한 정보이 matlab에 장을 읽어 Unambiguous Variable Names

+0

당신의 제안으로는 더 이상 오류가 발생하지 않습니다. 경고 대신 '경고 : 클래스'parallel.cluster.Local '의 객체를 MAT 파일에 저장할 수 없습니다.'및 경고 : 클래스의 객체 병렬 . cluster.Local '을 MAT 파일에서 올바르게로드 할 수 없습니다.'라는 동작은 다소 혼란 스럽지만 때로는 경고없이 실행되기도합니다. 스크립트 (또는 선 선택 및 F9 누름)와 반대되는 함수에서 parfor 루프를 실행하면 차이가 있음을 발견했습니다. 어떤 아이디어라도 제발? 나는 또한 R2013a를 사용하고있다. – FliegenderZirkus

+0

완전히 다른 문제 인 것처럼 보입니다. 어떤 오브젝트 ('parallel.cluster.Local')를'.mat' 파일에 저장하려하고 있는데, Matlab은 제대로 작동하지 않을 것이라고 경고합니다. 나는 당신이 당신의 코드의 세부 사항을 가진 새로운 질문을 게시 할 것을 제안한다. 함수 및 스크립트 모드에서 실행될 때 관찰되는 차이점을 자세히 설명하는 것을 잊지 마십시오. – Hoki

+0

오늘은 명확한 작업 공간에서 시작 했으므로 더 이상 경고를 재현 할 수 없습니다. 위의 최소한의 예제 만 실행하면 아무 것도 저장하지 못했습니다. 그것이 단지 약간의 변칙 이었기를 바란다. 다시 나타납니다, 나는 새로운 질문을 게시 할 것입니다. 고맙습니다! – FliegenderZirkus

관련 문제