这个
a
和
d
的尺寸和计算
overlap
不正确:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define BASISFUN 2
#define PI 3.14159265358979323846
void overlaps(double overlap[][BASISFUN], double d[][BASISFUN], double a[][BASISFUN])
{
overlap[0][0] = pow(d[0][0], 2.0) * pow((PI / (a[0][0] + a[0][0])), 1.5);
overlap[0][1] = d[0][0] * d[0][1] * pow((PI / (a[0][0] + a[0][1])), 1.5);
overlap[1][0] = d[1][0] * d[1][1] * pow((PI / (a[1][0] + a[1][1])), 1.5);
overlap[1][1] = pow(d[1][1], 2.0) * pow((PI / (a[1][1] + a[1][1])), 1.5);
printf("The Overlap Matrix is:\n");
for (int i = 0; i < BASISFUN; i++)
{
for (int j = 0; j < BASISFUN; j++)
{
printf("%.8f\t", overlap[i][j]);
}
printf("\n");
}
}
int main()
{
double A1 = 0.532149, A2 = 4.097728, D1 = 0.82559, D2 = 0.28317;
double a[BASISFUN][BASISFUN] = {{A1, A2}, {A1, A2}};
double d[BASISFUN][BASISFUN] = {{D1, D2}, {D1, D2}};
double overlap[BASISFUN][BASISFUN];
overlaps(overlap, d, a);
return 0;
}
打印
The Overlap Matrix is:
3.45667690 0.13067193
0.13067193 0.01903091
评论
-
为了提高一致性
2
到
BASISFUN
建议在几个(也许所有)地方。chux-恢复Monica
-
您也可以使用
long double
,如果需要,并根据的正确计算重写循环
重叠
.
编辑
只需为其指定适当的值,就可以将其进一步扩展到更高的维度
A[BASISFUN]
和
D[BASISFUN]
并相应地修改循环:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define BASISFUN 6
#define PI 3.14159265358979323846
void overlaps(
double overlap[][BASISFUN],
double d[][BASISFUN],
double a[][BASISFUN])
{
for (int i = 0; i < BASISFUN; i++)
{
overlap[i][i] = pow(d[i][i], 2.0) * pow((PI / (a[i][i] + a[i][i])), 1.5);
}
for (int i = 0; i < BASISFUN; i++)
{
for (int j = 0; j < BASISFUN; j++)
{
if (i != j)
{
overlap[i][j] =
d[i][j] * d[j][i] * pow((PI / (a[i][j] + a[j][i])), 1.5);
}
}
}
printf("The Overlap Matrix is:\n");
for (int i = 0; i < BASISFUN; i++)
{
for (int j = 0; j < BASISFUN; j++)
{
printf("%.8f\t", overlap[i][j]);
}
printf("\n");
}
}
int main()
{
double a[BASISFUN][BASISFUN];
double d[BASISFUN][BASISFUN];
double A[BASISFUN] = {0.532149, 4.097728, 0.00001, 0.00001, 0.00001, 0.00001};
double D[BASISFUN] = {0.82559, 0.28317, 0.00001, 0.00001, 0.00001, 0.00001};
for (int i = 0; i < BASISFUN; i++)
{
for (int j = 0; j < BASISFUN; j++)
{
a[i][j] = A[j];
d[i][j] = D[j];
}
}
double overlap[BASISFUN][BASISFUN];
overlaps(overlap, d, a);
return 0;
}
打印
The Overlap Matrix is:
3.45667690 0.13067193 0.00011842 0.00011842 0.00011842 0.00011842
0.13067193 0.01903091 0.00000190 0.00000190 0.00000190 0.00000190
0.00011842 0.00000190 0.00622558 0.00622558 0.00622558 0.00622558
0.00011842 0.00000190 0.00622558 0.00622558 0.00622558 0.00622558
0.00011842 0.00000190 0.00622558 0.00622558 0.00622558 0.00622558
0.00011842 0.00000190 0.00622558 0.00622558 0.00622558 0.00622558