혹시 매쓰매티카로 상한선이 있는 PDE 풀어보신 분 계신가요 ?

parkon의 이미지

매쓰매티카로 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], ....}, ...]

이런 형태로 이리 저리 시도해 봤는데
어떤 때는 좀 되는듯 하다가 안되고,
또 어떤 때는 무한 루프 비슷하게 걸리다가 프로그램이 죽고,
종을 못 잡겠네요.
혹시 비슷한 경험이 있으시거나, 이에 대한 논의가 있는 글타래 아시는 분 계신가요 ?
snowall의 이미지

선형 방정식이라면 일단 아무 해나 구하고 나서, 구한 해 f(x,t)의 최대값이 u(t)의 최소값보다 작아지도록 normalize하면 될 것 같은데요

다른 문제가 있나요?

피할 수 있을때 즐겨라! http://melotopia.net/b

parkon의 이미지

비선형항이 하나 있긴 하지만, 그것보다
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) 이런 식으로 되어 있습니다.

snowall의 이미지

방정식이 어떻게 생겼는지를 모르고, 구체적으로 어떤것들을 해보셨는지도 모르겠으므로, 원론적인 이야기부터 해야겠네요.

일단 해가 존재하는지부터 따져봐야겠죠. 즉, 가령 u(t)를 넘지 않는 해가 존재하지 않을 수도 있습니다. 그러니까 u(t)에 의해서 위로 유계인지를 먼저 조사해봐야 할 것 같네요.

그리고 u(t)에 의한 상한선 조건을 빼고 일단 풀어놓고, 그 해가 상한선 조건을 위배하는지 만족하는지 조사해 보는 것이 쉬워보입니다.

선형 방정식이라면 해가 유일할테니 쉽겠지만 비선형이라면 유일하지 않을수도 있어서 이것도 조사해야 할 거고요.

즉, 매스매티카가 헤매고 있는 부분이 상한선 때문인지 비선형성 때문인지 조사해봐야 할 것으로 보입니다.

또한, 경계조건이 주어진 대로라면 선형 방정식의 경우 상한선을 넘어가지 않을 것 같다는 추측이 드네요..

피할 수 있을때 즐겨라! http://melotopia.net/b

parkon의 이미지

답변 감사드립니다.
원래 문제를 다 올리기에는 너무 복잡하고,
말씀하신 내용들은 이미 잘 검토하고 있습니다.
즉 저 상한선이 없으면 유일한 해를 잘 구할 수 있고,
그 해가 문제의 파라미터 값이 어떤 영역안으로 들어가면 저 상한선을 침범한다는 것,
또 지금도 어떻게 어떻게 하면 저 상한선을 지키도록 할 수 있긴 한데
연산시간이 무지막지하게 늘어나는 문제가 생기더군요.
(그럼 한참을 헤매다가 프로그램이 죽기 쉽상입니다.)
C나 포트란으로 코딩을 하면 저 상한선은 쉽게 해결할 수 있을것 같긴 한데
반면에 초기 조건이 두번 미분했을때 singular 한지라,
보통의 오일러 방법이나 Runge-Kutta 방법을 못쓰고
implicit Runge-Kutta라는 요상한 녀석을 써야 하는데
이게 코딩이 만만치 않은지라 엄두를 못내고 있어요.
(사실 저 singularity도 피해가는 방법이 있긴 합니다만
암튼 또 다른 이유들로 보통의 오일러 방법이나 Runge-Kutta 방법을 쓰는건
문제가 많습니다.)

반면 매쓰매티카의 NDSolve는 이미 아주 잘 구현된
implicit Runge-Kutta 방법을 가지고 있는데
이번에는 말씀드린 상한선이 문제가 되고요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.