基于差分迭代法求解静电场边界问题。
题目:已知静电场四个边界的取值,求区域内每个点的电位值,并画出等位线
给出参考等位线图以及题目图片:
求解思路:
通过观察需要求解的网格为n个,则能得到需要求解的点数为(n+1)^2个,已知四个边界的数值,那么只需要求解其余的点的电位,每一个点与其上下左右四个点的电位值相关,假设只有一个点需要求解,则4*x(1,1)=x(1,0)+x(1,2)+x(0,1)+x(2,1),已知四个边界的数值,则能通过四个点求出该点的数值。当网格增加,所求的格点增加,可以设置迭代,通过每一个点的方程,已经四个边界的数值,求出每一个所求点的数值。
在求解中,首先通过设置每个点的迭代次数,使迭代能达到较为精准的数值,其次通过for循环达到遍历网格点中的每一个点,最后得出结果。for循环同时也在上边界的设置中得以运用。最后将得到的数值输出到Excel文件,方便查看。Python代码中,使用了Anaconda中的Spyder工具箱,进行数值的计算,分析,也可以在其它的Python编译器(IDLE,IPython)上实现代码的功能。
MATLAB代码实现:
hx=0.1;
hy=0.1;%设置步长
Accuracy=10^-6;%设置精度
t=0;%t为迭代次数
x=10/hx+1;
y=10/hy+1;%设置x,y轴点数
v=zeros(x,y);%用零矩阵对各个点的初始电位初始化
for m =1:(x-1)
v(y,m)=100*sin((pi*(m-1))/100);%迭代设置边界条件
end
v_pre=zeros(x,y);
while(max(max(abs(v-v_pre)))>Accuracy)
v_pre=v;
t=t+1;
for i=2:x-1
for j=2:y-1
v(i,j)=(v_pre(i-1,j)+v_pre(i,j-1)+v_pre(i+1,j)+v_pre(i,j+1))/4;
end
end
end%迭代计算每个点的电位
xlswrite('C:\Users\Administrator\Desktop\dcc.xls',v)
fprintf('节点电势值矩阵:\n');
disp(fliplr(flipud(v)));
fprintf('迭代次数:%d\n',t);%
%绘制等电位图
contour(v,50,'linewidth',1);
axis([1 x 1 y]);
hold on;
plot([1,1,x,x,1],[1,y,y,1,1],'k','linewidth',2);
title('等势图')
hold on
xlswrite('juzhen.xls',v)
Python代码实现:
import numpy as np
import matplotlib.pyplot as plt
import copy #添加所需要的库
lenx = leny =101 #设置点数
delta