2013-02-14 3 views
1

Matlab의 좌표계에서 임의의 "경로"를 만들려고합니다. 각 반복에 대해 0의 초기 값을 가진 행렬의 새 값을 채우는 for 루프를 작성하여이를 수행합니다.값을 반복하지 않고 좌표계에서 경로 만들기 (Matlab)

예를 들어, 초기 매트릭스가 a=[0 0 0 0 0; 0 0 0 0 0] (row1 = x 값, row2 = y 값)이므로 5 포인트가 있습니다.

경로가 오른쪽/왼쪽 또는 위/아래로 이동할 수 있습니다 (대각선 없음). 내 for 루프에서 randi(4)을 호출하고 "randi(4) = 1이면 왼쪽 (x-1)으로 1 포인트 이동하고 randi(4) = 2이면 오른쪽 (x + 1) 등으로 이동하십시오."

문제는 두 번 이상 특정 지점을 방문 할 수 없다는 것입니다. 예를 들어, 경로는 (0,0)에서 시작하여 (0,1), (1,1), (1,0)로 이동 한 다음 다시 (0,0)로 이동할 수 없습니다. . 내 현재 코드에서는이 제한이 없으므로 제안을 얻을 수 있기를 희망합니다.

이 예제에서는 매트릭스가 a=[0 0 1 1 0; 0 1 1 0 0]과 비슷할 것이므로

나는 행렬 a의 각 열에서 각 새로운 좌표 (여기 (0,0))를 빼고, 두 열 모두에 대해 0의 값을주는 행렬이 있다고 생각했다. 자체), 다음) 이전 단계로 돌아가 다시 randi(4) 실행하자 ..하지만

  1. 어떻게 "한 단계 뒤로 이동"그것을 말할 수있는 (또는 두 개 또는 세?
  2. 이미 설정된 매트릭스의 각 열에 대해 한 열을 어떻게 비교합니까?
  3. 이것은 생각이었습니다 .. Matlab에 어떤 기능이 있나요? 또는 행렬 내에서 두 개의 열이 동일한 지 비교할 수 있습니까?

답변

0

나는이 대답 할 수

어떻게 당신은 이미 설립 행렬의 각 열에 대해 하나 개의 컬럼을 비교합니까?

두 개의 다른 매트릭스를 사용하십시오. setdiff() 함수를 사용하여 그것들을 비교하십시오 : http://www.mathworks.com/help/matlab/ref/setdiff.html

+0

다른 기능을 사용하여 끝났지 만 입력 해 주셔서 감사합니다. – Luli

+0

무엇을 사용하셨습니까? – JesseBikman

1

질문하십시오.

  1. 돌아 가기 - 이것은 행렬의 맨 오른쪽 열을 버리는 것을 의미합니다. 가있는 경우

  2. 당신이 트랜스해야합니다 있도록 ismember

불행하게도 그것은 단지 행을 취 사용할 수 있습니다 찾을 수 있습니다. 스 니펫 :

a = [1:10; repmat(1:2,1,5)]' 
test = ismember(a,[3,2],'rows') 
any(test) % not found 
test = ismember(a,[3,1],'rows') 
any(test) % found 

물론 아이디어가 효과가 있습니다.

+0

감사합니다! 이게 도움이 됐어. – Luli