2016년 8월 1일 월요일

Julia 연습 5

In [ ]:
#
# 나는 julia 를 사랑하는가.
#
In [ ]:
# Complex and Rational Number
# 복소소 유리수
In [1]:
# julia 는
# 복소수 i 를 전역상수 im 에 연결해놓았다.

# i 가 아니고 im 으로 정한 이유 따위는
# 나는 궁금하지 않다.

# 복소수를 표현할 수 있는 방법이 있다는 사실에 감사할 뿐.


im
Out[1]:
im
In [2]:
1 + 2im
Out[2]:
1 + 2im
In [3]:
# 닥치고 보라.

(1 + 2im)*(2 - 3im)
Out[3]:
8 + 1im
In [4]:
(1 + 2im)/(1 - 2im)
Out[4]:
-0.6 + 0.8im
In [5]:
(1 + 2im) + ( - 2im)
Out[5]:
1 + 0im
In [6]:
(-3 + 2im) - (5 - 1im)
Out[6]:
-8 + 3im
In [7]:
(-1 + 2im)^2
Out[7]:
-3 - 4im
In [8]:
(-1 + 2im)^2.5
Out[8]:
2.7296244647840084 - 6.960664459571898im
In [9]:
(-1 + 2im)^(1 + 1im)
Out[9]:
-0.27910381075826657 + 0.08708053414102428im
In [10]:
3(2 - 5im)
Out[10]:
6 - 15im
In [11]:
3(2 - 5im)^2
Out[11]:
-63 - 60im
In [12]:
3(2 - 5im)^-1.0
Out[12]:
0.20689655172413796 + 0.5172413793103449im
In [13]:
# 형변환 장치가 적절히 작동해 준다.

2(1 - 1im)
Out[13]:
2 - 2im
In [14]:
(2 + 3im) - 1
Out[14]:
1 + 3im
In [15]:
(1 + 2im) + 0.5
Out[15]:
1.5 + 2.0im
In [16]:
(2 + 3im) - 0.5im
Out[16]:
2.0 + 2.5im
In [17]:
0.75(1 + 2im)
Out[17]:
0.75 + 1.5im
In [18]:
(2 + 3im) / 2
Out[18]:
1.0 + 1.5im
In [19]:
(1 - 3im) / (2 + 2im)
Out[19]:
-0.5 - 1.0im
In [20]:
2im^2
Out[20]:
-2 + 0im
In [21]:
1 + 3/4im
Out[21]:
1.0 - 0.75im
In [22]:
# 복소수값을 조작하는 표준 함수를 제공한다.

real(1 + 2im)
Out[22]:
1
In [23]:
imag(1 + 2im)
Out[23]:
2
In [24]:
conj(1 + 2im)
Out[24]:
1 - 2im
In [25]:
# 절대값. 0 으로부터 거리

abs(1 + 2im)
Out[25]:
2.23606797749979
In [26]:
# 절대값의 제곱

abs2(1 + 2im)
Out[26]:
5
In [27]:
# 라디안 값을 리턴한다.

angle(1 + 2im)
Out[27]:
1.1071487177940904
In [28]:
# 기본 함수 전체가 복소수에 대해 작동한다.

sqrt( 1im)
Out[28]:
0.7071067811865476 + 0.7071067811865475im
In [29]:
sqrt( 1 + 2im)
Out[29]:
1.272019649514069 + 0.7861513777574233im
In [30]:
cos(1 + 2im)
Out[30]:
2.0327230070196656 - 3.0518977991518im
In [31]:
exp(1 + 2im)
Out[31]:
-1.1312043837568135 + 2.4717266720048188im
In [32]:
sinh(1 + 2im)
Out[32]:
-0.4890562590412937 + 1.4031192506220405im
In [33]:
# 이건 안된다.

sqrt(-1)
LoadError: DomainError:
sqrt will only return a complex result if called with a complex argument. Try sqrt(complex(x)).
while loading In[33], in expression starting on line 1

 in sqrt at math.jl:146
In [34]:
# 이건 된다.
# sqrt(-1) 과 같은건데, 하난 되고, 하난 안된다.

sqrt( -1 + 0im)
Out[34]:
0.0 + 1.0im
In [35]:
# 이건 안된다.
# 곱하기를 생략하기는 안된다.

a = 1; b = 2; a + bim
LoadError: UndefVarError: bim not defined
while loading In[35], in expression starting on line 3
In [36]:
# 이건 된다.
# 곱하기를 반드시 써줘야 한다.

a = 1; b = 2; a + b*im
Out[36]:
1 + 2im
In [37]:
# 그런데, 위와 같은 기능이 필요하다면
# 생성자를 써라.

complex( a, b)
Out[37]:
1 + 2im
In [38]:
1 + Inf*im
Out[38]:
1.0 + Inf*im
In [39]:
1 + NaN*im
Out[39]:
1.0 + NaN*im
In [40]:
# 유리수
# 반올림이 발생하는 부정확한 소수가 아니라
# 정수의 정확한 비율로 표시하는 유리수.
# 유리수는 // 연산자로 표현한다.

2//3
Out[40]:
2//3
In [41]:
6//9
Out[41]:
2//3
In [42]:
-4//8
Out[42]:
-1//2
In [43]:
5//-15
Out[43]:
-1//3
In [44]:
-4//-12
Out[44]:
1//3
In [45]:
# 분모 denominator den()
# 분자 numerator   num()

num(2//3)
Out[45]:
2
In [46]:
den(2//3)
Out[46]:
3
In [47]:
2//3 == 6//9
Out[47]:
true
In [48]:
2//3 == 9//27
Out[48]:
false
In [49]:
3//7 < 1//2
Out[49]:
true
In [50]:
3//4 > 2//3
Out[50]:
true
In [51]:
2//4 + 1//6
Out[51]:
2//3
In [52]:
5//12 - 1//4
Out[52]:
1//6
In [53]:
5//8 * 3//12
Out[53]:
5//32
In [54]:
6//5 / 10//7
Out[54]:
21//25
In [55]:
# 부동소수점수로 변환

float( 3//4)
Out[55]:
0.75
In [56]:
isequal(float(a//b), a/b)
Out[56]:
true
In [57]:
# 무한대 유리수
# Inf 표현이 가능하다.

5//0
Out[57]:
1//0
In [58]:
-3//0
Out[58]:
-1//0
In [59]:
typeof(ans)
Out[59]:
Rational{Int64}
In [60]:
# NaN 표현은 불가하다.

0//0
LoadError: ArgumentError: invalid rational: zero(Int64)//zero(Int64)
while loading In[60], in expression starting on line 3

 in call at rational.jl:8
 in // at rational.jl:22
In [61]:
# 자동 형변환 장치덕분에 다른 타입과 연산이 된다.

3//5 + 1
Out[61]:
8//5
In [62]:
3//5 - 0.5
Out[62]:
0.09999999999999998
In [63]:
2//7 * (1 + 2im)
Out[63]:
2//7 + 4//7*im
In [64]:
2//7 * (1.5 + 2im)
Out[64]:
0.42857142857142855 + 0.5714285714285714im
In [65]:
3//2 / (1 + 2im)
Out[65]:
3//10 - 3//5*im
In [66]:
1//2 + 2im
Out[66]:
1//2 + 2//1*im
In [67]:
1 + 2//3im
Out[67]:
1//1 - 2//3*im
In [68]:
0.5 == 1//2
Out[68]:
true
In [69]:
0.33 == 1//3
Out[69]:
false
In [70]:
0.33 < 1//3
Out[70]:
true
In [71]:
1//3 - 0.33
Out[71]:
0.0033333333333332993

Firefly Algorithms

firefly algorithm 001 Firefly Algorithms ¶ 반딧불 알고리즘 번역 요약 ¶ References [1] X. S. Y...