成像代码迭代部分

Posted 曙光晨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了成像代码迭代部分相关的知识,希望对你有一定的参考价值。

成像代码迭代部分

数据读入
初始化.

声明

由于实验的老师特有的查重方式以及计算成绩的方法,所以请不要直接照抄本文的代码。

这里的代码可能会有一些BUG,请大家注意

注:我这里的使用的是C++,VS2019 ,Graph2019,可能之后的版本会不同这里说明一下,说不定等我啥时间闲了,我写个C#版本的。(笑)

这里我默认您是已经做完了之前的数据读入和初始化的部分。

神奇的SOR

注:这里我建议您打开老师的讲义来看本文,这里的公式我是按照当年我这届的讲义来写的,可能会有一些出入吧(希望不会有)
SOR最总要的是一开始的差分公式(1-18)
φ 0 = ( c 1 φ 1 + c 2 φ 2 + c 3 φ 3 + c 4 φ 4 ) c 0 \\varphi _0 =\\frac(c_1 \\varphi_1+c_2 \\varphi _2+c_3 \\varphi_3+c_4 \\varphi_4)c_0 φ0=c0(c1φ1+c2φ2+c3φ3+c4φ4)

主要目的是计算出 c 0 c_0 c0 c 1 c_1 c1 c 2 c_2 c2 c 3 c_3 c3 c 4 c_4 c4 c 0 c_0 c0

这里公式跳转到 (1-7)(害,才发现(1-6)和(1-18)是一样的)
这里给出了 c 1 , c 2 , c 3 , c 4 , c 0 c_1,c_2,c_3,c_4,c_0 c1,c2,c3,c4,c0的计算方式

注意:不同位置的 c 3 , c 4 , c 0 c_3,c_4,c_0 c3,c4c0的计算方式不同,同时还有注意电极的位置。

由于这里使用的是十字5点法,请注意边界部分需要修正(或者直接就不写最边界的位置让十字的最上端直接对齐边界点,笑)

计算出对应的系数后,带入(1-25)(就是有迭代因子修正的那个公式)式中计算出下一个电位值 φ k + 1 \\varphi_k+1 φk+1

(这里我可能说的比较简单,但是大致的逻辑应该是这些,这里我建议将SOR做成一个函数 SOR()后面的迭代会多次调用的)。

迭代过程

根据讲义我们可以知道:
第一轮中 ω 0 = 1 \\omega_0=1 ω0=1然后SOR()

loop
第二轮中 ω 1 = 1.375 \\omega_1 = 1.375 ω1=1.375之后SOR()得到 φ k + 1 \\varphi_k+1 φk+1迭代12次
将后面三次的 φ \\varphi φ提出,计算残差 Δ φ = φ k + 1 − φ k \\Delta\\varphi = \\varphi_k+1-\\varphi_k Δφ=φk+1φk
以及平均残差 Δ φ ˉ \\bar\\Delta\\varphi Δφˉ

获得两个 Δ φ ˉ 1 \\bar\\Delta\\varphi_1 Δφˉ1, Δ φ ˉ 2 \\bar\\Delta\\varphi_2 Δφˉ2.
带入(1-27)计算出 λ \\lambda λ,在带入(1-29),(1-28),(1-30)计算出最后的
ω m \\omega_m ωm

用这个 ω m \\omega_m ωm替代前面的 ω 1 = 1.375 \\omega_1 = 1.375 ω1=1.375
当(1-31)式成立时,跳出该循环。

这里固定 ω m \\omega_m ωm

loop
SOR()
计算残差 Δ φ = φ k + 1 − φ k \\Delta\\varphi = \\varphi_k+1-\\varphi_k Δφ=φk+1φk

当像管中的每个位置从残差都要小于数据中给定的精度要求时,跳出循环

等位线计算

到这里基本上迭代就完了,离最后出图没多少距离了,大家加油
(不过要是中间崩了又没出图,基本就白干了,这个给分我个人感觉不是很合理)

首先根据提供的数据计算出需要扫描的等位线数目
主要目的计算像管中每个电位等位点的个数

在整个像管中寻找:
loop

		if $\\varphi [i,j]<等位线间隔<\\varphi[i,j+1]  or  \\varphi[i,j]>等位线间隔>\\varphi[i,j+1]$
		
		使用(1-37)式对Z轴进行插值,R轴基本不变吧
		R轴上的等电位坐标记录
		等位线个数+1
		

		if $\\varphi [i,j]<等位线间隔<\\varphi[i+1,j  or  \\varphi[i,j]>等位线间隔>\\varphi[i+1,j]$
		
		使用(1-38)式对R轴进行插值,Z轴基本不变吧
		R轴上的等电位坐标记录
		等位线个数+1
		


	注意:在最下方的一行(Z轴上,插值会出现一些问题)

绘图

这里使用的是Graph2019,这里放个链接,是我认为对我安装这个东西很好的一个参考。
https://blog.csdn.net/edc370/article/details/79944550

首先设定窗口的大小
initgraph(width,height);

设定背景为黑
setbkcolor(BLACK);

绘制像管的边界
rectangle(left,top,right,bottom)

绘制像管中的电极
bar(left,top right,bittom)

绘制等位线
loop
line(x1,y1,x2,y2)(根据上面的等电位点绘制)

在给定的电位上。

到这里基本上整个程序就结束了
后面还有一些打印的东西,就是对文件的读写操作,这个可以看看我前面写的成像代码读入部分https://blog.csdn.net/hopefullying/article/details/117866172

那么这里就结束, 感谢大家的支持。

以上是关于成像代码迭代部分的主要内容,如果未能解决你的问题,请参考以下文章

成像代码迭代部分

成像代码迭代部分

成像代码读入部分

成像代码读入部分

成像代码读入部分

成像代码初始化部分