C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++で対角的に優勢な行列?


すべての行列行について、その行の対角要素の大きさが、その行の他のすべての非対角要素の大きさの合計以上である場合、その行列は対角的に支配的な行列であると言われます。

まず、行列の次元を表す値3の定数int変数Nを定義しましょう。

const int N = 3;

isDDM(int mat [N] [N]、int n)は、行列と行列のサイズのコピーを取得するブール関数です。内部では、ネストされたforループを使用して、行列の行と列を繰り返します。次に、各列の各行の合計を見つけて、合計変数に追加します。

bool isDDM(int mat[N][N], int n){
for (int i = 0; i < n; i++){
   int sum = 0;
   for (int j = 0; j < n; j++)
      sum += abs(mat[i][j]);

次に、現在の合計から対角要素の合計を削除します。

sum -= abs(mat[i][i]);

次に、対角要素のいずれかが合計よりも小さいかどうかを確認します。それらのいずれかが合計よりも小さい場合は、falseを返し、ループと関数を終了します。それ以外の場合は、ループの完了後、どの要素も合計よりも小さいものがないため、trueを返します。

bool isDDM(int mat[N][N], int n){
for (int i = 0; i < n; i++){
   int sum = 0;
   for (int j = 0; j < n; j++)
      sum += abs(mat[i][j]);
      sum -= abs(mat[i][i]);
   if (abs(mat[i][i]) < sum)
      return false;
   }
   return true;
}

最後に、戻り値に基づいて、それが対角的に優勢な行列であるかどうかをメイン関数で表示します。

if(isDDM(mat,matSize)){
   cout << "yes,its a diagonally dominant matrix";
} else {
   cout << "NO, its not a diagonally dominant matrix";
}

次の実装を見て、行列が対角的に優勢であるかどうかを確認しましょう。

#include <iostream>
const int N = 3;
using namespace std;
bool isDDM(int mat[N][N], int n){
   for (int i = 0; i < n; i++){
      int sum = 0;
      for (int j = 0; j < n; j++)
         sum += abs(mat[i][j]);
         sum -= abs(mat[i][i]);
         if (abs(mat[i][i]) < sum)
            return false;
   }
   return true;
}
int main(){
   int matSize = 3;
   int mat[N][N] = {
      { 3, -2, 1 },
      { 1, -3, 2 },
      { -1, 2, 4 }
   };
   if(isDDM(mat,matSize)){
      cout << "yes,its a diagonally dominant matrix";
   } else {
      cout << "NO, its not a diagonally dominant matrix";
   }
   return 0;
}

出力

上記のコードは次の出力を生成します-

yes,its a diagonally dominant matrix

  1. C++のスパイラルマトリックスIII

    R行とC列の2次元グリッドがあるとすると、東向きの(r0、c0)から開始します。ここで、グリッドの北西の角は最初の行と列にあり、グリッドの南東の角は最後の行と列にあります。このグリッドのすべての位置を訪問するために、時計回りのスパイラル形状で歩きます。グリッドの境界の外側にいるときは、グリッドの外側を歩き続けます(ただし、後でグリッドの境界に戻る場合があります)。グリッドの位置を表す座標のリストを、訪問した順序で見つける必要があります。したがって、グリッドが-のような場合 次に、矢印がパスになります。 これを解決するには、次の手順に従います- dirrを作成:=[[0,1]、[

  2. C ++の合計配列パズル?

    ここでは、配列に関連する1つの興味深い問題を確認します。 n個の要素を持つ配列があります。 n個の要素の別の配列を作成する必要があります。ただし、2番目の配列のi番目の位置は、i番目の要素を除く最初の配列のすべての要素の合計を保持します。そして、1つの制約は、この問題では減算演算子を使用できないことです。 減算演算を使用できれば、すべての要素の合計を取得し、最初の配列のi番目の要素を減算して、2番目の配列のi番目の場所に格納することで、この問題を簡単に解決できます。 ここでは、毎回要素を追加することでこれを解決し、0..n-1のiについては、位置iの要素を無視します。ポイントを得るためのア