0 Daumen
136 Aufrufe

Bei der Verarbeitung von n×n-Matrizen, bei denen viele Eintrage gleich 0
sind, ist es fur große n sinnvoll, statt eines 2-dimensionalen Arrays mit
Eintr¨agen vom Typ double drei eindimensionale Arrays zu verwenden.
Genauer verwendet man fur eine quadratische Matrix mit ¨ m Eintr¨agen,
die ungleich 0 sind,
• ein Array I vom Typ int fur die Zeilennummern der Eintr age ungleich 0,
• ein Array J vom Typ int fur die Spaltennummern der Eintrage ungleich 0 und
• ein Array W vom Typ double fur die Eintrage ungleich 0.
Fur die Matrix
M =

2.5 0.0 1.3
0.0 0.0 2.7
1.2 0.0 0.0

mit m = 4 wurde man zum Beispiel die folgenden drei eindimensionalen ¨
Arrays erhalten:


• I = [1, 1, 2, 3]
• J = [1, 3, 3, 1]
• W = [2.5, 1.3, 2.7, 1.2]

schreiben Sie ein Programm, welches eine Funktion/Methode implementiert, welche zwei n × n-Matrizen, die jeweils als drei ein dimensionale Arrays vorliegen, miteinander multipliziert. Das Produkt derbeiden Matrizen soll wieder direkt in drei ein dimensionalen Arrays abgelegt werden.


for(i=0;i<n;i++)
  {
      for(j=0;j<n;j++)
      {
        if(a[i][j]!=0)
                      {
              I1[k]=i;
              J1[k]=j;
              W1[k]=a[i][j];
              k++;
          }

      }
  }

for(i=0;i<n;i++)
  {
      for(j=0;j<n;j++)
      {
        if(b[i][j]!=0)
          {
              I2[m]=i;
              J2[m]=j;
              W2[m]=b[i][j];
              m++;
          }

  }
  }

      l=n*n;
  int p = 1;
  auto start = high_resolution_clock::now();
      printf("\noutput of c \nThe values of C are \n");
      ;
      for (int f = 0; f<l ; f++)
      {
          W3[f]=0;
      }

      for (int f =0; f<k ; f++)
      {
          for (int g=0; g<m; g++)
          {
              if (J1[f] == I2[g])
              {
                  int z=0;
                  for(int a = 0 ; a<p ; a++)
                  {
                      if((I1[f]==I3[a])&& (J2[g]== J3[a]))
                      {
                          W3[a]+=W1[f] * W2[g];
                          z++;
                      }
                  }
                  if(z == 0)
                  {
                      I3[p]=I1[f] ;
                      J3[p]=J2[g] ;
                      W3[p]=W1[f]*W2[g];
                      p++;
                  }
              }
          }
      }


erst diese program geht nur für 100 n zahl. uber 100 diese Programm rennt nicht.

kann ich die program mit einer anderen methoden schaffen?

Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community