263페이지 보면여
불안정성을 해소하기 위해 암묵적 해법을 사용한다고 나오는데
도대체 명시적과 암묵적의 의미를 잘 모르겠네요 리플좀 부탁합니다.
[GPG 1 글 2.4] 암묵적 해법과 명시적 해법에 대해 설명좀 부탁드림다
Moderator: 류광
-
- Posts: 3805
- Joined: 2001-07-25 09:00
- Location: GPGstudy
- Contact:
-
- Posts: 34
- Joined: 2001-07-26 09:00
- Contact:
암묵적과 명시적
암묵적은 영어로 implicit, 명시적은 explicit 라고 하지요. 실제 gpg 의 원문에 그렇게 쓰였는진 저도 모르겠습니다만..^^;;
explict 해법은, 쉽게 말하면 식이 하나로 나오는 경우입니다. 보통 유한차분법에서 생각해보면, 시간이 (n+1) 일 때의 각 노드에서의 값을 시간 n 일 때로 계산이 된다면, 즉
z(n+1)_i,j - 2 z(n)_i,j + z(n-1)_i,j = α^2 ( z(n)_i+1,j + z(n)_i-1,j + z(n)_i,j+1 + z(n)_i,j-1 - 4 z(n)_i,j )
where, α = c / (h Δt)
일 경우입니다(261페이지 식입니다). 시간 (n+1)일 때의 z_i,j 만 미지수이고 나머지 값들은 모두 시간 (n)에서 알려져 있습니다. 그러므로 이 식만 풀면 시간 (n+1)에서의 값을 구할 수 있단 말이지요. (말 그대로 명시적입니다)
반면, 263페이지에서 설명하듯 불안정성의 요인이 있으며, 따라서 α^2 <= 1/2 조건이 항상 만족하도록 그리드(노드)를 정해야한다는 단점이 있습니다. 즉 시간 간격이 너무 크면 해가 아예 안 구해지게 됩니다.
implicit의 경우엔 위의 식을 살짝 바꿔서, 시간이 (n+1)에서의 각 노드의 값은 역시 시간이 (n+1)에서의 다른 노드의 값의 지배를 받는다고 생각한 것입니다. 이를 식으로 쓰면
z(n+1)_i,j - 2 z(n)_i,j + z(n-1)_i,j = α^2 ( z(n+1)_i+1,j + z(n+1)_i-1,j + z(n+1)_i,j+1 + z(n+1)_i,j-1 - 4 z(n+1)_i,j )
이 됩니다. 위의 식의 우변에서 z(n)을 모두 z(n+1)로 바꾼 것이지요..
이 경우엔 이 식을 풀게되는 시점, 즉 시간 n에서의 모든 노드값이 알려져있는 경우에서, 시간 (n+1)에서의 값은 모두 미지수가 됩니다. 결국 위 식에서 미지수는 졸지에 5개가 되어버립니다. 해를 바로 풀 수가 없으므로 암묵적이라고 하는 거지요.
그럼 이걸 어떻게 푸느냐? 그건 모든 노드에 대해 식을 다 써 줍니다. 그러면 boundary condition 까지 합치면 미지수의 수와 식의 수가 일치하게 됩니다. 즉 노드가 총 10000개라면 10000개의 식을 한꺼번에 풀어제끼는 겁니다. - -;;
식 10000개를 한꺼번에 풀어제끼려면 말 그대로 허벌나기 때문에, 여러가지 기법들이 도입됩니다. ① x 스위핑(sweeping)과 y 스위핑으로 나눠서 한 식에 미지수가 3개가 만든 후에 (그러면 전체 식은 tri-diagonal matrix로 표현될 수 있습니다) ②전체 행렬의 값을 구하기 위해 역행렬을 구하면 되는데, ③ 이 때 가우스 법 등으로 역행렬을 구해도 되지만, 역시나 허벌나기 때문에 --; ④ tri-diagonal matrix를 U/L 행렬로 바꾼 후에 미지수를 푸는 Tomas 알고리즘이란 놈을 주로 사용합니다. ⑤ 뭐.. 여기에 대해서 너무 알려고 하면 머리 아픕니다 -_-;
implicit의 장점은 말 그대로 불안정성의 요소가 없다는 것이지만, 실제로 implict로 풀어도 시간 간격이 너무 크거나 하면 제대로된 값은 나오지 않는다고 알고 있습니다. 하지만 물리적으로 식이 implicit가 더 신빙성이 있고, 여러가지 기법으로 수렴속도를 빠르게 하는 방법 등이 있기 때문에 공학용 수치해석에서는 꽤 많이 사용되는 방식입니다.
하지만.. 상대적으로 명시적 해에 비해 값이 빨리 빨리 나와주지 않는데다, 전체 노드의 값을 한꺼번에 풀어야하기 때문에 메모리 용량을 많이 차지하게 되므로, 게임 등의 응용에는 그다지 적합하지 않다고 생각합니다.
<font size=-1>[ 이 게시물 는(은) 수정됨 by : Pion 수정 시간: 2002-04-14 14:09 ]</font>
암묵적은 영어로 implicit, 명시적은 explicit 라고 하지요. 실제 gpg 의 원문에 그렇게 쓰였는진 저도 모르겠습니다만..^^;;
explict 해법은, 쉽게 말하면 식이 하나로 나오는 경우입니다. 보통 유한차분법에서 생각해보면, 시간이 (n+1) 일 때의 각 노드에서의 값을 시간 n 일 때로 계산이 된다면, 즉
z(n+1)_i,j - 2 z(n)_i,j + z(n-1)_i,j = α^2 ( z(n)_i+1,j + z(n)_i-1,j + z(n)_i,j+1 + z(n)_i,j-1 - 4 z(n)_i,j )
where, α = c / (h Δt)
일 경우입니다(261페이지 식입니다). 시간 (n+1)일 때의 z_i,j 만 미지수이고 나머지 값들은 모두 시간 (n)에서 알려져 있습니다. 그러므로 이 식만 풀면 시간 (n+1)에서의 값을 구할 수 있단 말이지요. (말 그대로 명시적입니다)
반면, 263페이지에서 설명하듯 불안정성의 요인이 있으며, 따라서 α^2 <= 1/2 조건이 항상 만족하도록 그리드(노드)를 정해야한다는 단점이 있습니다. 즉 시간 간격이 너무 크면 해가 아예 안 구해지게 됩니다.
implicit의 경우엔 위의 식을 살짝 바꿔서, 시간이 (n+1)에서의 각 노드의 값은 역시 시간이 (n+1)에서의 다른 노드의 값의 지배를 받는다고 생각한 것입니다. 이를 식으로 쓰면
z(n+1)_i,j - 2 z(n)_i,j + z(n-1)_i,j = α^2 ( z(n+1)_i+1,j + z(n+1)_i-1,j + z(n+1)_i,j+1 + z(n+1)_i,j-1 - 4 z(n+1)_i,j )
이 됩니다. 위의 식의 우변에서 z(n)을 모두 z(n+1)로 바꾼 것이지요..
이 경우엔 이 식을 풀게되는 시점, 즉 시간 n에서의 모든 노드값이 알려져있는 경우에서, 시간 (n+1)에서의 값은 모두 미지수가 됩니다. 결국 위 식에서 미지수는 졸지에 5개가 되어버립니다. 해를 바로 풀 수가 없으므로 암묵적이라고 하는 거지요.
그럼 이걸 어떻게 푸느냐? 그건 모든 노드에 대해 식을 다 써 줍니다. 그러면 boundary condition 까지 합치면 미지수의 수와 식의 수가 일치하게 됩니다. 즉 노드가 총 10000개라면 10000개의 식을 한꺼번에 풀어제끼는 겁니다. - -;;
식 10000개를 한꺼번에 풀어제끼려면 말 그대로 허벌나기 때문에, 여러가지 기법들이 도입됩니다. ① x 스위핑(sweeping)과 y 스위핑으로 나눠서 한 식에 미지수가 3개가 만든 후에 (그러면 전체 식은 tri-diagonal matrix로 표현될 수 있습니다) ②전체 행렬의 값을 구하기 위해 역행렬을 구하면 되는데, ③ 이 때 가우스 법 등으로 역행렬을 구해도 되지만, 역시나 허벌나기 때문에 --; ④ tri-diagonal matrix를 U/L 행렬로 바꾼 후에 미지수를 푸는 Tomas 알고리즘이란 놈을 주로 사용합니다. ⑤ 뭐.. 여기에 대해서 너무 알려고 하면 머리 아픕니다 -_-;
implicit의 장점은 말 그대로 불안정성의 요소가 없다는 것이지만, 실제로 implict로 풀어도 시간 간격이 너무 크거나 하면 제대로된 값은 나오지 않는다고 알고 있습니다. 하지만 물리적으로 식이 implicit가 더 신빙성이 있고, 여러가지 기법으로 수렴속도를 빠르게 하는 방법 등이 있기 때문에 공학용 수치해석에서는 꽤 많이 사용되는 방식입니다.
하지만.. 상대적으로 명시적 해에 비해 값이 빨리 빨리 나와주지 않는데다, 전체 노드의 값을 한꺼번에 풀어야하기 때문에 메모리 용량을 많이 차지하게 되므로, 게임 등의 응용에는 그다지 적합하지 않다고 생각합니다.
<font size=-1>[ 이 게시물 는(은) 수정됨 by : Pion 수정 시간: 2002-04-14 14:09 ]</font>