1x1 2x2 および 3x3 でこれらを見つける方法は知っていますが、マトリックスの次元を入力してから、マトリックスに入る数値を入力できるプログラムを作成したいと考えています。数値を入力した後、行列の定値 (取得できる場合) と逆行列を指定したいのですが、次元部分をどのように移動するかわかりません。これを始める良い方法は何ですか?どのヘッダーを使用すればよいですか? 私は Linux で実行しているので、Windows のようなヘッダーはありません。:)
2 に答える
それを行う簡単な方法は、Eigenのようなライブラリを使用することです。
あなたが本当にそれを自分でやりたいのなら、あなたはしなければなりません
- メモリ内でマトリックスを表現する方法を決定し、
- 定義に従って行列を読み取って保存するコードを記述し、
- 定義に従って行列の逆行列式を計算するコードを記述します。
明らかに、2。と3.は、1。の選択に依存します。適切な表現を見つけることは簡単ではなく、アプリケーションによって異なります。たとえば、行列の大きさや、スパースか密かなどです。
効率を気にしない場合、または行列が小さいと仮定する場合は、行列を1次元ベクトルとして表現することをお勧めします。たとえば、4x4の行列がある場合、長さ16のベクトルを割り当てることができます。
私があなたの質問を正しく理解した場合、あなたは実際にそれを動的に(実行時に)行う方法について質問していました。配列を使用すると、次のようになります。
double* yourMatrix
yourMatrix = new double[columnCount * rowCount];
これにより、sにスペースが動的に割り当てられcolumnCount * rowCount
double
、静的配列のようにそのメモリにアクセスできるようになります。完了したら、delete[] yourMatrix
メモリリークを防ぐ必要があります。
行列式/逆行列式を紙で計算する方法を知っている場合は、ここから実行できるはずです。
線形代数の本を選ぶことから始めます。ギルバート・ストラングのもの。素敵な物語の本のように読めます。LU分解を経て、固有値と固有ベクトルに進みます。途中のどこかで、両方の質問に対する答えを見つけたでしょう。