Solving heat equation in polar coordinates with NDSolve

Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
2 replies · 12K views
Hop
Messages
1
Reaction score
0
Hi! Can someone please help?
I'm trying to solve the heat equation in polar coordinates. Forgive my way of typing it in, I'm battling to make it look right. The d for derivative should be partial, alpha is the Greek alpha symbol and theta is the Greek theta symbol.
du/dt = (alpha.alpha)[(d/dr)(du/dr)+(1/r)du/dr+(1/(r.r))(d/theta)(du/dtheta)]
This is the heat equation for a disk with radius a.
u(r,theta,0) = (a-r)cos(theta)
u(a,theta,t) = 0

In Mathematica, I used:
NDSolve[{Derivative[0,0,1][u][r,theta,t]==alpha Derivative[2,0,0][u][r,theta,t]+alpha Derivative[1,0,0][u][r,theta,t]+alpha Derivative[0,2,0][u][r,theta,t], u[r,theta,0] == (a-r)Cos[theta], u[a,theta,t]==0},u,{r,0,a},{theta,0,1},{t,0,1}]

I got an error: NDSolve: bcart
I tried replacing alpha with 2 and a with 4. Still got a problem. Is there a way of keeping the alpha's and a's? And can the radius start from 0, without problems?

Then I need to plot it in 3 dimensions. I tried: (radius starting from 1 since I had problems)
Plot3D[Evaluate[u[r,theta,t] /. First[%]],{r,1,4}, {theta,0,pi}, {t,0,1},PlotPoints -> 50]

I got an error: Plot3D: plnc (repeatedly)
General :: stop
Plot3D[InterpolatingFunction[{{1.,4.},{0.,3.14159},{0.,1.}},<>][r,theta,t],{r,1,4},{theta,0,pi},{t,0,1}, PlotPoints -> 50]

I still need to add a different boundary condition where du/dr(a,theta,t) = 0 and need to solve u(r,theta,t). Would it work the same way?

Please help! I would really appreciate it!

Thanks,
Hop
 
Physics news on Phys.org
Hop said:
Hi! Can someone please help?
I'm trying to solve the heat equation in polar coordinates. Forgive my way of typing it in, I'm battling to make it look right. The d for derivative should be partial, alpha is the Greek alpha symbol and theta is the Greek theta symbol.
du/dt = (alpha.alpha)[(d/dr)(du/dr)+(1/r)du/dr+(1/(r.r))(d/theta)(du/dtheta)]
This is the heat equation for a disk with radius a.
u(r,theta,0) = (a-r)cos(theta)
u(a,theta,t) = 0

In Mathematica, I used:
NDSolve[{Derivative[0,0,1][u][r,theta,t]==alpha Derivative[2,0,0][u][r,theta,t]+alpha Derivative[1,0,0][u][r,theta,t]+alpha Derivative[0,2,0][u][r,theta,t], u[r,theta,0] == (a-r)Cos[theta], u[a,theta,t]==0},u,{r,0,a},{theta,0,1},{t,0,1}]

I got an error: NDSolve: bcart
I tried replacing alpha with 2 and a with 4. Still got a problem. Is there a way of keeping the alpha's and a's? And can the radius start from 0, without problems?

Then I need to plot it in 3 dimensions. I tried: (radius starting from 1 since I had problems)
Plot3D[Evaluate[u[r,theta,t] /. First[%]],{r,1,4}, {theta,0,pi}, {t,0,1},PlotPoints -> 50]

I got an error: Plot3D: plnc (repeatedly)
General :: stop
Plot3D[InterpolatingFunction[{{1.,4.},{0.,3.14159},{0.,1.}},<>][r,theta,t],{r,1,4},{theta,0,pi},{t,0,1}, PlotPoints -> 50]

I still need to add a different boundary condition where du/dr(a,theta,t) = 0 and need to solve u(r,theta,t). Would it work the same way?

Please help! I would really appreciate it!

Thanks,
Hop
These equations are unreadable. Please use LaTex.
 
Hop said:
Hi! Can someone please help?
I'm trying to solve the heat equation in polar coordinates. Forgive my way of typing it in, I'm battling to make it look right. The d for derivative should be partial, alpha is the Greek alpha symbol and theta is the Greek theta symbol.
du/dt = (alpha.alpha)[(d/dr)(du/dr)+(1/r)du/dr+(1/(r.r))(d/theta)(du/dtheta)]

[tex]\frac{\partial u}{\partial t} = \alpha^2\left(<br /> \frac{\partial^2 u}{\partial r^2} + \frac 1r \frac{\partial u}{\partial r} + \frac{1}{r^2} \frac{\partial^2 u}{\partial \theta^2}\right)[/tex]

This is the heat equation for a disk with radius a.
u(r,theta,0) = (a-r)cos(theta)
u(a,theta,t) = 0

In Mathematica, I used:

NDSolve[{Derivative[0,0,1][u][r,theta,t]==alpha Derivative[2,0,0][u][r,theta,t]+alpha Derivative[1,0,0][u][r,theta,t]+alpha Derivative[0,2,0][u][r,theta,t], u[r,theta,0] == (a-r)Cos[theta], u[a,theta,t]==0},u,{r,0,a},{theta,0,1},{t,0,1}]

Please use code tags for code. It prevents the parser interpreting [u] as an underline tag.

Code:
NDSolve[{Derivative[0,0,1][u][r,theta,t]==alpha Derivative[2,0,0][u][r,theta,t]+alpha Derivative[1,0,0][u][r,theta,t]+alpha Derivative[0,2,0][u][r,theta,t], u[r,theta,0] == (a-r)Cos[theta], u[a,theta,t]==0},u,{r,0,a},{theta,0,1},{t,0,1}]

As I read it, you have [itex]\theta[/itex] running between 0 and 1. Surely you want [itex]\theta[/itex] between 0 and [itex]2\pi[/itex]?

I got an error: NDSolve: bcart
I tried replacing alpha with 2 and a with 4. Still got a problem. Is there a way of keeping the alpha's and a's? And can the radius start from 0, without problems?

NDSolve is for numerical solutions. This necessarily involves telling Mathematica what values of [itex]\alpha[/itex] and [itex]a[/itex] you want it to use (but in any event you can remove both of them from the problem by suitable rescalings of [itex]r[/itex] and [itex]t[/itex]). If you want a symbolic solution, use DSolve.

The error message indicates that you have not supplied sufficient boundary conditions. In particular, Mathematica does not know that [itex]r[/itex] and [itex]\theta[/itex] are to be interpreted as polar coordinates, and that therefore [itex]u(r,0,t) = u(r,2\pi,t)[/itex] and that the boundary condition to be imposed at [itex]r = 0[/itex] is that [itex]\frac{\partial u}{\partial r} = 0[/itex]. But the coordinate singularity at the origin may be fatal in any event: I don't think you can tell NDSolve that the value of [itex]u[/itex] at the origin should not depend on [itex]\theta[/itex]. (Or, if Mathematica can work all that out for itself, you only told it to look at [itex]0 \leq \theta \leq 1[/itex] and didn't supply boundary conditions at the edges of that sector.)