我正在尝试编写泊松方程的代码。我已经编写了代码,但它给出了“被调用函数不是对象或函数指针”的编译错误。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main(int argc, char* argv[])
{
int U[101][101];
int Unew[101][101];
double Nx = 100, Ny = 100;
float tol = 0.00001;
float L = 2.0;
int i, j;
float pi = 3.14;
float Dx, Dy, x, y;
Dx = (L / Nx) + 1;
Dy = (L / Ny) + 1;
for(i = 1; i <= 101; i++) {
for(j = 1; j <= 101; j++) {
}
}
x = (i - 1) * Dx;
y = (j - 1) * Dy;
for(i = 1; i <= 101; i++) {
for(j = 1; j <= 101; j++) {
U[i][j] = 0.0;
}
}
for(i = 1; i <= 101; i++) {
U[i][1] = 0.0;
}
for(j = 1; j <= 101; j++) {
U[101][j] = 0.0;
}
for(i = 1; i <= 101; i++) {
U[i][j] = 0.0;
}
double iter;
double residual;
for(iter = 1; iter <= 10000; iter++) {
for(i = 2; i <= 101; i++) {
for(j = 2; j <= 101; j++) {
Unew[i][j] = (Dy * Dy * (U[i - 1][j] + U[i + 1][j]) + Dx * Dx * (U[i][j - 1] + U[i][j + 1]) -
Dx * Dx * Dy * Dy * (cos(pi * Dx) * sin(pi * Dy) + pi * pi * cos(pi * Dx) * sin(Dy))) /
(2.0(Dx * Dx) + (Dy * Dy));
}
}
if(Unew[i][j] - U[i][j] <= tol)
break;
else {
iter = iter + 1;
}
U[i][j] = Unew[i][j];
}
}
报错
Unew[i][j]=(Dy*Dy*(U[i-1][j]+U[i+1][j])+Dx*Dx*(U[i][j-1]+U[i][j+1])-Dx*Dx*Dy*Dy*(cos (pi*Dx)*sin(pi*Dy)+pi*pi*cos(pi*Dx)*sin(Dy)))/(2.0(Dx*Dx)+(Dy*Dy));
called function is not an object or function pointer
最佳答案
错误位于行尾附近:
(2.0(Dx*Dx)+(Dy*Dy))
您需要在 2.0
和括号之间添加一个运算符。
我猜你缺少一个*
?
注意:
我用gcc
编译它并得到了更清晰的错误消息:
error: called object '2.0e+0' is not a function
关于编译错误(调用的函数不是对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33516807/