第十一次作业

2017-12-04  本文已影响0人  陇溪首逸

第五章场问题,选做了课后5.1题


由场中已知的边界位置电势来确定其它各处的电势,之后进一步求电场强度。


解题分析

观察下图,已知小正方形区域为一等势体区域,且电势为1;大正方形外框亦为一等势边界,电势为0。则由系统整体的对称性,设置各选定位置处的电势初始参考值

教材提供的题图

如下图,将小正方形和大正方形之间的距离等分为三份(分界线由虚线标出),并将电势差等分,设置各虚线处的具体参考值(已标识于虚线处):

一,9×9矩阵

设置一个9×9的矩阵,记录下初始值,之后进行迭代更新。迭代时应注意到小正方形区域和大正方形边框处的电势不应变化。

上图即为场区域一些格点处的初始电势设定值。

Mathematica代码:

While[Abs[u1 - (u[[2, 1]] + u[[2, 3]] + u[[1, 2]] + u[[3, 2]])/4] >= 10^-4,

For[i = 2, i <= 8, i++,

For[j = 2, j <= 8, j++,

If[i >= 4 && i <= 6 && j >= 4 && j <= 6, Null, u[[i, j]] = (u[[i, j - 1]] + u[[i, j + 1]] + u[[i - 1, j]] + u[[i + 1, j]])/4]]]; u1 = u[[2, 2]]];

MatrixForm[u]

设定的迭代终止条件为矩阵元素(2,2)在迭代前后值之差小于10^-4,得到迭代结果矩阵为(截图效果AV画质。。。):

按矩阵元素值的大小对应颜色深浅,画出颜色表示图(外周一圈纯白表示着0):

二,17×17矩阵

由上图可直观的看出迭代达到稳定时势场的大致分布,但像素点还有待增多,增多后效果会很好。我试着写任意步长细分区域的程序,而且把初始矩阵的设定也有编程解决了,于是这个问题在任意细分下的情况也可以解决,首先,设置初始矩阵为17×17,矩阵初始值自动设定程序为:

Mathematica代码:

step = .166667;

For[i = 1, i <= 17, i++,

For[j = 1, j <= 17, j++,

If[(i == 2 || i == 16) && (j >= 2 && j <= 16) || (j == 2 || j == 16) && (i >= 2 && i <= 16), u[[i, j]] = step*1];

If[(i == 3 || i == 15) && (j >= 3 && j <= 15) || (j == 3 || j == 15) && (i >= 3 && i <= 15), u[[i, j]] = step*2];

If[(i == 4 || i == 14) && (j >= 4 && j <= 14) || (j == 4 || j == 14) && (i >= 4 && i <= 14), u[[i, j]] = step*3];

If[(i == 5 || i == 13) && (j >= 5 && j <= 13) || (j == 5 || j == 13) && (i >= 5 && i <= 13), u[[i, j]] = step*4];

If[(i == 6 || i == 12) && (j >= 6 && j <= 12) || (j == 6 || j == 12) && (i >= 6 && i <= 12), u[[i, j]] = step*5];

If[(i == 7 || i == 11) && (j >= 7 && j <= 11) || (j == 7 || j == 11) && (i >= 7 && i <= 11), u[[i, j]] = 1];

If[(i == 8 || i == 10) && (j >= 8 && j <= 10) || (j == 8 || j == 10) && (i >= 8 && i <= 10), u[[i, j]] = 1];

If[i == 9 && j == 9, u[[i, j]] = 1]]]

因为区域被分成了更多小区域,所以判断稳定的条件由之前的10^-4改变为10^-5,得稳定的17×17矩阵为(请忽略画质。。。可点击原图查看,会清晰一些):

彩图为:

中心小正方形为1势能区域,最外面一圈为0势能,颜色由红向蓝过度,势能值由1向0减小,此图已经比较细腻了,显示效果也比较好。颜色相同的条带可近似看作是等势线。

三,33×33矩阵

为了更好的显示效果,做了个33×33矩阵,运行结果矩阵很大,迭代运算的截止精度也向小数点后又推进了一位,达到了10^-6,最终结果矩阵大到无法完全截屏(下图只截取了一部分):

但彩图的效果很好:

从上图已经可以看出很好的显示效果了,直观又上眼。其“等势线”也更加精细,场的分布已经比较了然,是一个很好的效果。


我在编程过程中发现在理解了教材的算法和原理后,用Mathematica处理这个问题很容易,于是顺便把下题也解决了,与上题不同,此题的初始电势值设置要从头再来,且+1与-1之间也不是上题中的小正方形区域:

在上题的代码基础上,修改一下限制条件,有:

Mathematica代码:

While[Abs[u1 - (u[[2, 1]] + u[[2, 3]] + u[[1, 2]] + u[[3, 2]])/4] >= 10^-4, For[i = 2, i <= 8, i++, For[j = 2, j <= 8, j++, If[i >= 4 && i <= 6 && (j == 4 || j == 6), Null, u[[i, j]] = (u[[i, j - 1]] + u[[i, j + 1]] + u[[i - 1, j]] + u[[i + 1, j]])/4]]]; u1 = u[[2, 2]]]

MatrixForm[u]

运行结果矩阵为:

由该矩阵我们能发现势场分布与之前一题在左部分矩阵元上的区别,此题左半部分势场虽然有与上一题相似的地方(位于势值1和势值0之间),但是由于势值1区域由小正方形平板缩小为一个线分布,且右半部分增加了势值为-1的线分布,对势值有了明显影响。

转换为颜色图,效果更直观(蓝色越深,值越小,白色为0势值,颜色越偏向黄则势值越大):

因为这个题目初始矩阵的设置比较麻烦,故只做了9×9的矩阵,但原理是类似的。


结论

由课本的拉普拉斯等式出发,做分析得出数值解法,取得了一定效果,稳定矩阵的存在表明了方法的可靠性,矩阵转换为彩图显示令结果更加明显而直观,将区域细分为更多取样点,初始矩阵越大时,最终结果越精细,越了然直观。不得不说,课本的分析介绍的这种数值方法很好很有用,取样点密度高了之后会有更好的结果。


说明

这次我没用Python,改用的Mathematica。我现在对那玩意有点阴影,有时候出问题找不到源头。。。但既然是计算物理而不是计算Python,用什么工具就不重要了,结果出来了就行。

上一篇下一篇

猜你喜欢

热点阅读