差分迭代法求解静电场边界问题,Python以及Matlab代码实现

基于差分迭代法求解静电场边界问题。

题目:已知静电场四个边界的取值,求区域内每个点的电位值,并画出等位线
给出参考等位线图以及题目图片:
在这里插入图片描述
在这里插入图片描述

求解思路:
通过观察需要求解的网格为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
  • 9
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

updaydayday

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值