我目前正在制作一个近似Schroedinger方程的程序,对于我的初始条件,我的教授说从高斯开始。我使用的公式是这样的(抱歉,我不知道如何在降价中计算方程(:
p(x(=(1/sqrt(2*PI((*e^(-1/2*(x-u(^2/o(
为了简化起见,我从u=0和o=1开始,所以我在程序中使用它的方式是这样的:
double gaussian(double x) {
return (1/sqrt(2*M_PI)) * exp((-.5) * pow(x, 2));
}
void initial_conditions(int m, complex *values[], double dx) {
for (size_t i = 0; i < m; i++)
{
values[i]->real = gaussian(i * dx);
}
}
编译单位:gcc project1.c-lm-o project1
但每次我运行它时,它都会产生一个segfault。据我所知,它应该会起作用,但我对C有点新手。我已经确定,正是这个等式通过使用printf语句来缩小错误的位置,从而产生了错误,它总是到达特定的整个公式和return语句,然后就死了。
如有任何建议或帮助,我们将不胜感激。
complex *values[]
是怪异和不自然的。我看不到调用,但我已经说服自己,这真的应该是complex values[]
。
complex
太简单了,不想在堆上单独分配每个;几乎总是在对CCD_ 5的单个调用中分配CCD_。
从名称开始,我可以非常自信地预测,调用代码没有在values
中分配每个单独的complex
,而是只分配了values
,因此崩溃的原因是values[i]->real
和values[i]
处的->
取消引用未初始化。这就像你想要(结转单个阵列(values[i].real = ... ; values[i].imag = 0;