【发布时间】:2017-05-10 13:32:59
【问题描述】:
我正在尝试在 C++ 中生成以下 2D 阶跃函数。
U 是 X 和 Y 的函数。X 从 0 到 2。Y 从 0 到 2
U(x,y) =2 for 0.5<= x <= 1 and 0.5<=y<=1
U(x,y) = 1 for everywhere else
基本上,它是一个 2 x 2 的正方形,在 (0.5
for (int j = 0; j<=ny; j++){
y[j] = j*dy;
for (int i = 0; i <=nx;i++){
x[i] = i*dx;
if(x[i]>=0.5 && x[i]<=1 && y[j]>=0.5 && y[j] <=1){
u0[j][i] = 2.0;
}
else{
u0[j][i] = 1.0;
}
}
}
显然,这是不正确的,因为这是我在绘制之后得到的 2d step function
我希望我的 If 语句不正确。有人可以帮我吗?
非常感谢。
更新:很抱歉造成混乱。 X 和 Y 只是坐标的计数器。下面是代码(直到我需要问的)所以希望所有变量都在那里。我应该在一开始就这样做。对不起
//Declaring variables
int nx = 5; //x steps
int ny = 5; // y steps
int nt = 10; //time steps
int c = 1; //constant
double dx = 2/double(nx-1);
double dy = 2/double(ny-1);
double sigma = 0.2;
double dt = sigma*dx;
double x[nx], y[ny]; //spatial vectors X and Y
double u[ny][nx]; //solution matrix
double u0[ny][nx]; //initial matrix
//Setting up initial conditions
for (int j = 0; j<=ny; j++){
y[j] = j*dy;
for (int i = 0; i <=nx;i++){
x[i] = i*dx;
if((x[i]>=0.5 && x[i]<=1) && (y[j]>=0.5 && y[j] <=1)){
u0[j][i] = 2.0;
}
else{
u0[j][i] = 1.0;
}
}
}
很多声明的变量稍后会用到,所以我不会在这里粘贴整个程序。感兴趣的变量是 X、Y、Nx、Ny、Dx、Dy 和 U0。所有定义的变量(Nx、Ny、Dx、Dy)都已正确定义并且没有问题(如带小数位的整数)。
【问题讨论】:
-
为什么是
x和y数组 (?) 而不是原始规范中的数字?i和j是什么? -
你确定dx, dy, Nx, Ny的定义没有错误吗?甚至与阴谋?我在您的代码中没有看到任何错误...
标签: c++ if-statement math logic inequality