Mathematica solving differential equations

ε祈祈猫儿з 提交于 2019-12-13 04:45:03

问题


I would like to numerically find the solution to

u_t - u_xx - u_yy = f on the square y ∈ [0,1], x ∈ [0,1]

where f=1 if in the unit circle and f=0 otherwise. The boundary conditions are u=0 on all four edges.

I have been trying to use ND-solve for ages but I keep getting error messages. I'm new to Mathematica so I don't know how to define f before ND-Solve.

Thank you in advance.


回答1:


The Mathematica help files are incredibly complete for stuff like this. I'm going to reference the online version, but note that, in the help browser in Mathematica, you can interactively modify and evaluate the help examples. This was the only way I learned much about Mathematica.

One point before you start trying more things: It's very easy to define a function, such as u or f when intending to make a comparison statement. A surefire, but somewhat lazy, way of fixing potential lingering problems from this is to quit the current kernel and then evaluate something again. Quitting the kernel loses all symbols you may have accidentally defined up to that point. (Starting up a new kernel is also why Mathematica churns a little bit the first time you do any operation, even if it's simple addition.)

Continuing on with the question at hand... In the reference I linked above, a sample is given which solves the one-dimensional heat equation which is very similar to your example. Let's start with that and modify it:

NDSolve[{D[u[t, x], t] == D[u[t, x], x, x], u[0, x] == Q0, 
  u[t, 0] == Sin[t], u[t, 5] == 0},
  u, {t, 0, 10}, {x, 0, 5}]

Their equations are ∂ut = ∂uxx with boundary conditions of the initial energy being Q0 at time 0 ∀x, the energy at x = 0 being sin(t) and the energy at x = 5 being 0 ∀t. You can see above how those map hopefully. Now, let's try to the same for your terms:

NDSolve[{D[u[t, x, y], t] - D[u[t, x, y], x, x] - D[u[t, x, y], y, y] == f[x, y],
  f[x,y] == If[x^2 + y^2 < 1, 1, 0],
  u[t, 0, y] == 0, u[t, 1, y] == 0, 
  u[t, x, 0] == 0, u[t, y, 1] == 0 }
  u, {x, 0, 1}, {y, 0, 1}]

I think that's about right. However, there's at least one problem here still, though. t is still a free variable. You didn't provide any equations to restrain it, so the system is underspecified.



来源:https://stackoverflow.com/questions/4020606/mathematica-solving-differential-equations

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!