반응형

전체 글 209

최대값 찾기 알고리즘 (Finding Maximum)

최대값 찾는 방법은 1. 정렬을 하거나 2. 하나하나 값을 비교해서 하면 되지만, 이번 알고리즘에는 제한이 있다. 알고리즘의 시간복잡도를 O(n)이 되도록 해야한다. 시간복잡도가 O(n)이 되기 위해선, 반복문이 이중으로 존재하면 안된다. 그러므로 다음과 같이 작성한다. price_tag = [10300,9600,9800,8200,7800,8300,9500,9800,10200,9500] def max_profit(prices): n = len(prices) maxprofit = 0 minprice = prices[0] for x in range(1,n): profit = prices[x] - minprice if profit > maxprofit: maxprofit = profit if prices[x]..

공업수학 요점정리 #10 - Series Solution, Frobenius Solution Example(급수해, 프로베니우스 방법의 예제)

수식이 깨져서 보일 경우 PC 버전으로 봐주시길 바랍니다. 자세한 증명은 전공서나 강의를 참고하시길 바랍니다. 이어서 Frobenius Solution의 예제를 보도록 하자. case1 예제) $x^2y''+x(1/2+2x)y'+x(x-1/2)y=0$을 $x_0=0$에 대하여 풀라 풀이) $y= \sum_{n=0}^\infty c_n(x)^{n+r}$ $y'= \sum_{n=0}^\infty (n+r)c_n(x)^{n+r-1}$ $y''= \sum_{n=0}^\infty (n+r)(n+r-1)c_n(x)^{n+r-2}$ 을 대입한다. 그 결과, $\sum_{n=1}^\infty[(n+r)(n+r-1)c_n+(n+r)c_n/2$ $+2(n+r-1)c_{n-1}+c_{n-1}-c_n/2]$ $+[r(r-1)..

공업수학 요점정리 #9 - Series Solution, Frobenius Solution(급수해, 프로베니우스 방법)

수식이 깨져서 보일 경우 PC 버전으로 봐주시길 바랍니다. 자세한 증명은 전공서나 강의를 참고하시길 바랍니다. Power Series Solution이 있는데 굳이 Frobenius Solution을 사용하는 이유는 무엇일까? Power Series Solution은 이용하는 데에 있어서 analytic하지 못하는 구간에 대해서 사용할 수가 없다. 이러한 지점을 singular point라고 하는데, Frobenius solution을 이용해서 singular point에서의 미분방정식의 급수해를 구한다. 단, 이 singular point가 regular해야한다. $P(x)y''+Q(x)y'+R(x)y=F(x)$에 대해서, $P(x_0)=0$인 $x_0$을 singular point라고 한다. 이런 $..

공업수학 요점정리 #8 - 급수해 (Series Solution)

수식이 깨져서 보일 경우 PC 버전으로 봐주시길 바랍니다. 자세한 증명은 전공서나 강의를 참고하시길 바랍니다.solution의 결과가 보기에 편안한 형태가 아닌 경우(즉, closed form이 아닌 경우)에 대해서 solution을 구할 때 사용한다. closed form의 예시) $y'+2y=1, y(0)=3$를 풀면, $sY-y(0)+2Y=1/s$이고,이를 정리하면 $y(x)=1/2+5e^{-2x}/2$ closed form이 안되는 예시) $y''+e^xy=x^2, y(0)=4$를 풀면, $y(x)=e^{-e^x} \int\limits_{0}^{x} \xi^2e^{e^\xi} d\xi +4e^{-e^x}...$ 이런 깔끔하지 못한, 일반적인 풀이가 안되는 경우(단순히 시험 대비를 한다는 관점에서는..

공업수학 요점정리 #7 - 라플라스 변환, 합성곱, 디랙 델타 함수, 다항 계수(Laplace Transform, Convolution, Dirac Delta Function, Polynomial Coefficient)

수식이 깨져서 보일 경우 PC 버전으로 봐주시길 바랍니다. 자세한 증명은 전공서나 강의를 참고하시길 바랍니다. - convolution의 정의 $t \geq 0$에서 정의된 $f(t), g(t)$이 있다. 이때, 아래의 식이 수렴하면, 이를 $f$와 $g$의 convolution이라 한다. $$(f*g)(t) = \int_{0}^{t}f(t-\tau)g(\tau), d\tau$$ - convolution의 성질 1. $f*g = g*f$ : 교환법칙 2. $\mathcal{L}[f*g](s) = F(s)G(s)$ 3. $\mathcal{L^{-1}}[FG] = f*g$ 이 3번이 중요하다. 3번을 이용해서 Inverse Laplace Transform을 각 함수별로 분할해서 수행할 수 있다. 예제) $\..

공업수학 요점정리 #6 - 라플라스 변환, 이동정리(Laplace Transform, Shifting Theorem)

수식이 깨져서 보일 경우 PC 버전으로 봐주시길 바랍니다. 자세한 증명은 전공서나 강의를 참고하시길 바랍니다. Shifting Theorem(s-shifting) $$\mathcal{L}[e^{at}f(t)](s) = F(s-a)$$ $$\mathcal{L^{-1}}[F(s-a)](t) = e^{at}f(t)$$ 증명은 아래와 같다. $\mathcal{L}[e^{at}f(t)](s)$ $=\int_{0}^{\infty}e^{-st}e^{at}f(t)dt=\int_{0}^{\infty}e^{-(s-a)t}f(t)dt$ $=F(s-a)$ Heaviside Function의 정의 $H(t) = 0 (t

공업수학 요점정리 #5 - 라플라스 변환(Laplace Transform)

수식이 깨져서 보일 경우 PC 버전으로 봐주시길 바랍니다. 자세한 증명은 전공서나 강의를 참고하시길 바랍니다. 앞서 본 2계 상미분 방정식을 푸는 정형화된 방법 외에, Initial Value Problem에 있어서 강력한 방법 하나를 소개하고자 한다. 앞서 소개된 2계 상미분 방정식의 homogeneous case는 계수가 상수일때만 풀이가 가능했다. 라플라스 변환을 이용하면 계수가 상수가 아닌 경우에 대해서도 풀이가 가능하다. 라플라스 변환을 이용해 문제를 풀수 있는 경우는 Initial Value Problem에 한정한다. 함수 f를 라플라스 변환하면 다음과 같이 표현된다. $$\mathcal{L}[f](s)=\int_{0}^{\infty} e^{-st}f(t)\,dt$$ $\mathcal{L}[f..

큐와 스택 (Queue and Stack)

1. 큐와 스택 큐 : First In First Out. 먼저 들어간 데이터가 가장 먼저 나간다. 자료투입을 enqueue, 자료 출력을 dequeue라고 한다. 스택 : Last In First Out. 마지막에 들어간 자료가 가장 먼저 나간다. 자료투입을 push, 자료출력을 pop이라고 한다. 2. 큐와 스택을 이용한 간단한 알고리즘 파이썬에서는 리스트 메서드(append, pop)를 이용해 간단히 큐와 스택을 표현할 수 있다. 큐와 스택을 이용하여 회문(바로 읽어도 거꾸로 읽어도 같은 문장)을 찾는 알고리즘을 작성하고자 한다. 큐와 스택은 출력 순서가 서로 반대이다. 즉 큐에서나 스택에서는 읽는 데이터가 순서가 같다면 그 문장은 회문일 것이다. def Palindrome(lst): #큐와 스택 ..

파이썬의 모든 변수는 지역변수이다.

1. 파이썬의 변수의 특성? C언어에서 변수를 선언하면 그 위치에 따라 지역변수인지 전역변수인지 나뉜다. C언어를 먼저 익힌 필자로선 다른 언어도 마찬가지인 줄 알았다. 하지만 파이썬은 달랐다. 파이썬의 모든 변수는 지역변수였다. 예시를 보자. a = ["tom", "jerry", "mike"] jjak = [] n = 0 def findjjak(lst): for i in range(0,len(lst)-1): for j in range(i+1, len(lst)): n = n + 1 jjak.append(a[i] + '-' + a[j]) return jjak print(findjjak(a)) print(n) 이걸 그대로 실행하면 이런 에러가 뜬다. UnboundLocalError: local variabl..

이진탐색 예제 (binary search example)

탐색 범위를 절반으로 줄이는 것을 반복해서 탐색하는 방법이다. 이진탐색은 데이터가 정렬이 되어있음을 전제하고 사용하는 탐색 알고리즘이다. 계산 복잡도는 O(logn)이다. def Binary_search(lst, s_value): start = 0 end = len(lst) -1 #리스트 탐색범위 변수이다. while start lst[mid]: start = mid + 1 else: end = mid - 1 return -1 #찾지 못했을 때 반환하는 값이다. d = [1,4,9,16,25,36,49,64,81] n = 36 print(Binary_search(d, n)) d2 = [1,4,9,16,25,36,49,64,81,100,121,144] n2 = 144 print(Binary_search(d..

반응형