我正在尝试为poissons方程编写代码。我编写了代码,但是它给出了一个编译错误:'被调用的函数不是对象或函数指针。
#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));
被调用的函数不是对象或函数指针
答案 0 :(得分:0)
错误接近该行的结尾:
(2.0(Dx*Dx)+(Dy*Dy))
您需要2.0
和括号之间的运算符。
我猜你错过了*
?
注意:强>
我用gcc
编译了它,得到了更明确的错误信息:
错误:被叫对象'2.0e + 0'不是函数