我试图在C(大学物理问题)中对电线上的简单电压分布进行建模。我在使用数组设置边界条件时遇到问题,我需要将线的边缘(想象一下2d网格的边界)设置为0.我还需要设置两个正方形(网格内的线芯)分别为10和-10。
我遇到的编程问题是我收到错误:从类型double[30][15]
分配到类型int
时出现不兼容的类型,我将数组(2d网格)设置为一个30 * 15的双倍,所以我不确定为什么会这样做?
这是我定义数组和计数器:
int i,j,h;
double Vnew[30][15],Vold[30][15];
这就是我试图设置边界条件的方法(只是我得到这个错误的位置)
if ((i == 0 || 30) && j==j){Vnew=0;}
if ((j == 0 || 15) && i==i){Vnew=0;}
if ((6<=i<=9) && (6<=j<=9)){Vnew=-10;}
if ((21<=i<=24) && (6<=j<=9)){Vnew=10;}
答案 0 :(得分:2)
if((i == 0 || 30)&amp;&amp; j == j){Vnew = 0;}
首先:|| 30
没有做你认为它做的事情(它做的是30总是评估为真,因为它不是零),
它可能应该是i == 0 || i == 30
还有:
Vnew=0;
你不能像这样为数组赋值。您需要使用索引(例如Vnew[i][j]=..
)。请查阅有关如何在C中使用数组的基础知识。
此
(6<=i<=9)
也不好,需要使用6<=i && i<=9
答案 1 :(得分:1)
您需要指定
Vnew[i][j] = ...
和
Vold[i][j] = ...
答案 2 :(得分:0)
使用struct数组可能有助于简化表示法。例如......
typedef struct {
double new;
double old;
}V;
V v[30][15];
int main(void)
{
int i, j;
for(i=0;i<30;i++)
{
for(j=0;j<15;j++)
{
if(((i==0)||(i==29)) && ((j==0)||(j==14)))
{
v[i][j].new=0;
}
...// and so on.
另请注意,逻辑运算符&amp;&amp; amp;和||使用。
此外,数组索引从0开始,以数组大小结束 - 1.
例如:给定
int array[4][3];
在嵌套for循环中,使用int i,j,索引将分别从0到3和0到2循环遍历数组。 (在您的代码示例中,您将显示索引大小为30和15的数据。)