| 제목 | 답변완료 matlab 11강 질문입니다. | ||
|---|---|---|---|
| 질문유형 | 강좌내용 | 교수님 | 권준표 |
| 과목 | 매트랩 | 강좌명 | |
| 작성자 | (h****0) | 등록일 | 2019-01-31 10:30 |
|
강의 21``에서
N = 100; z = linspace(-5, 5, N)`; X = radius*cos(theta); surf(X,Y,Z)
라고 하셨는데 여기서 Z = z(:,ones(1,N)); 의 기능을 모르겠습니다. 강의에선 차원을 맞춰주기 위해서라고 하셨는데 N=100이니까 one(1,100)을 만드니까 원소가 1인 행벡터(1*100) 아닌가요? z(:,ones(1,N)); 설명 부탁드립니다. 답변 완료된 질문과 답변은 수정 및 삭제가 불가합니다. |
|||
- 댓글
- 0
안녕하세요?
기초문법 질문이여서, 바로 답변 드립니다.
우선, 3차원 그래프를 그려야 하니,
X, Y값에 대응하는 Z값의 차원을 일치해야 한다는 사실은
이미 잘 알고 계신 것 같습니다.
(모두 100 X 100 행렬)
이미 알고 계시겠습니다만,
질문해 주신 Z = z(:,ones(1,N)); 의 기능을 알아보는 가장 쉬운 방법은 하나하나 해보는 것 입니다.
특히, 매트랩의 경우 변수에 어떤 값들이 들어가는지
눈으로 보면서 할 수 있어 적응하기 어렵지 않습니다.
질문주신 내용은 :, 콜론 연산자의 역할을 묻는 것 입니다.
(편의상 예제는 Octave로 진행하였습니다.)
우선,
N = 100;
z = linspace(-5, 5, N)`;
Z = z(1);
작성 후 실행해 보면, Z변수에 아래와 같이 되는 것을 볼 수 있습니다.
=> z 열벡터에서 첫번째 값이 나왔습니다.
=> 즉, 괄호 안의 숫자번째의 값을 출력합니다.

N = 100;
z = linspace(-5, 5, N)`;
Z = z(:);
작성 후 실행해 보면, Z변수에 아래와 같이 되는 것을 볼 수 있습니다.
=> z 열벡터에서 모든 값이 나왔습니다.
=> 정확하게 말하자면 모든 요소를 단일 열벡터 형태로 변경합니다. (모든 요소를 1열로 만듭니다.)

N = 100;
z = linspace(-5, 5, N)`;
Z = z(:,1);
실제로는 이렇게 사용합니다.
=> z의 모든행 중, 첫번째 열벡터를 반환하라는 뜻 입니다.
N = 100;
z = linspace(-5, 5, N)`;
Z = z(:,2);
이렇게하면? 값이 없습니다.
=> z에는 2번째 열이 없기 때문입니다.
자, 문제의 Z = z(:,ones(1,N)); 입니다.
N = 100;
z = linspace(-5, 5, N)`;
Z = z(:,ones(1,N));
실행해 보면 아래처럼 데이터를 호출할 수 있습니다.

ones(1,N) 때문에 1로 채워진 행벡터가 생성된다는 것은
이미 알고 계시니... 왜 이렇게 되는지 설명드리자면....
매트랩이... 그.. 문법이 원래 그렇습니다...
정확히는 :, 콜론의 문법입니다.
ones(1,N)의 값이 하나씩 입력되어 행렬로 반환됩니다.
즉, z(:,ones(1,N)); 는
z(:,1);, z(:,1);, z(:,1);, z(:,1);, z(:,1);, z(:,1);, z(:,1);, z(:,1);, z(:,1);, z(:,1); ....... z(:,1);
총 N개, 즉 100의 결과를 하나로 묶은 행렬을 반환합니다.
매트랩 도움말을 정확하게 적어드리자면...
=====================================================
A(:,j:k)는 첫 번째 차원으로부터는 모든 첨자를 포함하지만
두 번째 차원으로부터는 벡터 j:k의 요소를 참조합니다.
즉, 열 [A(:,j), A(:,j+1), ..., A(:,k)]를 가진 행렬이 반환됩니다.
https://kr.mathworks.com/help/matlab/ref/colon.html
=====================================================
라고 합니다.
그런데 ones 함수 때문에, j에서 k까지의 값이 모두 1이므로
모두 1행벡터가 100번 반환되는 것 입니다.
설명이 모호해서 죄송합니다.
한 번 해보시는 것이 가장 좋습니다.
예를 들어
N = 100;
z = linspace(-5, 5, N)`;
Z = z(:,[1,1,1]);
라고 해서 실행 후, 변수에 값이 어떻게 들어가는지 확인해보시면 좋을 것 같습니다.
- 2019-01-31
- 2024-12-12 수정























