由于y和z相互牵制。导致求解很困难。现在我的求解思路是离散化边界条件。以0.1为
步长生成一组在[0,1]之间的y和z值。将这组边界条件全部带入。用NDSolve来解。
代码如下:
eqs = {D[uz[y, z], z] + D[uy[y, z], z] == 0,
D[p[y, z], z] == D[uz[y, z], {y, 2}] + D[uz[y, z], {z, 2}],
D[p[y, z], y] == D[uy[y, z], {z, 2}] + D[uy[y, z], {y, 2}]};
fy = Table[i^2, {i, 0, 1, 0.1}];
fz = Sin[2 Pi fy];
bc1 = Table[uy[fy[[i]], fz[[i]]+1] == 0, {i, 10}];
bc2 = Table[uz[fy[[i]], fz[[i]]+1] == 0, {i, 10}]; bc3 =
Table[uy[fy[[i]], fz[[i]]] == 0, {i, 10}];
bc4 = Table[uz[fy[[i]], fz[[i]]] == 0, {i, 10}];
BC = Join[bc1, bc2, bc3,
bc4, {p[0, 0] == 2, p[0, 1] == 2, p[1, 0] == 1, p[1, 1] == 1}];
sol = NDSolve[{eqs, BC}, {p, uy, uz}, {y, 0, 1},
{z, -1, 1}];
Plot3D[Evaluate[p[y, z] /. sol[[1, 1]]], {y, 0, 1}, {z, -1, 1},
PlotRange -> All, PlotLabel -> p[y, z], AxesLabel -> Automatic]
Plot3D[Evaluate[uy[y, z] /. sol[[1, 2]]], {y, 0, 1}, {z, -1, 1},
PlotRange -> All, PlotLabel -> uy[y, z], AxesLabel -> Automatic]
Plot3D[Evaluate[uz[y, z] /. sol[[1, 3]]], {y, 0, 1}, {z, -1, 1},
PlotRange -> All, PlotLabel -> uz[y, z], AxesLabel -> Automatic]
现在遇到的问题是。求解时老是会说边界条件有多余。但是我不敢随便删除边界条件啊。
刚学习mma。所有的命令自己查文档得来的。真心累惨了。请各位指导一下
2016年01月27日 07点01分
4