gpt4 book ai didi

c++ - 用高斯赛德尔红黑求解一维泊松方程

转载 作者:行者123 更新时间:2023-11-30 05:04:38 30 4
gpt4 key购买 nike

我正在尝试求解一维泊松方程,以模拟电容器电介质中 10 微米间隔的电势。我遇到的主要问题是红/黑 Gauss-Seidel 代码似乎并未实际更新潜在矩阵中的值,因此未收敛。

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
float x=0;
bool exit = false;
float V [11] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
float Q [11];
// set up q matrix
for (int i = 0; i <= 10; i++)
{
Q[i] = 50*sin(3.14*x/0.00001);
x += 0.00001;
}
while(!exit)
{
if(V[10] <= 3.29)
{
// red sweep
for(int i=1; i <= 10; i+=2)
{
V[i] = -0.5*(0.00001*Q[i]-V[i-1]-V[i+1]);
}
//black sweep
for(int j=2; j <= 10; j+=2)
{
V[j] = -0.5*(0.00001*Q[j]-V[j-1]-V[j+1]);
}
}
else exit=true;
}
for(int i=0;i<=10;i++)
{
cout << V[i] << endl;
}
return 0;
}

最佳答案

当心,我相信您在黑色扫描期间正在读取越过 V 数组的边界:

//black sweep
for(int j=2; j <= 10; j+=2)
{
V[j] = -0.5*(0.00001*Q[j]-V[j-1]-V[j+1]);
}

j=10 时,您将访问 V[11],这超出了 V 数组的长度。这将读取未初始化的内存,因此这可能解释了为什么你的方程式不收敛。

关于c++ - 用高斯赛德尔红黑求解一维泊松方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48777168/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com