혹시 매쓰매티카로 상한선이 있는 PDE 풀어보신 분 계신가요 ?
글쓴이: parkon / 작성시간: 월, 2013/01/14 - 2:41오전
매쓰매티카로 heat equation 비슷한 편미분 방정식을 풀고 있습니다.
대충 방정식은
d f(x,t)/dt = d^2 f(x,t)/dx^2 + ....
이런 꼴인데요,
t=0일때와, x-0일때, 또 x=1일때 초기 조건이 주어져 있습니다.
여기까진 평범한 이야기인데요,
문제는 f(x,t)가 어떤 함수 u(t)보다 클 수 없다는 상한선이 있습니다.
그래서
NDSolve[{D[f[x,t],t] == D[f[x,t],x,x] + ... + If[f[x,t]>u[t], ..., 0], ....}, ...]
이런 형태로 이리 저리 시도해 봤는데
어떤 때는 좀 되는듯 하다가 안되고,
또 어떤 때는 무한 루프 비슷하게 걸리다가 프로그램이 죽고,
종을 못 잡겠네요.
혹시 비슷한 경험이 있으시거나, 이에 대한 논의가 있는 글타래 아시는 분 계신가요 ?
Forums:
선형 방정식이라면 일단 아무 해나 구하고 나서, 구한
선형 방정식이라면 일단 아무 해나 구하고 나서, 구한 해 f(x,t)의 최대값이 u(t)의 최소값보다 작아지도록 normalize하면 될 것 같은데요
다른 문제가 있나요?
피할 수 있을때 즐겨라! http://melotopia.net/b
비선형항이 하나 있긴 하지만,
비선형항이 하나 있긴 하지만, 그것보다
normalization은 초기조건과 boundary condition에 의해 이미 완전히 결정되어서요.
예를 들어 f(0,t)= 1/3, f(1,t)=1+t/10, f(x,0)= If[x<1/3, 2 x + 1/3, 1] 이런 식으로 되어 있고,
저 upper limit은
f(x,t) <= 1 + t/10 = u(t) 이런 식으로 되어 있습니다.
방정식이 어떻게 생겼는지를 모르고, 구체적으로
방정식이 어떻게 생겼는지를 모르고, 구체적으로 어떤것들을 해보셨는지도 모르겠으므로, 원론적인 이야기부터 해야겠네요.
일단 해가 존재하는지부터 따져봐야겠죠. 즉, 가령 u(t)를 넘지 않는 해가 존재하지 않을 수도 있습니다. 그러니까 u(t)에 의해서 위로 유계인지를 먼저 조사해봐야 할 것 같네요.
그리고 u(t)에 의한 상한선 조건을 빼고 일단 풀어놓고, 그 해가 상한선 조건을 위배하는지 만족하는지 조사해 보는 것이 쉬워보입니다.
선형 방정식이라면 해가 유일할테니 쉽겠지만 비선형이라면 유일하지 않을수도 있어서 이것도 조사해야 할 거고요.
즉, 매스매티카가 헤매고 있는 부분이 상한선 때문인지 비선형성 때문인지 조사해봐야 할 것으로 보입니다.
또한, 경계조건이 주어진 대로라면 선형 방정식의 경우 상한선을 넘어가지 않을 것 같다는 추측이 드네요..
피할 수 있을때 즐겨라! http://melotopia.net/b
답변 감사드립니다. 원래 문제를 다 올리기에는 너무
답변 감사드립니다.
원래 문제를 다 올리기에는 너무 복잡하고,
말씀하신 내용들은 이미 잘 검토하고 있습니다.
즉 저 상한선이 없으면 유일한 해를 잘 구할 수 있고,
그 해가 문제의 파라미터 값이 어떤 영역안으로 들어가면 저 상한선을 침범한다는 것,
또 지금도 어떻게 어떻게 하면 저 상한선을 지키도록 할 수 있긴 한데
연산시간이 무지막지하게 늘어나는 문제가 생기더군요.
(그럼 한참을 헤매다가 프로그램이 죽기 쉽상입니다.)
C나 포트란으로 코딩을 하면 저 상한선은 쉽게 해결할 수 있을것 같긴 한데
반면에 초기 조건이 두번 미분했을때 singular 한지라,
보통의 오일러 방법이나 Runge-Kutta 방법을 못쓰고
implicit Runge-Kutta라는 요상한 녀석을 써야 하는데
이게 코딩이 만만치 않은지라 엄두를 못내고 있어요.
(사실 저 singularity도 피해가는 방법이 있긴 합니다만
암튼 또 다른 이유들로 보통의 오일러 방법이나 Runge-Kutta 방법을 쓰는건
문제가 많습니다.)
반면 매쓰매티카의 NDSolve는 이미 아주 잘 구현된
implicit Runge-Kutta 방법을 가지고 있는데
이번에는 말씀드린 상한선이 문제가 되고요.
댓글 달기