[关闭]
@zy-0815 2016-12-10T23:24:37.000000Z 字数 3430 阅读 1635

计算物理第十二作业

计算物理


摘要

  对电场的研究从来都是电磁学研究的重点,而通过电势来确定场的基本情况,是一种较为方便且常用的方法。本次作业将利用对空间中不同点的电势,来探讨不同边界条件下的电场情况,并回答课后习题5.1 5.4

背景

  电场是电荷及变化磁场周围空间里存在的一种特殊物质。电场这种物质与通常的实物不同,它不是由分子原子所组成,但它是客观存在的,电场具有通常物质所具有的力和能量等客观属性。通常在图片中我们使用电场线来表示:
  bba1cd11728b4710919055adc1cec3fdfc032317.jpg-77.3kB
  上图所示为正负点电荷之间的电场,其中橘红线表示电场线,浅蓝色线表示等势线。我们实际应用中会发现,对于电势的研究要比直接研究电场更为方便,因为电势是标量函数,只和空间位置有关,因此作图时我们亦可用等势线来描绘电场。
  同时,电势的表示形式是多样的,除上图所示外,我们可以类比等高线做出下图:
  electric1.png-4.6kB
  images.png-3.3kB
  images.jpg-6.9kB
  在这里我们将探究用这种图像来研究电场的方法。
  首先对于电场的Laplace's equation
  


  故而有:

  因此我们得到:
  

  对于二维情况,有:
  

  在此基础上,我们有 Jacobi Method
  

  我们亦可采用另一种计算方法,即Gauss-Sideal Method,可以更有效的减少内存占用率,且可以证明解的稳定性也不错
  

  除此之外还有Simulatneous over-relaxation(SOR) method,它可以很好地处理收敛速度相对较低的问题:
  

  我们为了加速收敛,可以有
  

  其中 可以衡量我们“放纵”收敛的程度,这里我们最好选择

正文

1. 无限大平板电容器

  主程序如下:

  1. from __future__ import division
  2. import matplotlib
  3. import numpy as np
  4. import matplotlib.cm as cm
  5. import matplotlib.mlab as mlab
  6. import matplotlib.pyplot as plt
  7. from mpl_toolkits.mplot3d import Axes3D
  8. from copy import deepcopy
  9. # initialize the grid
  10. grid = []
  11. for i in range(201):
  12. row_i = []
  13. for j in range(201):
  14. if i == 0 or i == 200 or j == 0 or j == 200:
  15. voltage = 0
  16. elif 50<=j<=51 :
  17. voltage = 1
  18. elif 150<=j<=151 :
  19. voltage = -1
  20. else:
  21. voltage = 0
  22. row_i.append(voltage)
  23. grid.append(row_i)
  24. # define the update_V function (Gauss-Seidel method)
  25. def update_V(grid):
  26. delta_V = 0
  27. for i in range(201):
  28. for j in range(201):
  29. if i == 0 or i == 200 or j == 0 or j == 200:
  30. pass
  31. elif 50<=j<=51 :
  32. voltage = 1
  33. elif 150<=j<=151 :
  34. voltage = -1
  35. else:
  36. voltage_new = (grid[i+1][j]+grid[i-1][j]+grid[i][j+1]+grid[i][j-1])/4
  37. voltage_old = grid[i][j]
  38. delta_V += abs(voltage_new - voltage_old)
  39. grid[i][j] = voltage_new
  40. return grid, delta_V
  41. # define the Laplace_calculate function
  42. def Laplace_calculate(grid):
  43. epsilon = 10**(-5)*200**2
  44. grid_init = grid
  45. delta_V = 0
  46. N_iter = 0
  47. while delta_V >= epsilon or N_iter <= 10:
  48. grid_impr, delta_V = update_V(grid_init)
  49. grid_new, delta_V = update_V(grid_impr)
  50. grid_init = grid_new
  51. N_iter += 1
  52. return grid_new
  53. x = np.linspace(0,200,201)
  54. y = np.linspace(0,200,201)
  55. X, Y = np.meshgrid(x, y)
  56. Z = Laplace_calculate(grid)
  57. Ex = deepcopy(Z)
  58. Ey = deepcopy(Z)
  59. E = deepcopy(Z)
  60. for i in range(201):
  61. for j in range(201):
  62. if i == 0 or i == 200 or j == 0 or j == 200:
  63. Ex[i][j] = 0
  64. Ey[i][j] = 0
  65. else:
  66. Ex_value = -(Z[i+1][j] - Z[i][j])/2
  67. Ey_value = -(Z[i][j+1] - Z[i][j])/2
  68. Ex[i][j] = Ex_value
  69. Ey[i][j] = Ey_value
  70. for i in range(201):
  71. for j in range(201):
  72. E_value = np.sqrt(Ex[i][j]**2 + Ey[i][j]**2)
  73. E[i][j] = E_value
  74. fig0, ax0 = plt.subplots()
  75. strm = ax0.streamplot(X, Y, np.array(Ey), np.array(Ex), color=np.array(E), linewidth=2, cmap=plt.cm.autumn)
  76. ax0.set_xlabel('x(m)')
  77. ax0.set_ylabel('y(m)')
  78. ax0.set_title('Electric field')
  79. plt.show()

结论

1. 两带电平板

1.1

figure_1-1.png-82.6kB
可见在两板内部的确近似为匀强电场
我们可以改变平板带点属性,改为两板有相同电势
figure_2.png-111.9kB

1.2

若我们考虑Figure 5.6的边界条件,可进一步研究作图如下:

figure_1-9.png-47.5kB
figure_2-1.png-103.4kB
figure_1-8.png-123.3kB

2. 正方形平板与有边界情况

  这里我们取Figure 5.4的边界条件,即:
IMG_4312(20161210-150642).jpg-193.3kB
  此时可得到图像:
  figure_1-5.png-74.8kB
  figure_1-6.png-107.8kB
  figure_1-7.png-119.7kB

3. 点电荷

  这里我们仍然设定外边界的电势为零,同时为了对比方便,我们这次将3D图和等势线图合并,改变相应参数可得如下图像
  figure_1-10.png-117kB
  figure_1-11.png-94.8kB

4. 两个点电荷

figure_1-12.png-122.8kB
figure_2-2.png-98kB

致谢

张梓桐同学的帮助

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注