2011-01-20 6 views
1

내가 Mathematica에서이이를 내가 출력 예 {0, 1, 1, 1, 1, 1, 0, 0입니다 MATLAB매트릭스 생성 - MATLAB

pointers = 
    Table[If[experiment[[i, 1]]^2 + experiment[[i, 2]]^2 > 1, 0, 1], {i, 
    1, npoints}]; 

에서 그것을 만들려면, 1, 1}, npoints = 10에 대해서.

나는 이것을 시도했지만 잘못되었다! 나는 또한 출력 1을 제공하는 이런 짓을

assign=experiment(i,1)^2 +experiment(i,2)^2; 
if assign>1 
    assign=0; 
else assign=1; 
end 
pointers=assign(1:npoints); 

(지금은 MATLAB을 배우고, 그래도 난 티카에서 조금있다)하지만 잘못 :

두 번째 예에서
for i=1:npoints 
assign=length(experiment(i,1)^2 +experiment(i,2)^2); 
if assign>1 
    assign=0; 
else assign=1; 
end 
end 
pointers=assign 

답변

2

, 당신이 필요 인덱스 pointers, 즉

pointers(i) = assign; 

를 작성하고 두 번째 줄에 '길이'를 호출하지.

그러나, 훨씬 쉽게 솔루션은 괄호, 제곱의 합의 결과로 새로운 배열 안에이와

pointers = (experiment(:,1).^2 + experiment(:,2).^2) <= 1 

, 당신이 만들 작성하는 것입니다. 그런 다음이 배열을 작거나 같음 (1보다 큰 경우 결과는 0)인지 확인하고 배열의 모든 비교 결과를 pointers에 반환합니다.

+0

우선, 답변 해 주셔서 감사합니다. – George

+0

@ George : 추가 질문 (논평 또는 원래 질문의 편집)에 대해 논리적 비교는 모든 검사를 수행합니다. 배열을 스칼라와 비교하면 배열의 각 요소에 대해 연산을 수행합니다. Mathematica의 'IF' 명령 (Excel은 물론)을 사용하면 두 결과에 대한 결과를 지정할 수 있습니다. Matlab에서와 마찬가지로 논리 비교는 0 또는 1 만 반환 할 수 있지만 다른 값을 얻을 수 있도록 결과를 쉽게 조작 할 수 있습니다. 그런데, 당신이 대답을 유용하다고 생각한다면, 그것을 받아들이는 것을 고려해보십시오. – Jonas

+0

우선, 귀하의 답변에 감사드립니다. 내가 묻기를 원했던 것은 마지막으로 <= 1로 모든 점검을 수행 했습니까? if 문을 실행할 필요가 없습니까? 그런 경우 어떻게 할 수 있습니까? 다시 한번 감사드립니다. – George