牛顿法数值求解二维热传导方程
上次在《牛顿法数值求解泊松方程》中讲了使用牛顿法(Newton’s method)数值求解多变量方程,并以一维泊松方程为例进行隐式求解。本次讲解使用牛顿法数值求解多维方程。迭代形式为上次所讲:
还是考虑方程:
并考虑狄利克雷边界条件:
离散求解区域:
In[]:=
1 | dx = 0.02; |
方程左边以及需要求的变量:
In[]:=
1 | f = {}; |
边值条件,以及使用前面讲的离散化方法写出方程左边的差分形式:
In[]:=
1 | Do[If[xGrid[[i]]^2 + yGrid[[j]]^2 <= 1, u[i, j] = 1, |
雅可比行列式为:
In[]:=
1 | jacobian = D[f, {var}]; |
初始试探解为:
In[]:=
1 | uu = Table[0.5, {i, 1, Length[var]}]; |
下面使用牛顿法(Newton’s method)求解该问题:
In[]:=
1 | While[error > 10^-10 && nn < 100, |
迭代次数:
In[]:=
1 | nn |
Out[]:=
误差:
In[]:=
1 | error |
Out[]:=
下面画出数值解:
In[]:=
1 | uuSol = Flatten[Table[{xGrid[[i]], yGrid[[j]], u[i, j]}, {i, nx}, {j, ny}], 1]; |
Out[]:=
请大家多多关注、点赞、收藏、转发,让更多有需要的人可以看到,以后会分享更多实用的算法。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Who Am I!
评论
ValineDisqus