반응형
Recent Posts
Recent Comments
Link
관리 메뉴

공머씨의 블로그

내가 공부한 옥타브2 14.복소수에 관련된 내장함수와 어레이 연산 본문

내가 공부한 옥타브(매틀랩)/내가 공부한 옥타브 시리즈2 (공업수학1)

내가 공부한 옥타브2 14.복소수에 관련된 내장함수와 어레이 연산

공머씨 2020. 3. 20. 13:38
반응형

 

 

 

 

 

2. 내장 함수

작성한 코드를 명령 창에 바로 보고 싶다면 위와 같이 commandwindow에 바로 입력해주면 됩니다.

첫 번째 줄과 두 번째 줄은 숫자 뒤에 세미콜론이 있어서  바로 출력되지 않습니다. 

z에서 x에 루트를 취하고 y를 더해서 나온 값입니다.

 

w라는 수식에서 pi는 우리가 알고 있는 원주율 파이입니다. 

옥타브에서 pi를 입력해보면 3.14 16으로 저장되어있음을 볼 수 있습니다. 

a=sin(πy)처럼 입력하면 안 되고 곱셈 기호 *를 꼭 나타내 주어야 합니다. 

exp는 지수함수라는 뜻입니다. expotential의 줄임말입니다. 

괄호 안에는 자연 지수 e의 지수가 들어갑니다. 

max()라는 함수도 있는데 이는 w의 행렬 중 가장 큰 값의 원소를 출력하는 내장 함수입니다.

 

 

 

 

 

3. 복소수와  옥타브의 내장 함수

복소수 =실수+허수 

꼴로 나타낸 숫자입니다.

허수라는 것은  '내가 공부한 공학 수학'을 참고하시면 되겠습니다.

복소수를 옥타브에서 어떤 내장 함수를 사용해서 표현하는지 알아보겠습니다.

하나하나씩 알아보겠습니다.(하나씩 알아볼 때는 m파일 보다 comand window를 사용하는 것을 추천드립니다./ matlab이 설치되어있다면 livescript를 추천드립니다.)

 

 

3-1.  복소수를 나타내는 식, 내장 함수입니다.

 

 

w

q

z

c

모두 복소수를 나타내는 식입니다.

그런데 w, q에서 약간 다르게 숫자 뒤에 i 또는 j를 곱해야 허수 i 가 나오는 것을 볼 수 있습니다.

 

꼭 i와 j를 곱해야먄 허수 i가 나오는지 궁금해서 

다른 알파벳을 곱해보았습니다.

위 와 같은 오류가 뜨는 것으로 보아

i 또는 j만을 곱해야 하는구나를 알 수 있습니다.

 

그러면 i와 j가 도대체 무슨 의미일까요....???

일단 우리가 허수를 표현할 때 i라는 문자를 사용해서 표현한다고 고등학교 때 배웠습니다.

그런데 아래와 같이 

허수를 j로 표현하는 경우도 있습니다.

전기회로에서 전류를 i로 표현하기 때문에 중복을 방지하기 위함이죠.

그래서 매틀랩(옥타브)에서 i와 j를 혼용해서 입력할 수 있습니다.

입력은 혼용되지만 출력할 때는 i로 출력되는 것을 알 수 있습니다.

 

 

또 내장 함수 complex(1,2)의 경우

괄호 안의 인자를 실수부, 허수부 순서대로 입력하여 표현합니다.  

 

3-2. 복소수에서 실수부와 허수 부만을 출력하는 내장 함수입니다.

위에서 z라는 변수는 1+2i라는 복소수가 대입된 변수입니다.

a=real(z) >>> z의 실수부를 출력

b=img(z) >>> z의 허수부를 출력

한다고 알아두시면 됩니다.

 

내공 옥시 리즈 1에서 공부한 내장 함수의 이름들을 보면 아무렇게나 짓지 않는다는 것을 알 수 있습니다.  어떤 단어의 철자를 따와서 짓죠.

허수를 영어로 imaginary number라고 합니다. 실제로 존재하지 않는 이미지 상의 숫자라는 것이죠.

실수를 영어로 real number이라고 합니다.

 

 

 

 

3-3

켤레각(공액각)(共軛角)

페이저 복소평면

페이저 변환을 배워야 알 수 있는 것이다.

 

abs()

  • 절댓값을 반환하는 함수입니다.

  • 복소수의 절댓값은 복소평면상의 길이를 의미합니다.

 

angle()

복소수의 각도를 구해주는 angleangle이라는 함수가 있습니다. 복소수 하나 혹은 행렬을 각도를 쫙 뽑아줍니다.

[출처] (매트랩, MATLAB) Excel 데이터를 바로 FFT 해주는 함수(2)|작성자 공돌이 씨

 

conj()

  • 켤레 복소수를 반환하는 내장 함수입니다.

  •  

켤레 a conjugate angle

신발 '한 켤레' 할 때 그 '켤레'입니다. 짝을 이루는?? 모양과 크기는 같은 데 방향이 다르다고 생각하면 됩니다.

켤레 복소수라는 것은 1+2i라는 복소수가 있다면

이 복소수의 켤레 복소수는 1-2i입니다. 

 

 

아래는 3번에서의 전체 코드와 comand window창입니다.

w=1+2*j
q=1+2*i
z=1+2*sqrt(-1)
c=complex(1,2)
a=real(z)
b=imag(z)
r=abs(z)
p=angle(z)
w=conj(z)
z+w
s=z+w

 

 

4. 옥타브로 행렬 표현하기

 

4-1. 기본적인 행렬 입력방법

변수 x, y에 대한 설명은 생략하겠습니다.

기본적인 행렬 입력방법은 다음 포스팅을 참고하시기 바랍니다. (1,2번 만 참고하시면 될 것 같습니다.)

https://haai.tistory.com/6?category=800204

 

내가 공부한 옥타브4-행렬입력 방법 (1~9)

제가 주로 컴퓨터 개론 수업시간에 octave를 이용해서 다뤘던 것은 옥타브에서 행렬 입력하기와 계산 들입니다. 행렬 만들기부터 사이즈구하기 까지 차근차근해보도록 합시다. 1. 첫 번째로 단순히 행이 1이고 열..

haai.tistory.com

 

 

 

 

 

 

4-2. 전치 행렬 표현 방법

전치 행렬은 원래 행렬에서 행과 열이 바뀐 행렬이 전치 행렬입니다.

(더 자세한 설명은>>https://haai.tistory.com/4?category=800204) 5번에 전치 행렬에 대해 자세히 설명했습니다.

전치 행렬 입력에 대한 것은 다음 포스팅을 참고하시기 바랍니다. https://haai.tistory.com/8?category=800204 17번에 설명되어 있습니다.

 

 

 

 

 

4-3. 내장 함수 ones

 

행렬 b는 3 ⨉3차원이며 모든 원소가 1로 구성된 행렬입니다.

(내장 함수 one(,) 대한 설명은 이전 내공 옥 6 15번에 도 나와있는데 링크를 또 걸어두면 보기 불편하실 것 같아 간단히 설명하겠습니다.)

입력방법은 

변수명=ones(행의 수, 열의 수)

위와 같이 입력합니다.

 

 

아래는 전체 코드와

이를 m파일로 저장한 뒤 실행시켰을 때 command window창입니다.

x=[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1]
y=[0: 0.1 :1]
w=10*x
z=x+w
zz=z'
a=[1 2 3; 4 5 6; 7 8 9]
a1=a'
b=ones(3,3)
c=10*b
z=a+b

 

 

5.  4번에 대한 연습문제

문제:

변수를 위와 같이 설정하고 (3번에서 말했듯이 복소수 i, j를 혼용해서 사용한다.)

참고로 옥타브에서 삼각 함숫값을 입력할 때는 30이라고 표기하면 안 됩니다. 자연수 30으로 받아들입니다.

만약 각도 기호 (degree°)를 생략하고 숫자를 넣어도 각도로 받아들이게 하고 싶다면

cos()이 아닌 cosd()의 괄호 안에 작성해야 합니다.

d는 degree(각도)의 약자입니다.

그렇지 않으면 괄호 안에 라디안 값으로 변환해서 넣어주어야 합니다.

cos(30) (라디안 30으로 받아들인다.)

cos(pi/6) >> 옥타브에서 π 를 pi로 표기합니다.

위의 결과를 comand window창에 출력하여라.

 

 

 

 

아래는 전체 코드와 command window창입니다.

z1=cos(pi/6)-j*sin(pi/6)
z2=5-2*j
w=z1+z2
x=z1*z2
y=w^4

첫 번째 줄에서 문제와 똑같이 jsin이라고 입력하면 안 됩니다. 

수학에서는 곱셈 기호 x 또는 · 을 생략해서 쓰기도 하지만 옥타브에서는 곱셈기호 *을 꼭 입력해야 합니다.

jsin을 변수명으로 받아들여서  undefined라는 내용의 오류가 뜹니다.

두 번째 줄과 

네 번째 줄도 마찬가지로 곱셈 기호*을 생략하면 오류가 뜹니다.

 

 

 

6. 두 번째 연습문제

다음 두행렬 A, B가 있다.

 

행렬 A, b를 입력하고 , C와 d를 계산하시오.

A의 전치 행렬 C와

A행렬과 b행렬을 곱한 행렬 d

를 옥타브를 이용해 계산해보시오.

 

아래는 전체 코드와 command window입니다.

 

 

%벡터와 메트릭스 연습문제 2
A=[1:1:4;1:1:4;2:2:8;2:2:8;]
b=[1,2,3,4]

C=A'
D=A.*b

A라는 행렬을 표현할 때 1행과 2행은 1부터 4까지 1씩 증가하므로 :기호를 사용하여 표현해주었습니다.

이와 비슷하게 3행과 4행은 2부터 8까지 2씩 증가하므로 :를 사용하여 표현해주었습니다. 

행을 구분할 때는 [] 안에서 ; 기호를 사용하고 

열을 구분할때는 []안에서 , 기호를 사용합니다. 

 

전치 행렬은 엔터키 왼쪽에 있는 ' 기호를 사용하면 됩니다. 

 

곱셈에서 주의할 것이 행렬 원소끼리 곱셈을 할 때는 어레이 연산을 사용해야 합니다. 

내공 옥 시리즈 1에서 다루었지만 

아래 7번에서 더 자세히 설명해보겠습니다. 

 

 

7. 행렬 연산과  어레이 연산

 

7-1. 행렬연산 (곱하기)

행렬의 사칙연산 + - 곱하기 나눗셈에 대해서는 

다음 포스팅에 자세히 설명되어 있습니다. >> 8번의 행렬 곱셈을 잘 봐 두시길 바랍니다.

https://haai.tistory.com/4?category=800204

행렬의 곱셈에서 

  A×B ≠ B×A입니다. (교환 법칙이 성립하지 않습니다.)
A×B 

앞의 행렬의 열과 

뒤의 행렬의 행이 같아야 곱셈이 가능합니다.

이걸 선형대수학에서 적합하다(Comfotable)라고 합니다.

 

b*A 를 해야 정상적인 출력이됩니다.

 

또  A*b를 입력해도 오류가 날 것이라고 생각을했는데 (앞의행렬의 열과 뒤 행렬의 행의 크기가 다르기 때문에)

아래와 같이 실행이 됩니다.

 

왜 그런지 알아보니 다음과 같습니다.

 

(앞의행렬을 뒤의행렬사이즈로 분해가 가능합니다.)

행렬 .* 행렬은 행렬 사이즈가 같아야 하고

행렬 .* 행벡터는 행 길이가 같아야 하고 (열의 개수)

행렬 .* 열벡터는 열 길이가 같아야 하고 (행의 개수)

행렬 .*스칼라=스칼라 가  됩니다. 

(모두 교환법칙 성립합니다.)

 

7-2. 어레이 연산

어레이 연산이라는 것은 이전 시리즈에서는 요소별 곱셈 연산자라고 표현을 했네요.

이 또한 아래 포스팅에서 자세하게 설명해두었습니다.

https://haai.tistory.com/9

 

어레이(array)라는 것은 배열이라는 뜻을 가진 단어입니다.

 

행렬곱하기와 어레이연산은 다른 방식으로 동작한다는 것이 중요합니다.

 

7-3. QnA

시리즈 1에서 요소별 연산자.*에 대해서 공부했는데

1. 요소별 연산과 어레이 연산이 같은 의미인지

같은 의미입니다. 

 

2. c언어에서 배열을 이용해서 행렬의 형태로 표현할 수 있다고 생각했는데

array연산과 행렬 연산이 따로 있는 것 보니까  c언어에서는 배열을 행렬의 생김새로만 나타내는 것뿐인지?

라는 의문이 생겼습니다.

C언어에서는 배열을 만들어서 곱셈을 한다면 요소별 연산(어레이 연산)만 되고 행렬 연산은 명령어가 따로 없다고 합니다.

 

3. 그래서  매틀랩이 행렬 계산에유용한 것인지

 

에 대한 궁금증이 생겼었습니다.

 

 

 

 

 7-4. 행렬 연산과 어레이 연산의 차이를 다시 정리해보면 다음과 같습니다.

 

(1) 행렬 연산(matrix operation) : 행렬 사이의 일반적인 곱하기 연산

(앞 행렬의 열 개수와 뒤 행렬의 행 개수가 같아야 함>>>>="같은 자리에 있는 원소끼리 곱하려면 행렬의 사이즈가 같아야 한다"는 뜻)

 

*

 

 

 


(2) 어레이 연산(array operation) : 행렬 곱하기가 아니라 같은 자리에 있는 원소끼리 곱하는 연산

(앞 행렬과 뒤 행렬의 크기가 같아 야 함)

.*

 

행렬(벡터)곱셈 *

스칼라 곱셈 .*

 

 

 

7-5. 문제 1

 

각 원소를 제곱하고 싶다고 하였다.

이럴 때 어레이 연산을 하면 됩니다. 

%9페이지 5번 첫번째 예제
x=[1 2 3 4 5]
y=x.^2

 

 

 

7-6. 문제 2

 

소스코드와 결과 화면입니다. 

%9페이지 5번 두번째 예제
A=[1 2; 3 4]
B=[1 0;2 3]

C=A*B %행렬의 곱셈
D=A.*B %각각 원소끼리의 곱셈

 

 

 

 

8. m파일에 대한 설명

이전 포스팅에서 아주 자세하게 설명했습니다.

https://haai.tistory.com/7?category=800204

 

내가 공부한 옥타브5- 인터페이스 알아보기,m파일 만들기

이번에는 octave(matlab)의 인터페이스에 대해서 알아보고 Editor을 실행하고 m파일로 저장해서 실행시키는 방법을 알아보겠습니다. octave라는 프로그램과 대화하는 방법은 크게 3가지가 있습니다. 첫 번째로 com..

haai.tistory.com

 

9.m 파일을 이용해서  다음과 같은 script를 작성해보겠습니다. 

다음과 같은 코드를 m파일로 저장한 뒤 실행시켜보시오.

(파일명은 myscript.m으로 저장되게끔 하시오.)

(매트랩의 경우 마지막에. m을 붙여서 저장해주어야 하는데, 옥타브는 그냥 저장해도 저절로. m이 생긴 상태로 저장되므로 이름만 저장하면 됩니다. )

 

 

 

 

%11페이지 6번 myscript이름을 가진 m파일로 저장하여라.
x=[0:.1:1];
y=100*x; %벡터y는 벡터x의 각 원소를 100배 하여 얻어진다. 
z=x.*y;  %벡터 x와 y의 어레이 연산입니다. 
x 
y
z 
%x,y,z 를 각각 보여줍니다. 

 

m파일로 저장한 뒤, commandwindow에 m파일명을 입력하면 아래와 같이 출력이 됩니다. 

 m파일을 바탕화면에 저장해두었다면, commandwindow의 경로를 바탕화면으로 해주어야 제대로 실행이 될 것입니다. 

 

 

 

반응형
Comments