2014-02-22 2 views
1

두 개의 정렬 된 행 벡터를 병합하는 함수 myMerge를 작성했습니다.matlab : 행 벡터에서 요소를 삭제하는 방법

이제는 myMerge를 호출하는 MergedExp이라는 새로운 함수를 작성하려고합니다. 그런 다음 요소 중 하나라도 같고 하나라도 제거되는지 확인합니다. 예를 들어 두 행 벡터 [1,3,5,6] 및 [2,5,7,8]을 입력하면 myMerge는 [1,2,3,5,5,6,7,8]과 i를 줄 것입니다. MergedExp 이것은 내가 지금까지 무엇을 가지고 [1,2,3,5,6,7,8] 생성 할

function [ answer ] = MergedExp(a,b) 
%UNTITLED Summary of this function goes here 
% Detailed explanation goes here 

Merge=myMerge(a,b); 
l=length(a)+length(b); 

for i=1:l-1 
    if (Merge(i)==Merge(i+1)) 
     Merge(i)=[]; 
    end 
end 
end 

난 함수 작업의 각 단계를보기 위해 세미 콜론을 제거하면 그 대답은 나이지만 여전히 오류 메시지를 보여줍니다.

이 문제를 해결하는 방법에 대한 아이디어는 많이 알려 드리겠습니다.

+0

이것은 'union'과 같은 기성 함수의 사용을 배제하는 특정 할당입니까? 그렇다면'for'가 고정 된 인덱스 집합을 사용한다고 가정 할 때 루프 내부의 벡터를 줄이는 효과를 고려하십시오. 힌트 1 : while 루프는 매 반복마다 조건을 평가합니다. 힌트 2 : "Merge (2 : end) ~ = Merge (1 : end-1)"의 결과를 고려하십시오. – Notlikethat

답변

1

MATLAB의 inbuilt 함수 unique을 사용하는 것이 좋습니다. 예를 들어

,

MergedList = [1 2 3 3 3 3 4 5] 
MergedList = unique(MergedList) 

출력 :

MergedList = 

    1  2  3  4  5 
+0

도와 주셔서 감사합니다. 죄송합니다 내가 가능한 한 경우 inbuilt 함수없이 시도하고 있다고 언급 했어야합니다 – user3058633

+0

@ user3058633, 내가 몇 분 안에 대답하지 않은 경우 다시 올께. 그러나 지금 당장이 방법이 도움이되는지 확인하십시오. 루프를 통과하면서 배열의 크기가 변경됩니다. 따라서 for 루프 제한은 더 이상 동일하지 않습니다. 또한 중복 발견 알고리즘에 약간의 오류가 있습니다. – Nitish

1

당신이 오류가 거의 전체 벡터를 통해 당신 루프, 1length(vector)-1에,하지만, 그래서 당신을하는 동안 사실에서 온다 일부 요소를 제거하십시오. 따라서 어떤 시점에서 for 루프는 더 이상 벡터 요소에 해당하지 않는 인덱스에 도달합니다. 그리고 이로 인해 오류가 발생합니다.

많은 해결책 중 하나는 제거 할 색인을 저장하고 for 루프가 완료되면이를 제거하는 것입니다.

ind_to_remove = []; 
for i=1:l-1 
    if (Merge(i)==Merge(i+1)) 
    ind_to_remove = [ind_to_remove i]; 
    end 
end 
Merge(ind_to_remove) = []; 
관련 문제