Gamma function(감마함수)를 통하여 gamma(n+1)=n!(팩토리얼, factorial) 증명

 

 

 

1. 감마함수 정의

    $ \Gamma \left ( n \right ) = \int_{0}^{\infty }e^{-x}\cdot x^{n-1 }\: dx $

2. gamma(n+1) = n! 증명

  2-1) gamma(n+1) 재정의

    $ \Gamma \left ( n+1 \right ) = \int_{0}^{\infty }e^{-x}\cdot x^{n }\: dx $

  2-2) gamma(n+1) 부분적분

    부분적분법

    $ \int u(x)v'(x) \; dx = u(x)v(x) + \int u'(x)v(x)\: dx $

    부분적분

    $ \int_{0}^{\infty }x^{n}e^{-x}\: dx = [-x^{n}e^{-x}]_{0}^{\infty} - \int_{0}^{\infty }nx^{n-1}(-1)e^{-x}\: dx $

    $ \int_{0}^{\infty }x^{n}e^{-x}\: dx = \lim_{x\rightarrow \infty}(-x^{n}e^{-x})-(0e^{0}) + n \int_{0}^{\infty }x^{n-1}e^{-x}\: dx $

    $ \int_{0}^{\infty }x^{n}e^{-x}\: dx = n \int_{0}^{\infty }x^{n-1}e^{-x}\: dx $

    $ \Gamma (n+1) = n \Gamma (n) $

  2-3) gamma(1) 계산

    $ \Gamma (1) = \int_{0}^{\infty}e^{-x} \cdot x^{1-1} \: dx $

    $ \qquad \, = [-e^{-x}]_{0}^{\infty} $

    $ \qquad \, = \lim_{x\rightarrow \infty} (-e^{-x}) - (-e^{0}) $

    $ \qquad \, = 0 - (-1) $

    $ \qquad \, = 1 $

  2-4) 순환 반복하므로 gamma(n+1)은 n!

 

    $ \Gamma (n+1) = n \Gamma (n) $

    $ \Gamma (n) = (n-1) \Gamma (n-1) = n \times (n-1) \times \Gamma (n-1) $

    $ \vdots $

    $ \Gamma (2) = 1 \cdot \Gamma (1) $

    $ \Gamma (1) = 1 $

    $ \Gamma (n+1) = n \times (n-1) \times ... \times 2 \times 1 $

    $ \therefore \Gamma (n+1) = n! = \int_{0}^{\infty}e^{-x}\cdot x^{n} \: dx $

Failed to import 'pydot'. Please install 'pydot'. For example with 'pip install pydot'.

 

상황설명-

이 에러는 keras 혹은 의사결정나무(decision tree)에서 그래프를 그릴 때 사용하는 graphviz에 문제가 있을 때 발생합니다. 맥과 같은 linux os에서는 패키지가 깔리지 않았을 때, windows에서는 거의 무조건 발생하는 에러라고 보시면 됩니다. 사실 에러는 pydot자체적인 문제가 '아닙니다.' pip install pydot해도 오류는 해결이 되지 않아요.

 

해결법-

1) Mac과 같은 linux기반 OS + Anaconda

  (prompt)

  $ conda install graphviz

  [if needed]

  (coding tools)

  import os
  os.environ["PATH"] += os.pathsep + '~/opt/anaconda3/lib/site-packages/graphviz'

프롬프트에서 먼저 graphviz를 인스톨 해주시면 문제없이 돌아가는 경우가 많습니다. 그러나 설치한 뒤에도 계속해서 에러가 발생한다면 명시적으로 코드내에서 시스템 환경변수를 등록해주시면 됩니다.

 

2) Windows + Anaconda

  맥에 비해서 조금 복잡합니다.

  먼저 프롬프트에서

  $ pip install pydotplus

  를 입력하여 pydotplus를 설치해주십시오.

  이후
  https://graphviz.gitlab.io/_pages/Download/Download_windows.html
  홈페이지에 접속하여 OS에 맞는 graphviz설치 프로그램을 받아주신 뒤 설치하여 주십시오.(msi 확장자를 가진 파일로 다운로드 받아주시기 바랍니다.)

  만약 어떤 설정도 건드리지 않고 설치하였을 시 C드라이브 아래 Program Files (x86)경로에 깔릴 것입니다.

  이후
  import os
  os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'

  맥에서와 마찬가지로 코드 내에서 명시적으로 시스템 패스를 설정해주시면 됩니다.

  (실제 시스템 자체에서 패스 설정하는 방법이 있지만 복잡하여 코드 내 설정방법으로 설명드렸습니다.)

vise versa: 역도 마찬가지로

ut supra: as above

[시계열분석|MachineLearning|Time Series|Prophet] fbprophet 설치하기

Anaconda

가장 간단한 방법
conda install -c conda-forge fbprophet

Naive python

1. pip install cython

2. pip install "pystan<2.18"

3. pip install fbprophet

[Errno 2] No such file or directory: 'usr/bin/python': 'usr/bin/python'

/usr/bin/python: bad interpreter: No such file or directory

This error caused by no existence of simbolic link.

solution

ln -s /usr/bin/python2.7 /usr/bin/python
It makes simbolic link that command of python.

[Jupyter/Python] How to change default python version

Easiest way to change default python version is using alias.
If you want to change default python version with using 'anaconda', then go to second headline.

simplest way to change python version on prompt

0) check python version $python --version

This is the default python version

1) $vi ~/.bashrc

2) add alias python='usr/bin/python'

Attention: after alias command, there are no spaces

3) then $source ~/.bashrc

4) check python version once more $python --version

You can find out about changed python version

change default python with anaconda

The order of file path is important.
Threfore, the change order of file path can change the default python interpreter path.

1) find out default python path on prompt. $which python

2) and then find out path order and <copy it(1)>. $echo $PATH

3) change path order.
1) Open 'bashrc' up. $vi ~/.bashrc
2) Add export PATH="<copied(1)>". Attention, the copied file pathes ordering must be changed that anaconda path behind of usr/bin.

4) $source ~/.bashrc

공책 잃어버려서 정리해보는 금속공예공방 다니면서 공부한 내용들

 

금속공예 회차
1. 황동판 톱질(태장대, 톱날방향, 실톱, 톱질방법)
2. 톱질 키링(스노우)(핸드드릴, 핸드피스)
3. 무광 평반지1(은925, (반지 반지름+1.7mm)*3.14, 톱질->연결부위 마감->열풀림->모양잡기->붕사(flex)->땜('강'중약)->산세척->지환봉+고무망치->망치평->아크릴판 평->줄질->수세미-무광)
4. 무광 평반지2[평반지 실습]
5. 유광 각반지(줄질->240이상 단계별 사포질->실리콘->광약->텅스텐바->초음파세척)
6. 유광 실반지(금속바렐기)
7. 팔찌(망치질감+꼬기+가운데 홈+유화가리(은산화제))
8. 팔찌
9. 꼬임&매듭(드릴사용, 3&4선매듭)[매듭+평 반지]
10. 점프링제작(드릴&원형집게 사용, 원형/타원)
11. 체인팔찌제작+01잠금장치제작
12. granulation(만들기, 붙이기)
13. granulation 반지 제작, reticulation(열풀림 후 산화피막->산세척->고열->공랭)

'Diary > etc' 카테고리의 다른 글

[일상] 좋은 의사선생님 vs 사짜 의사선생님  (0) 2021.08.03
목공  (0) 2020.02.11

공책 잃어버려서 정리해보는 목공방 다니면서 공부한 내용들

 

회차

1. 기본도구
2. 톱질
3. 스크류소
4. 밴드소[미니프로젝트-기타등등]
5. ㄱ 맞춤
6. 사개맞춤
7. 사포(100-몇천, 100/220, 결방향, 모서리, 마감)[미니프로젝트-코끼리]
8. 미니프로젝트-물개
9. 사포연장&칠(스테인, 3301?3303?, 30분, 오일스테인(들기름/참기름/호두기름)-3일, 일반오일스테인-12시간, 습도중요)

'Diary > etc' 카테고리의 다른 글

[일상] 좋은 의사선생님 vs 사짜 의사선생님  (0) 2021.08.03
금속공예  (0) 2020.02.11

케이블 TV/IPTV 분배하기, 공청주파수, 실내안테나

 

이번에 TV가 한대 더 생겨서 활용해보려고 별짓을 다 하면서 있었던 일들을 정리해봅니다.

 

결론적으로, 'TV 서비스에 가입된 경우'(D'Lite(케이블), BTV(IPTV) 등) 단순 분배가 불가능합니다.

따로 셋탑박스가 필요합니다. (독립적으로 두 TV를 보고자 하는 경우)[현재 집에서 쓰는 셋탑은 SMT-C5010]

단순하게 같은 방송출력이 여러대의 TV에서 필요한경우 HDMI 분배기 등으로 활용하능합니다.

 

옛날의 단순 케이블 혹은 공청주파수를 이용하는 TV 케이블의 경우 분배기를 통하여 단순 분배가 가능합니다.

(과거이 요짓을 많이 해봐서 케이블도 될 줄 알았는데, 안되네요..)

 

아파트의 경우 벽에 TV out이 전부 콘센트처럼 되어있어 2012년 이후 생산 TV는 별도의 셋탑박스없이 바로 동축케이블로 연결하면 공청주파수 TV(KBS, SBS, MBC, EBS) 시청이 가능합니다.

 

빌라의 경우 옥상에 커다란 실외안테나가 있을 것입니다. 과거부터 여기서 케이블 선을 따서 썼기때문에 집에 TV가 있다면 이 안테나에 연결된 동축케이블이 있을텐데, 여기에 TV 연결하시면 됩니다.

 

그러나 요새 유료서비스들로 전환이 되면서 이 선을 잘라버리고, 자체 서비스 케이블을 깔아놓는 경우가 있습니다.

 

이때 공청주파수를 사용하기 위해서는 다시 외부안테나에서 선을 따오시던가 실내안테나를 설치하여 TV에 연결하여야 합니다.(2012년 이전 TV는 디지털 변환기 필요)

 

요새 빌라의 경우 외부 안테나가 있어도 여기서 선을 안따오는 경우도 많아서 현재 위치가 제대로 TV 주파수를 잡고 있는지 확인이 필요합니다.

 

kbs 수신안내 지도를 참고하시면 공청주파수를 현재위치에서 잡을 수 있는지 없는지 확인이 가능합니다.

https://map.kbs.co.kr/map.jsp

 

KBS 수신안내 지도

설정 확인 측정 시작 날짜 / 시간 VALUE MIN AVG MAX 측정 종료 날짜 / 시간 SNR 99.99 99.99 99.99 송신시설 Level 매체 장비명 장비 코드   측정시간 송신시설 미디어 주파수 채널 SNR Level

map.kbs.co.kr

잡힌다고 나와도 사실 진짜로 잡힐지, 몇개나 잡힐지는 미지수이긴합니다..

 

실패가능성을 최대한 낮춰보는 것이라고 생각하시면 맘이 편합니다.

 

 

그리고 저는 실내안테나를 설치하였습니다. 어차피 실외안테나 설치하면 다시 또 선을 끌어와야하는데, 그럴바에야 원래 있던 실외안테나에 다시 연결하죠..

 

그래서 실내안테나 설치하고 '자동채널설정'을 통해서 채널을 잡아봅니다.

 

저는 수신안내지도에서 모든 채널이 안잡혔지만, 다행히도 kbs1 단 하나만 잡히는군요.

처음으로 지인의 부탁을 받아 shell 스크립트를 짜 보았습니다.

csh로 짰는데, 생각보다 자료가 적어서 크게 당황하였고, 대부분의 자료는 영어였으며, 프로그래밍의 다양성을 존중하는 언어인지 같은 상황에 대해 10가지 문서에서 10가지 다른 프로그래밍 방식을 사용하더군요.

그리고 기본적인 내용을 한번 정리해 보기로 하였습니다.

전에도 한번 했었는데, 워낙 생소한 분야라 한번 익숙해졌다가도 다시 초기화되어 저도 기록을 남깁니다.

작성해본 스크립트는 씨 쉘(csh) 기준입니다.

  • csh, bash 차이에 따라서 프로그래밍 언어도 차이가 있는 것 같습니다.

0) 셸 스크립트 작성 및 실행법

파일 최상단에

#!/bin/csh
#
# comment

입력 후 하단에 쉘 스크립트를 작성해주시면 됩니다.
파일명의 확장자는 .csh이며, mac에서 사용시 그냥 터미널에서 csh 명령어 이후에 파일이름을 써주시면 스크립트 파일이 실행됩니다.
여기서 최상단 문장을 제외한 #으로 시작하는 문장은 전부 주석입니다.

1) 기본적인 변수선언 및 변수 사용

set var = "Hello"

echo $var

2) 쉘스크립트 실행 후 결과값을 변수에 저장

set ls = `ls`

echo $ls

여기서 ` 부분은 작은 따옴표가 아니라 그레이브 혹은 백틱 이라는 탭 키 위에 있는 문자입니다.
이 그레이브로 쌓인 문장은 쉘에서 실행된 뒤 그 결과를 반환하는 약간의 '부분실행' 명령어 같은 것입니다.
여기서는 배쉬(bash) 명령어인 ls로 현재 디렉토리의 파일 리스트를 읽어온 뒤 그것을 다시 ls라는 변수에 저장하였습니다.

3) 파이프 명령어(pipe operation, |)

|는 엔터 근처에 있는 \표시 혹은 백슬래시기호를 시프트 키를 누른 채 누르면 써지는 파이프 기호입니다.
csh에서 이 파이프 기호는 왼쪽 명령의 결과를 오른쪽 명령의 인풋으로 사용한다는 뜻입니다.

4) 파일 출력 명령어 >

> 는 파일을 출력하라는 명령어이며, 왼쪽의 결과를 오른쪽에 쓰는 파일 이름으로 저장합니다,
예를 들어
echo "Hi" > hi.txt
라고하면 hi.txt라는 파일에 Hi가 입력된 채로 파일이 생성됩니다.

5) foreach

사실 요새는 for 보다는 foreach 같이 내부 요소를 순환하는 명령이 사용하기 더 편합니다. (직접적으로 수의 증감이 필요한 경우 제외하고)
csh에서 foreach명령문의 형태는 아래와 같습니다.

foreach var1 ( $var2 )

    echo $var1

end

즉, var2에 저장된 요소들을 하나씩 var1에 저장하며 for문을 도는 것입니다.
여기서는 단순히 출력만을 합니다.
조금 더 활용하면

foreach var1 ( `명령` )

    echo $var1

end

와 같이 활용할 수도 있습니다. 직접적으로 명령을 입력해서 그 출력을 foreach의 순회 요소로 만드는 것이지요.

6) if

if (조건문) then

    실행문

endif

if는 위와 같은 구조로 구성됩니다.
여기서 조건문의 or와 and는 c와 같은 ||, && 연산자로 처리할 수 있습니다.
또한 같다 다르다의 명령 또한 c와 같은 ==, !=입니다.
추가적으로 텍스트 비교를 위해서는 단순히 $text1 == $text2라고 하면 "if: Expression syntax"에러를 내기 때문에 `echo $text1 ` == `echo $text2`의 변형기출이 필요합니다.

7) 파일 경로 조작

전체 파일 경로에서, 끝에 :t를 붙이면 확장자를 포함한 파일 명만 나오고, :r을 추가로 붙이면 확장자를 제외한 파일 명을 리턴해줍니다.
즉, "/dir1/test.txt":t:r을 써주시면 test만 출력됩니다.
더욱 자세한 정보는 이곳을 클릭해주세요.

8) awk

사실 awk만으로도 단순 쉘 스크립트 뿐만이 아닌 거의 독자적인 문서 리딩 명령이라고 할 수 있습니다.
그래서 awk를 사용하기 위해서도 복잡한데 기본적인 것들만 정리해보도록 하겠습니다.
기본적으로 awk는 문서를 순차적으로 한줄씩 읽어내려간다고 생각하시면 됩니다.
awk의 기본 형태는
awk '조건 및 실행문' 입력파일
입니다.
입력파일
이 부분에서 파일 입력을 받아서 조건 및 실행문에서 조건에 맞게 무언가를 실행하고 그것을 출력하는 함수입니다.
여기서 cat 입력파일 | awk '조건 및 실행문'으로 입력해도 됩니다. (cat은 단순히 입력파일의 내용을 보여주는 함수입니다.)
'조건 및 실행문'
이 안에서 awk에서 제공하는 조건문은 그냥 작성 됩니다. (같다/다르다 ==/!= 명령, or/and명령 ||/&& 사용가능)
그리고 built-in variables라고, 내장 변수와 함수들이 존재합니다.
$0 : 전체 라인
$1 : 첫번째 열
$2 .. $n : n번째 열
NR : 행 번호(가령 첫번째 행은 1)
length(변수) : 변수의 길이
이외에도 더 있지만, 가장 자주 쓰는 내장 변수들은 이정도입니다. 더 궁금하시면 구글링 해보시면 됩니다.
또한 정규표현식(regex)도 사용할 수 있습니다.
/정규표현식/로 사용이 가능하며, 시작 끝표현인 ^ $ 등 정규표현식에서 사용하는 방식은 전부 사용됩니다.
기본적으로 아무것도 써주지 않고 조건만 써주면 현재 라인 전체에서 찾습니다.
정규표현식에서 built-in variables를 사용하기 위해선 ~ 명령어로 '이 안에서 찾아라'라는 것을 명시해 주어야 합니다.
가령
/hello/, $0 == "hello", $0~/hello/
위의 세 명령어는 전부 같은 조건입니다.
NR==1, NR==5를 조건으로 입력하면 첫번째 행부터 5번째 행까지 출력합니다.
단순히 NR<6으로 작성할 수도 있습니다.
기본적으로 awk에서 조건에 맞는 결과는 바로 리턴해줍니다. 그러나 awk내에서 csh과 같은 프로그래밍 문법을 사용하려면 대괄호(brace, {})안에 작성하여야 합니다.
기본적으로 if (), print, printf, substr(), length(), for(;;)등 사용 가능합니다.
예시로
awk '$1=="test" {printf "%s %s",$3,substr($4,1,length($4)-1)}' test.txt
같이 사용하며
print안에서 연속해서 변수를 출력할경우 print $1,$2와 같이 콤마로 연결하여 쓰며, 여러 명령어를 동시에 사용할 땐 print $1 print $2와 같이 공백으로 연결해줍니다. 혹은 명시적으로 세미콜론으로 구분지어주기도 합니다.
print명령의 경우 뒤에 아무 것도 쓰지 않으면 전체 줄 출력, print $1과 같이 변수 입력하면 해당 변수 출력합니다.

8-1) awk 심화(문서 조건)

awk의 조건명령문 안에서 대괄호는 세미콜론으로 연결됩니다.
또한 BEGIN, END등의 명령으로 문서의 시작점과 끝점에서 특정하게 실행시킬 명령문을 지정할 수 있습니다.
awk 'BEGIN {print};END {print}' test.txt 명령은 처음 한줄과 끝 한줄만을 출력합니다.

8-2) awk 심화(변수 passing)

awk를 사용하다보면, csh의 변수를 awk에서 사용해야 할 때도 있고, 반대로 awk의 결과를 변수로 저장해야 할 경우도 있습니다.
사실 이 경우가 정말 검색에서 잘 안나오는데, 하나하나 설명드리겠습니다.

1) csh변수 -> awk변수

-v

가장 흔히 쓰는 방식은 -v 명령을 통하여 변수를 링크시키는 것입니다.
예를 들면 awk -v var=$ex_var 'print var'라는 명령에서 csh의 ex_var라는 변수를 awk 내부의 var라는 변수로 대입시켜 print하는 명령입니다.

'"${}"'

awk내에서 '"${변수이름}"'식으로 shell variable을 awk내에서 사용 가능합니다.
2) awk변수 -> csh변수
이게 진짜 아무데도 안나오고, csh에 맞게 설명되어있는 부분이 없습니다.
인터넷에 declare, source, eval 이런 명령어들을 사용하는데, 정말 단순합니다.

set var = `awk '{print}' test.txt`

echo $var
var = $(awk 'NR>5 {print}' test.txt)

echo $var

이렇게 하면, test.txt에 쓰여져 있는 것들이 print로 출력되며, 이 결과가 var라는 csh변수에 저장되고, 이것을 echo가 출력하게 됩니다.

9) 기타 shell script 명령어들

1) for

for i in {start..end...step}
do
    내용
done

2) foreach

foreach i ( 1 2 3 4 5 )
    내용
end

3) if

if (condition) then
endif
if [condition] then
elif [condition] then
else
fi

만약 더 사용하게되며 추가적으로 알게되는 내용은 실시간으로 업데이트 예정입니다.

'Software > Shell script' 카테고리의 다른 글

[csh] data extractor  (0) 2020.01.19

+ Recent posts