用高斯Seidel红色黑色求解1D泊松方程
Solving 1D Poisson Equation with Gauss Seidel Red Black
我正在尝试在电容器的介电中以10微米的间隔求解1D泊松方程,以模拟电势。我遇到的主要问题是Red/Black 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数组的长度。这将是在非初始化的内存中读取的,因此可能解释了您的方程式为什么不融合。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- C++使用数组作为多维数组,尽管将其初始化为带有指针的 1D
- 正弦级数方程计算不正确
- 线性丢番图方程 - 求给定区间内的解数和解
- 1d.exe找不到SFML文件?
- 1D中的非均匀FFT正向和反向测试
- 为什么将指针重新分配给 1D 数组的 char 时显示错误,但 2D 数组工作正常?
- 这个方程 x + y = x & y + x |y 成立(假设 x, y > 0)?
- 尝试创建包含简单方程的函数
- 哪个更快:在 1d 向量中按字符串搜索还是在 2d 向量中按向量搜索?
- 我正在尝试根据 4 个方程找出六个值
- 多 GPU 批处理 1D FFT:似乎只有一个 GPU 可以工作
- 在 // C++注释中使用 \\ 是否合法?(C++评论中的LaTeX方程)
- 如何使用指针C++将元素从2D数组复制到1D数组
- 从 2 个 1D 矢量创建 2D 矢量
- 我正在尝试在 C++ 中做一个方程,但它一直输出 1
- 查找满足浮点不等式方程的最小整数
- fftw:为什么我的 2D DFT 输出与每行的 1D DFT 输出不同?
- 用高斯Seidel红色黑色求解1D泊松方程