공머씨의 블로그
내가 공부한 옥타브7- 옥타브의 내장함수 익히기(18~34) 본문
18. 요소별 연산
.*는 원소 단위의 곱셈을 나타낸다.
./는 원소 단위의 나눗셈
.^ 원소 단위의 제곱을 나타낸다. (.^3 은 세제곱)
아래 코드를 보면 원소 각각이 제곱된 것을 알 수가 있다.
아래 코드는 행렬a와 행렬 a를 곱한 것 즉 행렬 a자체를 제곱한 것이다.
아래와 같은 계산과정을 거쳐서 계산합니다.
19. indexing
indexing은 index(색인)에 ing 가 붙어서 색인을 다는 것이라는 뜻입니다.
색인: 어떤 것을 뒤져서 찾아내거나 필요한 정보를 밝힘
이라는 사전적 의미가 있습니다.
앞서
내공옥4 의 8번에서 원소 찾는 방법을 알아보았습니다.
이를 이용해서 색인을 찾을 수가 있습니다.
일단 간단하게 열벡터에서만 생각을 해봅니다.
a(k)는 행벡터 또는 열 벡터 a의 k번째 요소(원소)입니다.라고 나와 있습니다.
a 가 열벡터인데 a(2)을 입력하면 두 번째 행이 출력
a가 행벡터인데 a(2)를 입력하면 두 번째 열이 출력됩니다.
b는 행 벡터도 열 벡터도 아닌 2차원 이상의 일반적인 행렬입니다.
행렬 b의 첫 번째행 세 번째열의 원소를 찾고 싶다면 저렇게 입력을 하면 됩니다.
20. slice
slice에 대해서 알아보겠습니다.
a행렬의 k번째 원소부터 m번째 원소까지 출력하고 싶다면
v [k:m]
을 입력해주면 됩니다.
slice는 행렬이 열 벡터이거나 행 벡터일 때만 가능합니다.
원하는 행 또는 열만 출력하려면 다음과 같은 문법을 사용합니다.
행렬 A에서 k번째 행만 출력
A(k,:)는 행렬 A의 k 번째 행입니다.
행렬 A에서 l번째 열만 출력
A(:,l)는 행렬 A의 l 번째 열입니다
Q;
1 2 3
4 5 6
7 8 9
위와 같은 행렬 A를 입력하고 3번째 열만 출력하는 코드를 작성
그 결과를 적어라..
?
실제 시험에서 위와 같이 손 코딩 문제가 나옵니다.
손으로 직접 써보고
코딩해보길 바랍니다..
유한 엔터
위와 같은 결과가 나오게 됩니다.
21. 행렬에 있는 총원소의 숫자 구하기
만약 3X3행렬이라면 원소의 숫자가 9개인 것을 바로 알 수 있다,
하지만 행의 수와 열의 수가 매우 크다면 직접 계산하기 어려울 수 도 있을 것이다.
이럴 때를 위해서 Octave에는
length()라는 함수가 있다. 괄호 안에 행렬 이름을 입력해주면 그 행렬이 갖고 있는 총원소의 수를 구할 수가 있다.
.
22. 원하는 행, 열에 대입하기
앞서 내옥공4에서 행렬에 열추가 행 추가를 한 적이 있습니다.
다음행 다음 열에만 추가 가능한 문법만을 다뤘는데 이번에는 원하는 행에 또는 원하는 열에 추가하는 기능을 다뤄보고자 합니다..
(행렬 v는 열이 한 개인 열 벡터)
v행렬의 2행을(8)
a행렬의 2행 3열(6)에 대입한 것입니다.
원래 행렬 a의 형태입니다.
아래에서도 사용할 것이니 clear all로 지우지 말아 주세요
23. 어떤 행렬의 행에 행 벡터를 통째로 대입하기
문법
a(k,:) = r는 a의 k 번째 행에 행 벡터 r를 대입합니다.
Q;
벡터 a의 2행에 원소가 1로 구성된 행 벡터를 대입하시오
일단 원소가 1로 구성된 행 벡터를 생성합니다.
2행 모든 열을 1 1 1로 치환할 것이므로
a=(2,:)=r의 문법을 사용합니다.
행렬 a를
아래에서도 사용할 것이니 clear all로 지우지 말아 주세요
24. 어떤 행렬의 열에 열 벡터를 통째로 대입하기
문법
a (:,j) = c는 열 벡터 c를 a의 j 번째 열에 대입합니다.
Q: 행렬 a의 2번째 열의 원소에 모두 7을 대입합니다.
열이 한 개이고 원소가 모두 7인 열 벡터 c를 입력합니다.
바로 위 23번에서 사용한 행렬 a에서 두 번 개원 소였던 [2;1]이 모두 7로 치환되었음을 알 수가 있습니다.
아래에서도 사용할 것이니 clear all로 지우지 말아 주세요
25. 어떤 행렬의 행을 삭제하기
문법
a (k,:) = [] a의 k 번째 행을 삭제합니다.
행렬 a의 첫 번째 행을 모두 삭제합니다.
간단하게 문법을 그대로 사용하면 됩니다.
26. 어떤 행렬의 열을 삭제하기
문법
a(:,j) = []는 a의 j 번째 열을 삭제합니다.
7이라는 숫자가 거슬리므로 2열을 삭제해봅시다.
27. 부분적으로 대입하기
(행렬 B를 A의 1행의 1열부터: 2열까지 넣어라)
문법
A(1, 1:2)=B
추가로 ‘ : ’는 ~에서~까지 라고 생각하면 쉬울 것 같습니다
Q
행렬 X의 구성은 다음과 같습니다.
X=
1 2 3 4 5 6
7 8 9 10 11 12
여기서 위의 문법을 사용해서 1행의 1 2 3을 99 100 101로 바꿔 보시오
힌트
행렬 T의 구성은 다음과 같습니다.
행렬 X의 1행에서 1열~3열까지 넣으려면
T는 행이 하나인 행 벡터 이면서 열이 3개인 행렬임을 알 수 있습니다.
T=
99 100 101
유한 엔터
원래 행렬 X와 T의 형태는 다음과 같습니다.
정답은 다음과 같습니다!
28번 숫자가 빠졌네요...
29. diag() 함수
괄호 안의 행렬이 대각 원소가 있는 2x2차원 이상의 행렬일 때
diag(A)는 행렬 A의 대각선 성분 ajj를 포함하는 열 벡터를 만듭니다.
30. diag() 함수
괄호 안의 행렬이 대각 원소가 없는 행이 하나인 행 벡터 또는 (벡터 v)
열이 하나인 열 벡터 인경우 (벡터 x)
diag(v)는 벡터 v의 요소를 대각선으로 갖는 행렬을 생성합니다
31. diag(v, k)는 벡터 v의 k 번째 대각선 상의 원소들을 갖는 행렬을 생성한다.
행렬 v의 형태는 이렇습니다.
v=
1 2 3
4 5 6
7 8 9
diag(v,2)
이므로 행렬 v의 2번째 대각선 상의 원소는 2이고 그런 원소를 갖는 행렬을 생성합니다.
32. reshape(A, m, n) 은 A를 m x n -matrix로 변환합니다.
33. magic(A) 함수는 임의의 수로 구성된 AxA행렬을 만드는 함수이다.
.
magic함수의 괄호 안에 문자를 넣어서는 안 됩니다.
그리고
rand() 함수와의 다른 점은 rand 함수는 괄호 안에 행과 열을 설정할 수가 있는데
magic() 함수의 경우에 괄호안에 하나의 숫자만 넣을 수 있고 두 가지 숫자를 넣으면 문법 오류가 발생됩니다. 정방 행렬만을 출력하게 됩니다.
하지만 rand() 함수는 정방 행렬 도 출력할 수가 있습니다.
또 rand()함수와 차이점이 하나 있는데 저번 시간에 설명을 잘 읽어보았다면 바로 알 수 있을 것입니다.
34. F(end)는 행렬의 끝부분을 출력하는 함수이다.
행렬의 끝부분이라는 것은 마지막행의 마지막 열 원소를 뜻합니다.
magic() 함수를 이용해
5*5 행렬인 행렬 a를 만들고
그때의 행렬 a의 끝부분을 출력해봅니다.
또한 프로그래밍은 읽는 방식이 오른쪽에서 왼쪽이므로
magic(3)=a
의 의미는 행렬 a를 magic(5)에 대입하라는 뜻입니다.
하지만 행렬 a는 선언되지 않은 상태이고 a의 형태가 정해져 있다고 해도 magic(5)인 함수에 넣는다는 것은 말이 안 됩니다.
반면
a=magic(3)의 경우에는 magic(3)을 생성해서 a에 대입하라는 뜻입니다.
Q:
함수 a의
2행부터 마지막행까지
모든 열
출력해라
힌트 방금 배운 matrix name(end) 함수를 활용해라
행의 수 또는 열의 수를 세기 힘들 때 또는 숫자가 너무 길어서 입력하기 힘들 때는
matrix name(end) 함수를 사용하면 편리할 것 같습니다.
다음 시간에는 옥타브로 연립방정식을 계산하는 법을 공부할 것입니다.
연립방정식을 행렬로 나타내고 역행렬을 이용해 미지수를 구하는 것입니다.
역행렬 개념이 가물가물하신 분들은 내옥공2의 7번 역행렬 부분을 다시 공부하시기 바랍니다.
공감 버튼과 구독은 큰 힘이 됩니다.
'내가 공부한 옥타브(매틀랩) > 내가 공부한 옥타브' 카테고리의 다른 글
내가 공부한 옥타브 9- 2D그래프 그리기1 (1~6) (0) | 2020.03.11 |
---|---|
내가 공부한 옥타브8-옥타브로 연립방정식 계산하기(35~42) (0) | 2020.03.11 |
내가 공부한 옥타브6-행렬계산,여러가지 행렬 계산 방법 (11~17) (0) | 2020.03.11 |
내가 공부한 옥타브5- 인터페이스 알아보기,m파일 만들기 (0) | 2020.03.11 |
내가 공부한 옥타브4-행렬입력 방법 (1~9) (0) | 2020.03.11 |