2016-07-20 1 views
2
K>> asdfasdf=[1 1 1] 

asdfasdf = 
1  1  1 

K>> asdfasdf(4)=-2.3604 + 0.1536i 

asdfasdf = 
1.0000 + 0.0000i 1.0000 + 0.0000i 1.0000 + 0.0000i -2.3604 + 0.1536i 

왜 처음 세 요소가 갑자기 복잡해 졌습니까? 그리고 어떻게하면 Matlab이이를 막을 수 있습니까? 진짜는 진짜입니다. 그리고 다른 요소가 상상이기 때문에 이것은 상상의 것으로 바뀌면 안됩니다.왜 하나의 요소 만 복잡해지면 Matlab은 허수 성분을 생성합니까?

+0

만은 벡터/배열 목록/셀 어레이보다 근본적으로 다른 데이터 구조입니다 . http://stackoverflow.com/questions/393556/when-to-use-a-link-list-over-an-array-array-list를 참조하십시오. 그러나 간단히 말해서 벡터/배열은 O (1) 읽기 및 쓰기, 그러나 O (N)은 (배열을 넘어서 쓰기) 추가합니다. 더 큰 배열은 운영 체제에 의해 할당되어야하고 원래 배열의 모든 N 요소는 새 공간에 복사되어야합니다. 목록은 O (N) 읽기 및 쓰기를 제공하지만 O (1)은 미리 보류 및 추가됩니다 (이중 연결 인 경우). –

+0

Matlab의 배열은 상수 인덱스 시간 인 올바른 배열입니다. 이를 달성하는 유일한 방법은 각 요소가 정확히 동일한 양의 메모리를 차지하도록 보장하는 것입니다. 즉, 각 요소는 고정 된 형식 (float32, float64, complex64, complex128 등)을 갖습니다. Matlab의 float64 배열에 복합 값을 삽입/추가 할 때 배열이 O (1) 조회를 유지하려면 Matlab은 complex128 유형의 새 배열을 만들고 이전 배열을 새 배열에 복사 한 다음 새로운 복합 값을 추가하십시오. –

답변

8

속성은 각 항목이 아닌의 속성입니다. 항목이 복잡해야 할 경우 모든 항목이 복잡합니다. 또는 오히려 배열입니다.

당신은

진짜 진짜

하지만 진짜 너무 복잡 말한다. 제로 허수 부분을 갖는 복소수는 실수와 동일합니다 (동일한 값을 가짐). 숫자

예 : 배열과

>> x = 3; % real number 

>> y = complex(3, 0); % force to be complex 

>> whos x y % check that x is real and y is complex 
    Name  Size   Bytes Class  Attributes 

    x   1x1     8 double    
    y   1x1    16 double complex 

>> x==y % are they equal? 
ans = 
    1 

예 : 서로 다른 프로그래밍 언어가 다른 것을 그들에게 전화

>> x = [2 3 4]; % real values: x is real 

>> y = [x, 5+6j]; % include a complex value: y becomes complex 

>> x(1:3)==y(1:3) % equal values? 
ans = 
    1  1  1 
+3

'complex' 속성이 배열의 속성이 아니라 배열의 속성임을 강조하기 위해 : isreal은 전체 배열에 대해 단일 출력을 리턴합니다. '(3,0)'이 허수 부분이 0이더라도'isreal (3)'은 true이고'isreal (complex (3,0))'은 false입니다. –

관련 문제