我遇到了矩阵问题。我希望有一个简单的矩阵,并根据其他值赋值。
我想要......像这样:
i --> // i is my x-value and j my y-value in the matrix
j 25 25 25 25 25 // inital condition values
| 27 26 25 .. .. // filling the matrix with values depending on a
v 31 28 .. .. .. // border condition, the inital values and neighbour values.
.. .. .. .. .. //and so on
我尝试用代码解释它:
首先我定义一些变量和一个矩阵,如
int Matrix[10][1000]; //<-- i´m not sure how to implement a dynamical matrix correctly
// so i just defined its size like this
int i = 0;
int j = 0;
int iter=0;
int Iterator=1000;
在下一步中,我想用Zero填充矩阵,如:
for (i = 0; i <= size_X; i++) {
for (j = 0; j <= size_Y; j++) {
Matrix[i][j] = 0;
}
}
但它在这里给我这个错误“访问违规写入位置0x00900B0C”但是......我不明白为什么?
此外,我的代码看起来像是用初始值填充矩阵的第一行:
for (i = 0; i <= Size_X; i++) {
Matrix[i][0] = 25;
但我想的主要问题是,我的代码的主要部分是迭代并引用矩阵中的neigbour单元格填充矩阵的其他单元格:
do {
for (j = 1; j <= Size_Y; j++) {
Matrix[0][j] = Matrix[0][j - 1] + Fo*0.5*(2.0*Bi*(Umgebungstemperatur - Matrix[0][j - 1]) + 2.0*(Matrix[0 + 1][j - 1] - Matrix[0][j - 1]**) + 2.0*Bi*(Umgebungstemperatur - Matrix[0][j]) + 2.0*(Matrix[0 + 1][j] - Matrix[0][j]));
Matrix[Size_X][j] = Matrix[Size_X][j - 1] + Fo*0.5*(2.0*Bi*(Umgebungstemperatur - Matrix[Size_X][j - 1]) + 2.0*(Matrix[Size_X - 1][j - 1] - Matrix[Size_X][j - 1]) + 2.0*Bi*(Umgebungstemperatur - Matrix[Size_X ][j]) + 2.0*(Matrix[Anzahl_dx- 1][j] - Matrix[Size_X][j]));
for (i = 1; i < Size_X; i++) {
Matrix[i][j] = Matrix[i][j - 1] + Fo*0.5*(Matrix[i - 1][j - 1] - 2.0*Matrix[i][j - 1] + Matrix[i + 1][j - 1] + Matrix[i - 1][j] - 2.0*Matrix[i][j] + Matrix[i + 1][j]);
}
}
iter = iter + 1;
} while (iter != Iterator);
}
最后我只想将矩阵写入.txt或.csv文件,但它只是给了我第一行的正确值,程序就破坏了。
答案 0 :(得分:1)
size_X和size_Y是什么? (我在评论中问道)
只是矩阵的大小 - &gt; size_X = 11和size_Y = 1001(来自Mattis Seehaus的评论)
所以在这个循环中:
for (i = 0; i <= size_X; i++) {
for (j = 0; j <= size_Y; j++) {
Matrix[i][j] = 0;
}
}
您将尝试访问Matrix[11][1001]
。这是在您的阵列之外,因此违反了访问权限。数组的最后一个元素是Matrix[9][999]
。所以在索引它时不要超过它。
通常你会这样做:
size_X = 10;
size_Y = 1000;
并将循环更改为:
for (i = 0; i < size_X; i++) { // Just < instead of <=
for (j = 0; j < size_Y; j++) { // Just < instead of <=
Matrix[i][j] = 0;
}
}
这同样适用于其他for
循环。
你也有这个:
Matrix[Size_X][j] = Matrix[Size_X][j - 1] + Fo*0.5*(
^^^^^^
// Again this is an access violation.
另一次访问违规:
for (i = 1; i < Size_X; i++) {
Matrix[i][j] = Matrix[i][j - 1] + Fo*0.5*(Matrix[i - 1][j - 1] - 2.0*Matrix[i][j - 1] + Matrix[i + 1][j - 1] + Matrix[i - 1][j] - 2.0*Matrix[i][j] + Matrix[i + 1][j]);
^^^^^
// Again this is an access violation.
}
答案 1 :(得分:0)
您无法显示size_X
和size_Y
的定义位置。
这也超出了界限:
for (i = 0; i <= size_X; i++) {
for (j = 0; j <= size_Y; j++) {
Matrix[i][j] = 0;
}
}
在迭代循环时,您应该使用<
而不是<=
。