-1

私は、データを格納するために非常に大きな配列 ([1 000 000] 要素で構成される配列) を必要とする私の学士号のために、C で記述された FEM プログラムに取り組んでおり、それらを操作しています。同様の異常に巨大なサイズを持つ 2D 配列も使用します ([100 000][100 000] など)。

プログラムはエラーを表示せずに終了します。プログラムが (大きな 2D 配列を使用する) メッシュを生成するためのルーチンを実行しようとすると、プログラムがクラッシュすることがわかっています。

4

2 に答える 2

3

このような大きなサイズに達した場合、マトリックスに実際に 100 000 x 100 000 の要素があるかどうか、またはそれらのほとんどが null であるかどうかを考える必要があります。ほとんどがゼロの場合は、疎行列を使用する必要があります。これにより、メモリの使用が軽減されるはずです。

その後、行列分解 ( lower upperなど) を使用してシステムを解決してみてください。好みの言語で実装を見つけることができるはずです。

このような大規模なシステムに興味を持っている人は他にもいますので、彼らがどのようにそれを行ったかを試してみて、近似/反復ソルバーを活用してください。

于 2016-10-06T09:14:30.923 に答える
2

64 ビット モードでコンパイルする場合、gcc も Clang も、配列をヒープに割り当て、要素数が int の容量を超えることを覚えていれば、このような大きな配列で問題は発生しません。そう:

#define MATRIXSIZE (100*1000L)
typedef float row_t[MATRIXSIZE];
row_t *matrix = calloc(MATRIXSIZE, sizeof(*matrix));
for (int i = 0; i<MATRIXSIZE; i++)
    matrix[i][i] = 1.0f;

ただし、多くの使用可能なメモリが必要です。

于 2016-10-06T09:28:07.953 に答える