cf) (x4−x2+1)(x4+x2+1)=x8−x6+x4+x6−x4+x2+x4−x2+1=x8+x4+1
부분 분수로 나눠보자. x4−x2+1x2+1=x2+ax+1c+x2+bx+1d(미지수를구한다)=x2+3x+121+x2−3x+121
따라서 적분을 취하면. ∫x4−x2+1x2+1dx=21∫x2+3x+11dx+21∫x2−3x+11dx=21∫(x+23)2+411dx+21∫(x−23)2+411dx
먼저 왼쪽 부분을 계산해 보자. 제곱의 형태를 삼각치환해 보자. (1+tan^x 꼴로 만든다.) 21tanθ=x+23 dx=21sec2θdθ
We know ∫1+x21dx=tan−1x+C. 21∫(x+23)2+411dx=21∫41tan2θ+411dx=21∫41sec2θ121sec2θdθ=θ+C=tan−1(2x+3)+C
오른쪽 부분도 같은 방식으로 계산하면 된다. 21∫(x−23)2+411dx=tan−1(2x−3)+C ∴∫x4−x2+1x2+1dx=tan−1(2x+3)+tan−1(2x−3)+C
∫csc3xsecxdx=∫sin3xcosx1dx=∫sin3xcosxcos2x+sin2xdx=∫sinxcosxcot2x+1dx=∫sinxcosxcot2xdx+∫sinxcosx1dx=∫sinxcosx1dx+∫sin2xsinxcosxcos2xdx
(이하는 아래 계산 과정과 동일)
Q∫ex+3exex−1dxu=ex−1,du=21ex−11exdx=∫u2+4u2ex−1du=2∫u2+4u2du=2∫u2+4u2+4−4du=2∫1−u2+44du=2[u−4∫u2+221du]+C=2[u−421arctan2u]+C=2u−4arctan2u+C=2ex−1−4arctan2ex−1+C
Again… Q∫ex+3exex−1dx(u=ex−1,du=exdx)=∫u+4udu(t=u,dt=2u1du,du=2udt)=2∫t2+4t2dt=2∫1+t241dt=2∫1+(t2)21dt(s=t2,t=s2,ds=−t22dt)=2∫1+s21(−2t2)ds=−∫1+s2t2ds=−∫1+s2s24ds=−4∫s2(1+s2)1ds=−4∫s21−1+s21ds=−4∫s21ds+4∫1+s21ds=−4(−1)s1+4arctans+C=t24+4arctant2+C=2t+4arctant2+C=2u+4arctanu2+C=2ex−1+4arctanex−12+CFailWhere is Incorrect?
Where is incorrect?? … No. It’s all right. arctanx1=2π−arctanx,(x>0)
So, Integration constant is ignored.
윈도우 커맨드에서 실행하는 DOS 스크립트 작성 방법. 쉽지만 막상 필요한 것을 하고 싶을 때 쉽지만은 않다. 자료가 많이 부족하다.
주석
주석 명령은 설명문으로 실행되지 않는다.
rem 으로 실행하고 뒤에 주석문(아무 스트링)을 입력하면 된다. 주석은 프로그래밍시에 간략한 설명을 위한 것이다.
@rem test message… : 앞에 @를 붙이면 배치파일 실행시 rem 커맨드 출력이 안되도록 한다. 물론 그 전에 @echo off을 해 두었다면 @을 붙일 필요없다.
더 간단하게는 :: 으로 시작하면 주석이 된다. 이것은 커맨드 출력도 되지 않아 더 간편히 사용할 수 있다. rem과 다르게 아예 없는 것으로 취급된다.
변수와 출력
dos batch는 파일 확장자를 .bat 또는 .cmd로 하여 메모장으로 텍스트 파일로 작성하면 된다.
기본 적인 출력은 “echo” 커맨드가 있다. 뒤에 출력할 내용을 적으면 된다.
출력 내용에 변수명을 적어 변수값을 출력할 수 도 있다. 또한 변수중에는 미리 시스템에서 정의된 값들도 있어서 유용하다.
변수 설정은 set으로 변수이름과 값을 =으로 할당한다.
변수 사용시에는 변수 이름 앞뒤로 %를 붙인다. 변수 삭제는 빈 값을 할당한다. (빈 값이 있는 변수로 만드는 것이 아니라 변수 자체를 삭제한다는 의미!)
SET FOO=hello world
echo %FOO%
echo %FOO%xxx%FOO%
SET FOO=
for문의 변수 이름은 커맨드창에서 바로 실행할 때 영문자앞에 %를 붙인다. 그러나, Dos batch file(.bat)에서 for문의 변수 영문자 앞에 %% 이렇게 %를 두 개 붙인다!
c:\> copy con test1.bat
@echo off
@rem this is a test batch...
set aaa=hello
echo %aaa%
echo %1
^Z
c:\> test1 kim
hello
kim
@echo off는 이후에 echo 실행명령은 출력하지 않고, 결과만 출력하도록 한다.
batch 파일 실행시 뒤에 파라미터를 줄 수 있는데, 순서대로 %1, %2, … 이렇게 변수로 사용할 수 있다.
줄바꿈. 엔터 입력. 빈 줄 출력
echo.
공백으로 시작하는 문자열 출력
echo. aaa
echo aaa (이것도 이제는 가능함. 앞에 공백 두 개)
특수 문자 출력시 앞에 ^를 사용
echo ^< 이것은 꺾은 괄호 ^>
echo ^| 파이프
echo ^^ 두 개 입력시 하나 출력
스트링 처리
문자열 추출 mid / substr
FOO 변수의 값에서 인덱스 6부터 3글자를 추출. (인덱스는 0부터 시작) 뒤에 수를 생략하면 끝까지를 의미함. -1은 마지막 바로 한글자를 의미.
set BAR=%FOO:~6,3%
set BAR=%FOO:~5%
set BAR=%FOO:~-3% : FOO가 파일명일떄 마지막 세글자(확장자명)을 가져온다.
연산
수 값을 할당하거나 연산하려면 SET /a를 사용한다.
set /a num=4*8+8/2+122
set /a num=1
set /a num+=2
if %num% GEQ 3 echo big
환경 변수
%CD% : 현재 작업 디렉터리
%DATE% : date 커맨드와 같은 포맷의 날짜
%TIME%
%RANDOM% : 0~32767 범위의 수
%ERRORLEVEL%
%CMDCMDLINE%
파라미터
파라미터는 %1, %2, 등으로 받는다. (%0은 배치파일 이름 자체임. %9까지 가능)
%*은 모든 파라미터를 의미함.
파리미터 내부에 공백이 있으면 커맨드상에서 파라미터를 "로 둘러싼다. 단, 스크립트에서 "를 제거하고 받으려면 %~1, %~2 로 받는다.
파라미터가 없으면 종료
if “%1” == “” goto :eof
파라미터에 "를 추가해 주어야 한다.’
Redirect
stderr까지 파일로 기록
cmd /c “test.exe” > “output.txt” 2>&1
실행만 하고 출력은 없앰 (no output)
dir > nul
nul 이라는 파일은 생성되지 않는다. (NUL 대소문자 상관없음. 주의! L이 한 개임.)
for /L %%n in (1,1,100) do net user %%n /add
1부터 100까지 증가하고, 숫자로 계정명으로 사용자를 추가한다.
(for의 변수는 커맨드로 실행시에는 %하나 batch file인 경우는 %% 두개를 사용한다.)
1부터 5까지 출력
for /L %n in (1,1,5) do echo %n
1부터 5까지 출력. 2씩 건너뜀.
for /L %n in (1,2,5) do echo %n
1,3,5 각각 한 줄로 출력됨.
goto
종료시
goto :eof 또는 goto:eof
eof 레이블은 만들필요없이 미리정의된 거라 그대로 사용 가능
또는 exit /b 0
레이블 지정과 goto
레이블 지정시에는 앞에 :을 붙이고 goto 시에는 :를 빼야 한다.
:loop
echo infinite…
goto loop
Sleep
@rem 3sec sleep
@ping 1.2.3.4 -n 1 -w 3000 > NUL
IF
조건 판단
같은지 확인 == 앞 뒤에 공백은 없어도 됨.
if %var% == 1 goto done
echo a
:done
echo b
if else : 괄호, 공백 주의
if %var% == 0 (
echo a
) else (
echo b
)
/i 옵션 : 대소문자 구분 없이 비교. (case-insensitive)
사용자 입력/텍스트파일변수
yn 선택지 (or 스트링 입력)
set /p result=message (Y/N)?
echo %result%
빈 값을 검사하려면 아래 코드를 참고
@echo off
:: init var for empty string.
set "result="
set /p result=are you ok(y/n)?
if "%result%" == "" (
echo no input
goto :eof
)
if /i "%result%"=="y" goto YES
if /i "%result%"=="n" goto NO
echo your input is %result%
텍스트 파일을 첫 행을 읽어 변수에 할당
set /p var=<%temp%\filename.txt
> copy con lines.txt
hello1
hello2
hello3
^Z
> set /p var=<lines.txt
> echo %var% %var%
hello1 hello1
디렉터리
중간 디렉터리까지 모두 생성. mkdir 대신 md를 사용
md “a\b\c”
하위 파일/디렉터리 모두 삭제. /s 옵션
rmdir /s “dirname”
기타
종료 : exit
exit /b 0 : /b는 cmd창은 남겨둔다는 의미. 뒤의 숫자는 프로그램 종료 리턴값. (다른 배치에서는 이 값을 errorlevel 변수로 받아 사용할 수 있다.)
파일 병합 / 붙이기 concate
파일 세 개를 붙여서 하나의 파일로 만든다.
copy 1.txt + 2.txt + 3.txt out.new /b
배치 파일에서 다른 배치 파일 실행하기
call b.bat : call을 사용한다. 그냥 b.bat로 실행하면? b.bat가 종료시 나머지 스크립트로 돌아오지 않고 종료된다.