【电磁场实验作业】有限差分法(FDM)求解静电场电位分布
一、题目描述
试用超松弛法确定二维静电场区域的电位分布
二、有限差分法
有限差分法(Finite Difference Methods,简称FDM),是一种微分方程的数值解法,是通过有限差分来近似导数,从而寻求微分方程的近似解,是一种以以差分为原理的一种数值解法。
将求解场域划分为很多网格和节点,并用差商代替微商,将场域中的偏微分方程转化成以各节点的电位或者磁矢为未知量的差分方程组。求解该方程组可以得到各离散点待求电位或磁矢的数值解。
2.1差分的基本定义
一阶差分
Δf(x)=f(x+h)−f(x)\Delta f(x)=f(x+h)-f(x) Δf(x)=f(x+h)−f(x)
一阶差商
Δf(x)Δx=f(x+h)−f(x)h\frac{\Delta f(x)}{\Delta x}=\frac{f(x+h)-f(x)}{h} ΔxΔf(x)=hf(x+h)−f(x)
二阶差分
Δ2f(x)=Δf(x+h)−Δf(x)\Delta^{2} f(x)=\Delta f(x+h)-\Delta f(x) Δ2f(x)=Δf(x+h)−Δf(x)
二阶差商
Δ2f(x)Δx2=1h[Δf(x+h)h−Δf(x)h]\frac{\Delta^{2} f(x)}{\Delta x^{2}}=\frac{1}{h}\left[\frac{\Delta f(x+h)}{h}-\frac{\Delta f(x)}{h}\right] Δx2Δ2f(x)=h1[hΔf(x+h)−hΔf(x)]
2.1拉普拉斯方程的有限差分形式:
φi,j+1=φi,j+∂φ∂xh+12∂2φ∂x2h2+16∂3φ∂x3h3+⋯φi,j−1=φi,j−∂φ∂xh+12∂2φ∂x2h2−16∂3φ∂x3h3+⋯φi−1,j=φi,j−∂φ∂yh+12∂2φ∂y2h2−16∂3φ∂y3h3+⋯φi+1,j=φi,j+∂φ∂yh+12∂2φ∂y2h2+16∂3φ∂y3h3+⋯φi,j+1+φi,j−1+φi−1,j+φi+1,j=4φi,j+h2(∂2φ∂x2+∂2φ∂y2)+⋯∇2φ=∂2φ∂x2+∂2φ∂y2=0φi,j=14(φi,j+1+φi,j−1+φi−1,j+φi+1,j)\varphi_{i, j+1}=\varphi_{i, j}+\frac{\partial \varphi}{\partial x} h+\frac{1}{2} \frac{\partial^{2} \varphi}{\partial x^{2}} h^{2}+\frac{1}{6} \frac{\partial^{3} \varphi}{\partial x^{3}} h^{3}+\cdots \\ \varphi_{i, j-1}=\varphi_{i, j}-\frac{\partial \varphi}{\partial x} h+\frac{1}{2} \frac{\partial^{2} \varphi}{\partial x^{2}} h^{2}-\frac{1}{6} \frac{\partial^{3} \varphi}{\partial x^{3}} h^{3}+\cdots \\ \varphi_{i-1, j}=\varphi_{i, j}-\frac{\partial \varphi}{\partial y} h+\frac{1}{2} \frac{\partial^{2} \varphi}{\partial y^{2}} h^{2}-\frac{1}{6} \frac{\partial^{3} \varphi}{\partial y^{3}} h^{3}+\cdots \\ \varphi_{i+1, j}=\varphi_{i, j}+\frac{\partial \varphi}{\partial y} h+\frac{1}{2} \frac{\partial^{2} \varphi}{\partial y^{2}} h^{2}+\frac{1}{6} \frac{\partial^{3} \varphi}{\partial y^{3}} h^{3}+\cdots \\ \varphi_{i, j+1}+\varphi_{i, j-1}+\varphi_{i-1, j}+\varphi_{i+1, j}=4 \varphi_{i, j}+h^{2}\left(\frac{\partial^{2} \varphi}{\partial x^{2}}+\frac{\partial^{2} \varphi}{\partial y^{2}}\right)+\cdots \\ \nabla^{2} \varphi=\frac{\partial^{2} \varphi}{\partial x^{2}}+\frac{\partial^{2} \varphi}{\partial y^{2}}=0 \\ \varphi_{i, j}=\frac{1}{4}\left(\varphi_{i, j+1}+\varphi_{i, j-1}+\varphi_{i-1, j}+\varphi_{i+1, j}\right) φi,j+1=φi,j+∂x∂φh+21∂x2∂2φh2+61∂x3∂3φh3+⋯φi,j−1=φi,j−∂x∂φh+21∂x2∂2φh2−61∂x3∂3φh3+⋯φi−1,j=φi,j−∂y∂φh+21∂y2∂2φh2−61∂y3∂3φh3+⋯φi+1,j=φi,j+∂y∂φh+21∂y2∂2φh2+61∂y3∂3φh3+⋯φi,j+1+φi,j−1+φi−1,j+φi+1,j=4φi,j+h2(∂x2∂2φ+∂y2∂2φ)+⋯∇2φ=∂x2∂2φ+∂y2∂2φ=0φi,j=41(φi,j+1+φi,j−1+φi−1,j+φi+1,j)
2.3求解方法
简单迭代法:
φi,jn+1=14(φi,j+1n+φi,j−1n+φi−1,jn+φi+1,jn)\varphi_{i, j}^{n+1}=\frac{1}{4}\left(\varphi_{i, j+1}^{n}+\varphi_{i, j-1}^{n}+\varphi_{i-1, j}^{n}+\varphi_{i+1, j}^{n}\right) φi,jn+1=41(φi,j+1n+φi,j−1n+φi−1,jn+φi+1,jn)
松弛迭代法:
φi,jn+1=φi,jn+ω4(φi,j+1n+φi,j−1n+1+φi−1,jn+1+φi+1,jn−4φi,jn)ω=21+1−[cos(π/m)+cos(π/n)2]2\varphi_{i, j}^{n+1}=\varphi_{i, j}^{n}+\frac{\omega}{4}\left(\varphi_{i, j+1}^{n}+\varphi_{i, j-1}^{n+1}+\varphi_{i-1, j}^{n+1}+\varphi_{i+1, j}^{n}-4 \varphi_{i, j}^{n}\right)\\ \omega=\frac{2}{1+\sqrt{1-\left[\frac{\cos (\pi / m)+\cos (\pi / n)}{2}\right]^{2}}} φi,jn+1=φi,jn+4ω(φi,j+1n+φi,j−1n+1+φi−1,jn+1+φi+1,jn−4φi,jn)ω=1+1−[2cos(π/m)+cos(π/n)]22
三、示例代码
hx=25;hy=17; %设置网格节点数
v1=ones(hy,hx); %设置行列二维数组
v1(6:12,8:18)=zeros(7,11);
m=24;n=16;%横纵向网格数
%边界的Dirichlet边界条件值
v1(1,1:25)=0; %上边界
v1(17,1:25)=0;%下边界
v1(2:16,1)=0;%左边界
v1(2:16,25)=0;%右边界
v1(6,9:18)=ones(10,1)*100;%中间上边界
v1(7:11,18)=ones(5,1)*100;%中间上边界%计算松弛因子
t1=(cos(pi/m)+cos(pi/n))/2;
w=2/(1+sqrt(1-t1*t1));
v2=v1;maxt=1;t=0;%初始化
k=0;
while(maxt>1e-6)%由v1迭代,算出v2,迭代精度为0.000001k=k+1;%计算迭代次数maxt=0;for i=2:16%从2到16行循环for j=2:7%从2到7列循环v2(i,j)=v1(i,j)+(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1)-4*v1(i,j))*w/4;%拉普拉斯方程差分式t=abs(v2(i,j)-v1(i,j));if(t>maxt) maxt=t;endendendfor i=2:5%从2到5行循环for j=8:18%从8到18列循环v2(i,j)=v1(i,j)+(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1)-4*v1(i,j))*w/4;%拉普拉斯方程差分式t=abs(v2(i,j)-v1(i,j));if(t>maxt) maxt=t;endendendfor i=13:16%从13到16行循环for j=8:18%从8到18列循环v2(i,j)=v1(i,j)+(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1)-4*v1(i,j))*w/4;%拉普拉斯方程差分式t=abs(v2(i,j)-v1(i,j));if(t>maxt) maxt=t;endendendfor i=2:16%从2到16行循环for j=19:24%从19到24列循环v2(i,j)=v1(i,j)+(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1)-4*v1(i,j))*w/4;%拉普拉斯方程差分式t=abs(v2(i,j)-v1(i,j));if(t>maxt) maxt=t;endendendv2(6:12,8)=v2(6:12,7);v2(12,8:18)=v2(13,8:18);v1=v2;
endv1=v2(hy:-1:1,:);save v1data v1subplot(1,2,1),mesh(v1)%画三维曲面图axis([0,25,0,17,0,100])subplot(1,2,2),contour(v1,50)%画等电位线图hold onx=1:1:hx;y=1:1:hy;[xx,yy]=meshgrid(x,y);%形成栅格[Gx,Gy]=gradient(v1,0.6,0.6);%计算梯度quiver(xx,yy,Gx,Gy,'r')%根据梯度数据画箭头axis([-1.5,hx+2.5,-2,20])%设置坐标边框plot([1,1,hx,hx,1],[1,hy,hy,1,1],'k')%画导体边框text(hx/2-0.5,hy+0.4,'0V','fontsize',11);%上标注text(hx/2-0.5,0.4,'0V','fontsize',11);%下标注text(-1,hy/2,'0V','fontsize',11);%左标注text(hx+1,hy/2,'0V','fontsize',11);%右标注text(hx/2-3,hy/2+2,'\phi=50V','fontsize',11);%中间上标注text(hx/2-4,hy/2-1,'\partial\phi/\partialn=0','fontsize',11);%中间下标注hold off
四、实验结果
举得有用别忘记点个赞再走呀
【电磁场实验作业】有限差分法(FDM)求解静电场电位分布相关推荐
- 使用有限差分法求解无限长直的金属槽内的电位分布
使用有限差分法求解无限长直的金属槽内的电位分布 实验内容: 实验源码: 实验截图 实验内容: 使用有限差分法求解无限长直的金属槽内的电位分布 实验源码: %控制宽度 Length = 50; %长度 ...
- matlab画两电荷斥力与距离的图,电磁场大作业一基于MATLAB描绘双静电荷电场线与等势线分布...
电磁场大作业一基于MATLAB描绘双静电荷电场线与等势线分布 电磁场与电磁波大作业 学 院 班 级 姓 名 学 号 真空中任意两点电荷电场线与等势线分布研究 一.研究内容 (1) 研究思路 静电场是指 ...
- 物联网控制原理与技术--基于Matlab/simulink的频域分析奈氏图的应用(超详细/设计/实验/作业/练习)
目录 课程名:物联网控制原理与技术 内容/作用:设计/实验/作业/练习 学习:频域分析奈氏图 一.前言 二.环境与设备 三.原理 四.内容 五.结果与分析 课程名:物联网控制原理与技术 内容/作用:设 ...
- 静电场电位与电场强度matlab,基于MATLAB的静电场模拟
第26卷 第4期 大 学 物 理 实 验 Vol.26No.42013年8月 PHYSICAL EXPERIMENT OF COLLEGE Aug.2013 收稿日期:2013-04-07 文章编号: ...
- matlab里面接地咋找,MATLAB求解接地金属槽内电位分布
基于MATLAB有限差分法中的迭代法求解接地金属槽内电位分布 要求 运用MATLAB求解接地金属槽内点位分布, 精度.行数M.列数N自己定义. 有限差分法 有限差分法是基于差分原理的一种数值计算法.其 ...
- 【软件工程】实验作业,期末大作业各种资源合集(传送门)
前事不忘,后事之师. 学长将实验报告整理成以下链接,供大家参考,祝大家顺利修完学科.本人将在大学生涯中,不断更新本篇博客. Linux相关作业 学生成绩管理程序(shell版) 学生成绩管理程序(C语 ...
- 求f(x)=根号x的三次样条插值和分段线性插值c语言代码,【数值分析|三次样条插值法《数值分析》上机实验作业】...
『易坊知识库摘要_数值分析|三次样条插值法<数值分析>上机实验作业』2.要求(1)满足自然边界条件s?(0.2)?s?(1.0)?0:(2)满足第一类边界条件s?(0.2)?0.20271 ...
- 求矩形槽内电位分布matlab,MATLAB求解接地金属槽内电位分布
基于MATLAB有限差分法中的迭代法求解接地金属槽内电位分布 要求 运用MATLAB求解接地金属槽内点位分布, 精度.行数M.列数N自己定义. 有限差分法 有限差分法是基于差分原理的一种数值计算法.其 ...
- Linux内核实验作业四
实验作业:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 20135313吴子怡.北京电子科技学院 [第一部分]使用库函数API来获取用户标识号.库函数为getuid() 代码如下: ...
最新文章
- 使用sqlite保存数据返回主键
- MySQL中REGEXP正则查询同一个字段模糊搜索
- c语言结构体与共同体课件,《结构体与共同体》PPT课件.ppt
- ICML 2020 | 基于连续动态系统学习更加灵活的位置编码
- VTK:线性挤压用法实战
- Qt Creator应用3D效果
- 刚刚有水了一道,用递归实现进制转换
- mv命令移动文件到指定目录
- 日志查看技巧_如何用 Linux 技巧大大提高工作效率?
- project euler 开坑
- edui 富文本编辑_百度umeditor富文本编辑器插件扩展
- JavaScript 操作 session 方法
- 自动驾驶各大传感器介绍-硬件篇
- SNF开发平台WinForm之六-上传下载组件使用-SNF快速开发平台3.3-Spring.Net.Framework
- 多个数据表格合并计算计算机,多个excel表格某个数据合计-Excel怎么才能快速将几个表的某一列数据求和在一个......
- 黑程序员黑的最好的段子是什么?
- Java文档注释【自制API】
- 第一个将Palette Mode引入VVC,阿里云在JVET会议上引起关注
- 【排序算法】快速排序的分析改进
- 如何制作人脸微笑检测程序
热门文章
- “笨方法”学习Python笔记(1)-Windows下的准备
- 【沟通之道】头脑风暴-女人的心思你别猜
- python 之 append extend
- mybatis3.2.8 与 hibernate4.3.6 混用
- 调用ffmpeg库编译时出现common.h:175:47: error: 'UINT64_C' was not declared in this scope
- Java,开源,分享
- 从源文件中读出最后10KB内容到目的文件中
- 机器学习第五章 神经网络
- java 一千万数字排序_java 输入任意几个数字,怎样将他们从大到小排序?
- Web.xml 文件与server.xml 文件使用总结