반응형
bash_Tip_작업속도

Bash Tip 작업속도를 빠르게

다음 방법을 알게 되면 bash 쉘 상에서 커맨드 입력 속도가 아주 빨라진다.

이전 명령어 실행

보통은 쉘상에서 위아래로 이동하여 전에 실행한 명령어를 찾아 실행하면 된다.
하지만 아래와 같이 하는 것이 더 편리할 때가 있다.

!! ; 바로 전 명령어
!스트링 ; 해당 스트링으로 시작하는 최근 커맨드.
!번호 ; history 번호

$ gcc a.c 
$ ls -al C*
...
$ ping 8.8.8.8

$ !!
 이전 명령어 ping 8.8.8.8 가 실행된다.
$ !l
  이전 명령어 중 l로 시작하는 최근 명령어를 실행한다.
  즉, 위에 ls -al C*
$ !gc
  이전 명령어 중 gc로 시작하는 것을 실행.
  즉, gcc a.c

또는 명령어 히스토리를 보고 번호로 실행할 수 있다.

$ history
50 netstat -ant
51 ls -al
52 gcc a.c

$ !50
	히스토리에서 50번 명령어를 실행한다.
	즉, netstat -ant 를 실행.

터미널 종료

^+C ; 현재 실행 중인 프로그램 종료. interrupt
^+D ; 터미널 종료. (logoff)

화면 지우기

clear 를 실행하면 터미널 화면을 지운다.
더 간편한 방법으로 단축키가 있다.
^+L ; clear 커맨드와 같다.

TAB 자동 완성

파일명을 모두 입력할 필요가 없다. 간단히 TAB키를 활용.
탭. 또는 탭탭.

$ ls a ; 여기서 TAB키를 누르면 a로 시작하는 파일이 자동으로 나타난다.
$ ls abc

위 경우 나타나지 않으면 없거나 여러 개라서 그렇다.

$ ls a ; 여러 개인 경우 TAB키를 한 번 더 누르면 모두 출력된다.
a1
a2
a3
...

커서위치 뒤로 삭제

이전 커맨드를 커서로 찾다가 뒷 부분을 다 수정해야 하는 경우.
^+K ; 커서위치 포함하여 뒤로 나온 텍스트 삭제 (cut)
^+U ; 커서 전에 나온 앞의 텍스트를 삭제 (cut)
^+Y ; 삭제된 텍스트를 붙여넣기
^+W ; 현재 입력한 커맨드 삭제.

$ ping 1.2.3.4
위 커맨드에서 커서를 3 위치로 이동하고 ^+K  (3.4가 삭제)
$ ping 1.2.   이후에 수정하면 된다.

$ ping 9.9. 여기서 ^+Y를 누르면 삭제됐던 텍스트가 붙여넣기가 됨
$ ping 9.9.3.4

커서 위치 이동

^+A ; 맨 앞으로 이동
^+E ; 맨 뒤로 이동

명령어 편집

먼저 환경변수에 기본 EDITOR를 vi로 설정해 둔다.
.bashrc 에 추가.

export EDITOR=vi

^+X+E ; 현재 입력한 커맨드를 편집기로 편집. (vi) 저장하고 빠져나오면 바로 편집한 명령어를 실행한다.

로그 보기 커맨드

대부분 로그 파일을 실시간으로 볼 때 tail을 많이 쓸 것이다.

tail -f catalina.out

이거 대신 아래 커맨드를 써라. (기본으로 Shift+F 효과가 들어감. 쓰다 보면 훨씬 편리하다.)

less +F catalina.out

less에는 유용한 다른 기능들이 많이 있다.

Shift+F ; 마지막으로 실시간 이동. (tail -f 처럼 실시간으로 추가되는 로그를 볼 수 있다.) less에 +F 옵션을 주면 바로 이 모드로 작동한다.
이 모드에서 ^+C를 tail -f 모드에서 빠져나온다.

위 모드에서 빠져나오면 기본으로 vi 편집기처럼 이동이 가능함. (^+B, ^+F 페이지 이동, j, k 위 아래 스크롤). 이전 데이터를 쉽게 볼 수 있고, 언제는 tail 모드로 진입했다 빠져나왔다 할 수 있다.

종료는 q

Author: crazyj7@gmail.com

'Develop > Linux_Unix' 카테고리의 다른 글

[도커] tomcat mysql mongodb  (0) 2021.10.31
[도커] tomcat, mariadb 환경 war hang/slow  (0) 2021.04.28
리눅스 백그라운드 실행(터미널종료에도)  (1) 2021.02.23
Git 사용법_요약  (0) 2019.12.16
Ubuntu18/tomcat8 setup  (0) 2019.11.08
반응형

파이썬으로 알고리즘 프로그래밍을 하다가 우연히 set에 set을 추가할 일이 있었다.

리스트에 리스트가 추가가 가능한 것 처럼, set도 되지 않을까??

생각해서 해보니, 안 되었다. set에는 immutable 즉, 변경불가한 데이터만 원소로 추가가 가능하였다. 

따라서 set에는 set, list 등 변화가 가능한 것들이 추가가 안 된다.

정말 안되나 하다가...  set을 추가할 방법을 찾았다. 그것은 frozenset.

한 줄 요약: 원소가 되는 set을 frozenset으로 캐스팅하여 사용한다!

더 이상 수정불가능한 immutable 타입으로 캐스팅하면 원소로 넣을 수 있다.

a = set()

# 리스트 추가 안됨.
a.add([1,2,3]) # TypeError: unhashable type: 'list'

# SET 도 추가 안됨.
b = set()
a.add(b) # TypeError: unhashable type: 'set'

# SET을 추가할 수 있는 방법??? FROZENSET!
a.add(frozenset(b)) # ok

 

'Python' 카테고리의 다른 글

투명 배경 이미지 만들기  (0) 2023.03.22
Drawing Plot, 투명 이미지 datauri 생성  (0) 2023.03.20
Jupyter Notebook 소스 복구  (0) 2020.06.16
Docker python venv 패키지 유지  (0) 2020.06.07
딕셔너리에서 키삭제  (0) 2019.12.07
반응형
port

windows port

로컬에서 쓸데없이 리스닝하는 포트를 찾아 프로세스 종료시키기

netstat 옵션

-a ; 모든 상태 표시.
-n ; 번호로 표시. (hostname, 서비스명 대신 다 숫자로…)
-o ; owner process ID
-r ; 라이팅 테이블

리스닝 포트 확인

netstat -an | findstr "LISTEN"

image

port 누가 쓰지?? PID를 먼저 찾는다.

netstat -ano | grep "포트번호"
netstat -ano | findstr /i "검색어"

findstr.exe 는 옵션 /i=caseinsensitive. /v=inverse.

C:\WINDOWS\system32>netstat -ano | findstr 8080
  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       1236
  TCP    [::]:8080              [::]:0                 LISTENING       1236
  UDP    0.0.0.0:8080           *:*                                    1236
  UDP    [::]:8080              *:*                                    1236

8080 포트를 1236 PID가 쓰고 있음을 알 수 있다.

PID 로 프로세스 확인

C:\>tasklist -fi "pid eq 1236"

이미지 이름      PID       세션 이름     세션#  메모리 사용
======================== ======== =============== =========== 
svchost.exe    1236       Services       0        17,080 K

tasklist.exe /fi=filter,

작업관리자에서 확인하거나 processexplorer, processhaker 등을 사용하여 상세 정보 확인.

프로세스 강제종료

  • PID로 프로세스 강제 종료
taskkill /f /pid 1236

권한이 부족해서 실패한다면 관리자 권한으로 cmd창을 실행해서 해야 한다.

  • 프로세스명으로 강제종료
taskkill /F /T /IM notepad.exe
taskkill /f /fi "imagename eq note*"

[참고] /F ; 강제 종료, /T; 하위프로세스포함. /IM; 이미지명. /FI ; 필터
이미지명과 필터는 와일드카드 (*)를 사용 가능.

Author: crazyj7@gmail.com

반응형
screen_백그라운드

리눅스 백그라운드 실행 (터미널종료에도)

터미널종료해도 백그라운드 실행유지. 요약.

  • 방법1 (nohup)
$ nohup [커맨드] &
  • 방법2 (disown)
$ 커맨드 &
$ disown 
  • 방법3 (screen)
$ screen -S [작업명] ; 작업명은 임의의 스트링...
$ [커맨드]
^A, d ; (컨트롤+A 누르고 d키를 누름) detach되면서 백그라운드로 돌아감. 
  • 로그아웃했다가 다시 로그인하여 프로세스 확인
ps -ef | grep [검색어] ; 프로세스가 잘 떠 있는지 확인

screen 백그라운드 실행

스크린 - 윈도우 개념.
스크린들을 여러 개 만들수 있고, 스크린 내부에 윈도우를 여러 개 만들 수 있다. (처음 스크린을 만들면 0번 윈도우가 자동으로 만들어짐)

스크린 만들기

screen -S [세션명]
ex)
screen -S edit
screen -S build

스크린 목록

screen -ls
여기에 Attached라고 되어 있는 것이 현재 screen.
전부 detached라고 나오면 스크린 상태가 아님.

스크린 나오기

^+A, d ; detach. 작업중인 것은 백그라운드로 계속 돌아간다.

스크린 재접속

screen -r [세션명]

스크린 내에서 윈도우 만들기

  • ^+A 누른 후에 C (create) 를 누름.

윈도우 종료는 exit

윈도우 목록. 몇 번 까지 있는지 하단에 나옴.
^+A, W ; window

윈도우 이동

^+A, a ; 바로 전
^+A, 0 ; 0번창
^+A, 1 ; 1번창.

screen 상태에서 화면 스크롤

스크린 상태에서는 쉬프트+PageUp (스크롤)이 먹히지 않는다. 화면이 깜빡이고 만다.
^+A, ESC ; vi모드로 이동 및 페이지 업 , 다운에 vi커맨드로 하면 된다. ^B, ^F
ESC를 누르면 스크롤 모드 해제.

nohup

nohup [커맨드] &
터미널 종료 후에도 계속 작업이 유지됨

&, bg, fg

백그라운드 실행을 하면, 쉘은 그대로 쓸 수 있는데, 백그라운드에서 터미널로 출력되는 메시지도 화면에 출력된다.

  • 백그라운드 실행
    ./a.sh &
    그러나 터미널 종료시 종료됨… (종료 방지를 하려면 screen이나 nohup을 사용)

  • 현재 실행중인 프로그램을 백그라운드로.

^+Z ; 일시 중단하고 shell로 빠져나옴.
jobs ; 백그라운드 조회. 번호와 커맨드가 나옴.
bg %1  ; %잡번호를 입력하여 백그라운드로 재개시킴.

기타

fg %1 ; 포그라운드로 재개됨.
kill %1 ; 잡1번 강제종료.

disown

그러나, 위 백그라운드는 터미널이 종료되면 프로세스도 종료된다.
이것을 방지하려면,

disown

disown을 하게 되면 현재 세션 job list에서 job 들이 빠져나가게 된다. (jobs 커맨드로 확인 가능. 프로세스 전체 보기로 보면 프로세스는 남아있음.)
따라서 터미널이 종료되어도 SIGHUP이 전달되지 않아서 계속 돌아가게 된다.

Author: crazyj7@gmail.com

'Develop > Linux_Unix' 카테고리의 다른 글

[도커] tomcat, mariadb 환경 war hang/slow  (0) 2021.04.28
Bash Tip 작업속도를 빠르게  (0) 2021.03.03
Git 사용법_요약  (0) 2019.12.16
Ubuntu18/tomcat8 setup  (0) 2019.11.08
VI 사용법  (0) 2015.06.02
반응형

synology nas에 mp3 파일을 FTP로 추가했는데, 인식이 안되는 경우가 있다.

인덱스 갱신이 바로 되지 않아서 그런 것 같다. (해당 폴더는 미디어 음악으로 인덱싱이 걸린 상태이다. 오디오스테이션에서 접근 가능한 폴더)

제이판에서 재인덱싱을 하면 되지만, 파일들이 많다면 처음부터 인덱싱을 다시 하는 것이라 엄청난 시간이 소요될 수 있다. (주의!) 재인덱싱 동안에는 해당 파일들을 audio station에서 접근이 안됨. 

=> 올린 파일만 인덱스에 추가해야 빠른 시간에 바로 인식이 될 수 있다.

ssh 쉘로 접속하여 synoindex 란 커맨드를 사용하면 된다.

synoindex -a "추가한 파일" 

위와 같이 인덱스에 추가하는 것이 가장 빠르다.

또는 아래와 같이 특정 폴더만 재인덱싱 한다. (파일수에 따라 시간이 좀 걸릴 수 있다. 그러나 파일명 지정할 필요가 없어서 편리함.)

synoindex -R "재인덱싱할 폴더"

예를 들면....

사용1) 커맨드로 파일을 추가하거나 아래처럼 스크립트를 만들어 현재 디렉터리의 mp3 파일들을 index에 추가할 수 있다. (가장 빠름)

synoindex -a "hello.mp3"

또는 아래 스트립트를 update.sh 파일로 만들어 실행.

#!/bin/sh
pwd=`pwd`
echo $pwd
for entry in *.mp3
do
  echo "$pwd/$entry"
  synoindex -a "$pwd/$entry"
done

사용2) 귀찮다면  현재 디렉터리만 재 인덱싱 하는게 편할 수도 있다. (단, 재인덱싱 시간은 약간 걸릴 수도 있다)

synoindex -R .

 

 

반응형
mariadb_10.4_setup

MariaDB 10.4 install / CentOS 7

CentOS 7.9에서 mariaDB 10.4 설치하다 디스크 공간 문제를 고려하여 경로 변경하는 중 계속된 실패로 삽질을 한 참 하였다.

  • 일단 전에 설치된 DB를 지우고 시작.
// 서비스 중지
$systemctl stop mariadb

[패키지 삭제]
$yum remove Maria*

// 전에 설치한 디폴트 경로
$rm -rf /var/lib/mysql

패키지 다운로드 및 기본 설치

yum으로 설치

// MariaDB yum repo 등록
$ vi /etc/yum.repos.d/MariaDB.repo

아래의 내용을 작성한다.

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
// MariaDB 설치
$ yum install MariaDB

// 설치된 버전 확인
$ rpm -qa | grep MariaDB
MariaDB-compat-10.4.17-1.el7.centos.x86_64
MariaDB-common-10.4.17-1.el7.centos.x86_64
MariaDB-server-10.4.17-1.el7.centos.x86_64
MariaDB-client-10.4.17-1.el7.centos.x86_64
또는
$ yum list installed Maria*
Installed Packages
MariaDB-client.x86_64                                10.4.17-1.el7.centos                                @mariadb
MariaDB-common.x86_64                                10.4.17-1.el7.centos                                @mariadb
MariaDB-compat.x86_64                                10.4.17-1.el7.centos                                @mariadb
MariaDB-server.x86_64                                10.4.17-1.el7.centos                                @mariadb

// 버전 확인
$ mariadb --version
mariadb  Ver 15.1 Distrib 10.4.17-MariaDB, for Linux (x86_64) using readline 5.1

기본적으로 /var/lib/mysql에 설치된다.

  • 서비스 실행 및 암호 설정
// mariadb 실행
$ systemctl start mariadb

// 패스워드 설정
$ /usr/bin/mysqladmin -u root password '패스워드'

// 포트 확인
$ netstat -anp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      102252/mysqld
  • DB 생성 및 초기화 / 사용자 생성
$ mysql -u root -p
> use mysql ;

[사용자 추가]
create user 'crazyj'@'%' identified by 'crazyj00.';
create user 'crazyj'@'localhost' identified by 'crazyj00.';
flush privileges ;

[DB생성]
create database CRAZYJ_DB ;
grant all privileges on CRAZYJ_DB.* to 'crazyj'@'%';
grant all privileges on CRAZYJ_DB.* to 'crazyj'@'localhost';
flush privileges ;


[사용자 패스워드 변경]
ALTER user 'crazyj'@'localhost' IDENTIFIED WITH mysql_native_password BY '새패스워드';
또는 아래와 같이 설정
ALTER user 'crazyj'@'localhost' IDENTIFIED BY '새패스워드';
ALTER user 'crazyj'@'%' IDENTIFIED BY '새패스워드';
flush privileges ;

여기서 기본 경로가 /var/lib/mysql 인데 추후 디스크 공간을 고려하면 다른 파티션으로 옮기고 싶어졌다.
여기서 문제가 시작됨…

데이터 경로 위치 변경

쉽게 생각하면… DB 서비스 중지하고,
/var/lib/mysql 폴더를 용량큰 파티션으로 이동하고
기존 경로를 링크를 걸어주면 끝.
이라고 생각하지만, 여러가지 원인으로 실패할 수 있다.

결론부터 말하면

  1. selinux (접근통제)도 off 해줘야 한다.
  2. mariadb 기본설정에서 /root 나 /home 경로로 이동을 막고 있다.
    설정을 바꾸면 해결됨.
  • selinux off
# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive
#
#vi /etc/selinux/config
--------------
#SELINUX=enforcing
SELINUX=disabled
------------
  • mariadb 서비스 설정 변경
$ systemctl stop mariadb
$ vi /usr/lib/systemd/system/mariadb.service
--------------------
# Prevent accessing /home, /root and /run/user
#ProtectHome=true
ProtectHome=false
------------------------
  • DB 링크 설정하고 서비스 시작.
$ mv /var/lib/mysql /home/mysql
$ ln -s /home/mysql /var/lib/mysql

$ systemctl start mariadb

끝.

참고) 아래는 시도 과정…

아예 처음부터 새로 만들자. 디폴트 경로 변경
$ vi /etc/my.cnf.d/server.cnf
아래 섹션에 추가
------------------------
[mysqld]
datadir=/home/data/mysql
socket=/home/data/mysql/mysql.sock
-----------------

$ vi /etc/my.cnf.d/mysql-clients.cnf
아래를 추가 (client 섹션이 없어서 추가)
-----------------
[client]
socket=/home/data/mysql/mysql.sock
----------------

$ cd /bin
$ mariadb-install-db --user=mysql
위 설정파일에서 지정된 경로에서 초기화됨!!!! 
(--user 옵션을 생략하면 root 계정으로 생성됨)

위와 같이 하면 되야 되는데… 서비스 실행시 그래도 에러발생???

  • centOS7의 selinux 기본 정책으로 실패???

  • selinux 관련 설정 변경

$ yum install policycoreutils-python
  
$ ls -lZ /var/lib/mysql
$ cp -rf /var/lib/mysql /home/data/mysql
$ chown -R mysql:mysql /home/data/mysql
$ ls -lZ /home/data/mysql

$ vi my.cnf
datadir=/home/data/mysql

$ semanage fcontext -a -t mysqld_db_t "/home/data/mysql(/.*)?"

$ grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local

$ restorecon -R -v /home/data/mysql

$ ls -lZ /home/data/mysql
-----------------------------------
위와 같이 했는데도 결국 안되서 selinux 옵션을 끄기로...

# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive
#
#vi /etc/selinux/config
--------------
#SELINUX=enforcing
SELINUX=disabled
------------

위와 같이 해도 selinux를 off했음에도 실패했음.

원인은… 기본적으로 centos에서 mariadb는 /home, /root 경로를 사용할 수 없다나…
아니, 이런 설정도 있었나??? 헐… 삽질만…

데이터 폴더 이동 방법 찾던 중 발견.

$ systemctl stop mysql
$ mkdir -p /home/data/mysql

$ cp -rf /var/lib/mysql /home/data/mysql
$ chown -R mysql:mysql /home/data/mysql
(나중에 정상작동 확인후, 기존data인 /var/lib/mysql은 삭제)

==================> 이 문제였음. <===================
$ vi /usr/lib/systemd/system/mariadb.service
# Prevent accessing /home, /root and /run/user
#ProtectHome=true
ProtectHome=false
==================> 이 문제였음. <===================

서비스 시작
$ systemctl start mysql

Author: crazyj7@gmail.com

반응형
자모병합

자모병합 / 한타영타 변환기

필요해서 만들어봤습니다. 필요하시면 사용하세요. ^^
맥사용자가 한글이 포함된 파일명의 파일을 보내면 파일명에 들어간 한글의 자모분리 현상이 발생합니다!!! ( 한 -> ㅎ ㅏ ㄴ )
(맥와 윈도우의 한글호환이 안 되는 문제로 어쩔 수 없음.)
깨진 한글 파일명을 복원할 방법이 없을까??? 해서… 만들었습니다.

본 프로그램은 자모분리된 파일명을 복원(병합)해주는 기능을 함. (윈도우나 맥에서 분리된 한글 지원)

  1. 탐색기에서 파일명이 깨진 파일을 드래그하여 가장 위에 에디트 창에 넣는다. (직접 스트링을 입력해도 됨.)

  2. File Rename 버튼을 누르면 복원된 이름으로 이름 변경됨.

부가 기능으로 화면 아래에 한글의 한타와 영타를 전환해주는 기능도 있음. 이건 한글이 안나오는 사람들을 위해…

image

직접 만든 바이너리 해시값도 첨부합니다. (무결성 확인용)
아래 해시값이 원본입니다.

다운로드 경로
https://www.mediafire.com/file/maydhuaqacpdg63/hantaui_Release.zip/file

c:\>certutil -hashfile hantaui_Release.zip
SHA1 해시(hantaui_Release.zip 파일):
7d 3d df bb bd 3c 53 ad 00 f8 2e a0 79 47 c4 cd 87 50 11 4b
CertUtil: -hashfile 명령이 성공적으로 완료되었습니다.

c:\>certutil -hashfile hantaui.exe
SHA1 해시(hantaui.exe 파일):
27 e2 b2 ea e3 66 44 5e 2e bb d1 3f af 1f 34 e5 07 15 e6 32
CertUtil: -hashfile 명령이 성공적으로 완료되었습니다.

참고: 윈도우에서 간단하게 파일 해시값 확인

certutil -hashfile 검사할파일명

기본적으로 SHA1 해시값을 출력한다.
다른 해시 알고리즘을 사용하려면 뒤에 알고리즘명을 추가한다.
예를 들면 MD5, SHA1, SHA256 등을 쓴다.

certutil -hashfile 검사할파일명 SHA256

Author: crazyj7@gmail.com

반응형
cal04

chain and product rule

sum rule

ddx(sin(x)+x2)=cos(x)+2xddx(g(x)+h(x))=ddxg(x)+ddxh(x) \frac d {dx} (sin(x)+x^2) = cos(x)+2x \\ \frac d {dx} ( g(x)+h(x) ) = \frac d {dx} g(x) + \frac d {dx} h(x) \\

  • 미분을 생각해 보면 함수의 합에서의 미분은 dx에 대해 df를 보면 된다.
  • f=g+h 라고 할 때, g 그래프 , h 그래프를 그렸을 때 dx는 일정한데, df는 dg+dh와 같기 때문에 두 함수 g, h의 미분의 합과 같게 된다.

product rule

f(x)=sin(x)x2 f(x) = sin(x) x^2
f(x)를 직사각형의 넓이라고 생각할 수 있다. 가로를 sin(x), 높이를 x^2.

  • 여기서 dx를 생각해 보자.
  • 늘어나는 넓이가 df
    df=sin(x)d(x2)+x2d(sin(x))+d(x2)d(sin(x)) df = sin(x) d(x^2) + x^2 d(sin(x))+d(x^2)d(sin(x))\\
  • 위 df에서 마지막항은 무시할 수 있다. (dx^2 꼴)
    f=ghdf=gdh+hdgddxf=gddxh+hddxgf=gh+hg f=gh \\ df = g dh + h dg\\ \frac d {dx} f = g\frac d {dx} h+h\frac d {dx} g \\ f' = g h' + h g'

function composition

g(x)=sin(x)h(x)=x2f(x)=g(h(x)) g(x) = sin(x) \\ h(x) = x^2 \\ f(x) = g(h(x))
위 에서 dx의 변화가 생긴다면, dh는 2xdx가 된다.
dh의 변화는 g입장에서 보면 dg = d sin(h)이며 cos(h) dh인 것이다.
dh를 다시 확장하면,
dg = cos(h) 2x dx
즉,
df = cos(x^2) 2x dx 가 된다.

  • Chain Rule
    ddxg(h(x))=dgdh(h(x))dhdx(x)ddxg(h(x))=dgdhdhdx \frac d {dx} g(h(x)) = \frac {dg}{dh}(h(x)) \frac {dh}{dx}(x) \\ \frac d {dx} g(h(x)) = \frac {dg}{dh} \frac {dh}{dx}

Author: crazyj7@gmail.com

지수의 도함수

M(t) = 2t2^t
매 초마다 2배씩 인구가 증가하는 함수는 위와 같다.
위 함수의 도함수를 보면, 1초 증가시 증가량이 2^t가 된다.
dM/dt=2t+12t1=2t dM/dt = \frac {2^{t+1}-2^t}{1}=2^t

  • 위 함수가 도함수 인가??? 저것은 dt가 1인 경우일 뿐.

  • dt \rightarrow 0 일때를 알아야 한다.
    dM/dt=2t+dt2tdt=2t2dt1dt dM/dt = \frac {2^{t+dt}-2^t}{dt}=2^t \frac {2^{dt}-1}{dt}
    위 형태에서 지수는 e 꼴로 변형할 수 있다.
    ab=elnab=eblna2h=ehln2dM/dt=2tehln21h=2t(1+h)ln21h=2tln2h+O(h2)h=2tln2 a^b = e^{ln a^b} = e^{b ln a} \\ 2^h = e^{hln2} \\ dM/dt =2^t\frac { e^{hln2} -1 } {h} \\ =2^t \frac { (1+h)^{ln2} -1 } {h} \\ =2^t \frac { ln2 *h+O(h^2) }{h} \\ =2^t ln2

  • 어쨋건 지수함수의 미분값은 자신(M)과 일정한 비례상수에 의해 비례한다.

  • 그리고 궁금한 것은 이 비례상수가 1인 경우에 해당되는 지수함수의 값은 무엇일까? “e”

  • 즉, 미분해서 자기자신이 되는 지수 함수는 e^x

    • eh1h=1\frac {e^h-1}{h}=1 이것이 e의 정의다.
      eh1h=1eh=h+1e=(1+h)1hh0 \frac {e^h-1}{h}=1\\ e^h= h+1 \\ e = (1+h)^\frac{1}{h}\\ h \rightarrow 0
    • 지수함수는 다 e꼴로 나타낼 수 있다.
      ax=exlna a^x = e^{x ln a}
  • 왜 e의 지수함수형태로 나타내는 것이 더 자연스러운가?

  • 자연계 현상에서는 규모가 변화율에 비례하고, 비례상수로써 일반화할 수 있다.

Author: crazyj7@gmail.com

implicit differentiation

음함수 미분.

  • ex
    x2+y2=522xdx+2ydy=0xdx=ydydydx=xy x^2+y^2=5^2 \\ 2xdx+2ydy = 0\\ xdx=-ydy\\ \frac {dy}{dx} = -\frac x y

x(t)2+y(t)2=52t2x(t)dxdt+2y(t)dydt=0xdxdt=ydydtdydx=xy x(t)^2+y(t)^2=5^2 \\ t에 대해 미분\\ 2x(t)\frac {dx}{dt}+2y(t)\frac {dy}{dt} = 0\\ x\frac {dx}{dt}=-y \frac {dy}{dt}\\ \frac {dy}{dx} = -\frac x y

  • ex
    sin(x)y2=xsin(x)2ydy+y2cos(x)dx=dxfinddydx sin(x)y^2=x \\ sin(x)2ydy+y^2cos(x)dx = dx \\ find \frac {dy}{dx}

  • ex
    y=ln(x)dydx=ddxln(x)x=eydx=eydydydx=ey=1ey=1x y=ln(x) \\ \frac {dy}{dx} = \frac {d}{dx}ln(x)\\ 원 함수를 다음과 같이 변경\\ x = e^y \\ dx = e^y dy \\ \frac {dy}{dx} = e^{-y} = \frac 1 {e^y} = \frac 1 x

Formal derivative definition

dfdx(2)=limh0f(2+h)f(2)h \frac {df}{dx}(2) = lim_{h \to 0} \frac {f(2+h)-f(2)}{h}

  • 여기서 h는 dx로 무한히 작다를 의미하는 것은 아니다?

앱실론/델타

입력범위크기의 조절로 출력범위의 크기를 원하는 만큼 작게 만들 수 있다.
출력값에서 떨어진 거리 엡실론.
입력값에서 떨어진 거리 델타.
엡실론을 아무리 줄여도 델타는 존재한다!!!

로피탈

L’Hopital’s rule

limxaf(x)g(x)=ddxf(a)ddxg(a) lim_{x \to a} \frac {f(x)}{g(x)}\\ =\frac {\frac d {dx} f(a) } {\frac d {dx} g(a)}

limx0sinπxx21=ddxsinπxddxx21 lim_{x \to 0} \frac {sin \pi x}{ x^2-1}\\ =\frac {\frac d {dx} sin \pi x } {\frac d {dx} x^2-1 }

Author: crazyj7@gmail.com

'Math' 카테고리의 다른 글

미적분학의 본질 #1  (1) 2020.08.27
Derivative100 [91-100]  (0) 2019.12.12
Derivative100 [81-90]  (0) 2019.12.12
derivative100 [71-80]  (0) 2019.11.27
derivative100 [61-70]  (0) 2019.11.19
반응형
cal01

미적분학의 본질

원의 넓이

동심원으로 일정한 두께로 잘라낸다.
하나의 동심원을 펴면 직사각형에 가깝고 넓이는 두께를 dr, 길이는 2π\pir

Area 2πrdr 하나의 링 Area \approx\ 2\pi r dr
좌표축에 x축을 r로 보고, 0부터 3까지의 범위로 각 r에 해당할때 링의 길이를 세로축 y로 놓으면 직선 y=2π\pir 이 그려진다.
각 링을 해당 r 위치에 직사각형으로 놓으면 넓이는 dr. dr이 0에 가까울수록 (잘게 썰수록) 삼각형의 넓이가 된다.
즉, 면적은 이 그래프의 삼각형의 넓이가 되므로,
πr2\pi r^2이 된다.

  • 원의 넓이, 자동차가 움직인 거리. y=x2y=x^2그래프 아래의 넓이 등 복잡한 문제를 작게 쪼개서 합으로 풀 수 있다.
  • x의 변화를 dx (아주 작은 크기)로 보고, 그 때의 넓이 변화를 dA라고 하자.
  • dA를 x 도메인 범위로 확장을하여 합치면 A 전체 넓이가 된다.

y=x2xxdxdxdAdAdxx2ifdx=0.001,atx=3A(3.001)A(3)0.00132,dx. y=x^2 그래프 아래의 넓이 \\ x축 x의 작은 변화 dx에 대해\\ dx에 해당되는 넓이를 dA\\ \frac {dA}{dx} \approx x^2 \\ if \quad dx=0.001, at \quad x=3 \\ \frac {A(3.001)-A(3)}{0.001} \approx 3^2 \\ 즉, dx가 작을 수록 근사값이 실제값에 가까워진다.



f(x)A(x)=Integraloff(x)dA=dx.f(x).dx.dAf(x)dxdAdxf(x)dx0. f(x)그래프의 밑넓이 A(x) \\ = Integral \quad of \quad f(x) \\ dA = dx변화에서 넓이 변화. 높이는 f(x). 가로는 dx. \\ dA \approx f(x) dx \\ \frac {dA}{dx} \approx f(x) \\ dx \rightarrow 0 점점 더 정확해짐.

  • 위에서 f(x), dAdx\frac {dA}{dx}가 A의 도함수이다.
  • dx가 0에 가까울 수록 어떤 비율이 된다는 의미. 접선의 기울기. 변화율.

도함수의 모순

흔히 도함수를 순간변화율이라고 하는데, 순간은 시간이 없기 때문에 변화가 없다. 따라서 이 말은 모순이다 .

s(t)를 자동차가 t시각에 위치한 지점.(이동 위치)라고 하고, x축을 t로 y축을 s로 한다.
v(t)는 자동차의 t시각에 속력을 나타냄.
여기서 v(t)는?? t에서의 속력.
v(t)=dsdtdsdt(t)=s(t+dt)s(t)dt v(t) = \frac {ds}{dt}\\ \frac {ds}{dt}(t) = \frac {s(t+dt)-s(t)}{dt}

  • 문제는 속력을 재려면 두 시점이 필요하다. 정지된 사진 한 장으로는 속력을 잴 수 없다!!!
  • dt를 아주 작은 구간으로 본다.
  • t에서의 미분은 두 시점의 기울기가 아니라 특정한 점의 접선의 기울기 이다.
  • dt는 무한히 작다는 것도 아니고, 0이라는 것도 아니다!!!
  • 순간 변화율은 잘못된 표현이고, 한 점 근처의 변화율을 나타내는 최적의 상수 근사값이라고 생각할 수 있다.
  • dt는 t에서 실질적 크기를 갖는 매우 작은 변화를 의미한다.

예제

s(t)=t3dsdt(t)=s(t+dt)s(t)dt=(t+dt)3t3dt=t3+3t2dt+O(dt2)t3dt=3t2+O(dt)=3t2 s(t) = t^3 \\ \frac {ds}{dt}(t) = \frac {s(t+dt)-s(t)}{dt}\\ =\frac {(t+dt)^3-t^3}{dt}\\ =\frac {t^3+3t^2dt+O(dt^2)-t^3} {dt}\\ =3t^2+O(dt)=3t^2

기하를 통해 본 미분 공식

f(x)=x^2
한 변 길이가 x인 정사각형의 넓이로 볼 수 있다.
여기서 변의 길이를 dx 만큼 증가시키면…
df (증가량) = 2x dx + (dx)^2 이 된다.
df/dx = 2x+O(dx)
dx는 0가 가까우므로 의미있는 값은 2x가 된다.

  • dx에 대해서 df를 관측할 경우는 의미있는 부분은 dx까지이고 (dx)^2부터는 무시할 수 있다. (0에 수렴하여 의미없는 값이 된다.)

  • 아래 df에서 dx^2를 봐라.
    f(x)=xn.df(x)dx=(x+dx)nxndx(x+dx)n=xn+nxn1dx+O(dx2)O(dx2)!df(x)dx=xn+nxn1dxxndx=nxn1.df(x)dx=xn+nxn1dx+O(dx2)xndx=nxn1+O(dx)(dx0)df(x)dx=nxn1 f(x)=x^n의 미분. \\ \frac {df(x)}{dx}=\frac {(x+dx)^n-x^n}{dx}\\ (x+dx)^n=x^n+nx^{n-1}dx+O(dx^2) \\ O(dx^2)는 무시할 수 있다!\\ \frac {df(x)}{dx}=\frac {x^n+nx^{n-1}dx-x^n}{dx}= nx^{n-1} \\ \quad \\ 왜 무시해도 되냐면 아래와 같다. \\ \frac {df(x)}{dx}=\frac {x^n+nx^{n-1}dx+O(dx^2)-x^n}{dx}=nx^{n-1}+O(dx) \\ (dx \rightarrow 0) \\ \frac {df(x)}{dx}=nx^{n-1}

  • f(x)=1xf(x)=\frac 1 x 에서 미분을 해 보자. 기하학적으로 보면, 넓이가 1인 직사각형을 생각하면 된다. 가로 길이를 x, 높이는 1/x가 된다.

    • 이 때 dx에 대해 df를 보면 된다. x가 dx 증가할 때, 가로 길이는 dx가 증가하지만 세로 길이는 d(1/x)만큼 감소한다. 그 양쪽 증감 넓이는 동일해야 한다.
      Area(+)=(1x)dxArea()=xd(1x)(1x)dx=x(1x1x+dx)dxx=1xx+dx=dxx+dx1x=1x+dx,dx0.. Area(+) = (\frac 1 x) dx \\ Area(-) = x d(\frac 1 x) \\ (\frac 1 x)dx = x ( \frac 1 x - \frac1{x+dx})\\ \frac {dx} x = 1 - \frac x {x+dx} = \frac {dx} {x+dx} \\ \frac 1 x = \frac 1 {x+dx} \\ 즉, dx가 0으로 수렴. 위 식은 맞다.
    • df/dx
      dfdx=f(x+dx)f(x)dx=1x+dx1xdx=dxx(x+dx)dx=1x2+xdx=1x2 \frac {df}{dx} = \frac {f(x+dx)-f(x)}{dx} = \frac{ \frac 1 {x+dx} - \frac 1 x } {dx}\\ = \frac{ \frac{-dx}{x(x+dx)} }{dx} = -\frac {1}{x^2+xdx} \\ = - \frac 1 {x^2}

Author: crazyj7@gmail.com

'Math' 카테고리의 다른 글

미적분학의 본질 #2  (0) 2020.08.27
Derivative100 [91-100]  (0) 2019.12.12
Derivative100 [81-90]  (0) 2019.12.12
derivative100 [71-80]  (0) 2019.11.27
derivative100 [61-70]  (0) 2019.11.19
반응형
jupyter_notebook_recover

jupyter notebook source recover

python 노트북 소스파일 복구

jupyter notebook 작업시 주의사항!!!
동일한 소스 코드 창을 여러 개 띄운 경우.
잘못하여 구 버전 창을 보고 저장을 했다면??? OverWrite!!!

신 버전 소스가 날아가는 경험을 하게 된다!!!
이제까지 작업한 것을 날리게 되는 것이다.
실수라고 생각할땐 이미 늦었다… 한숨이 나온다…

혹시나 하여 백업한게 없을까 찾아본다.

방금 작업한 디렉터리에 보니,

.ipynb_checkpoints 폴더가 있다. 
들어가서 동일한 소스코드명을 찾아보았다.
같은 이름의 파일이 있었다.
일단, 복사하여 사본을 만들어 놓고, 열어보았다.

오호… 럭키~~~
다행히도 수동 저장(덮어쓰기) 전에 자동 세이브된 파일이 남아 있었다.
알아두면 긴급시 이렇게 복구할 수 도 있습니다.
^^;

Author: crazyj7@gmail.com

'Python' 카테고리의 다른 글

Drawing Plot, 투명 이미지 datauri 생성  (0) 2023.03.20
set에 set 추가? frozenset  (0) 2021.02.24
Docker python venv 패키지 유지  (0) 2020.06.07
딕셔너리에서 키삭제  (0) 2019.12.07
파이썬 충돌해결 module conflict  (0) 2019.12.01

+ Recent posts