Eliminacja gaussa - porównanie dwóch kodów

0

Napisalem taki kod w c#, gdzie w przykladowej macierzy ostatnia kolumna to kolumna wyrazow wolnych.

int n = 3;
double[,] macierz = { { -1, 2, 1, -1 }, { 1, -3, -2, -1 }, { 3, -1, -1, 4 } };
 for (int i = 0; i < n - 1; i++)
 {
      for (int j = i + 1; j < n; j++)
     {
          double mnoznik = macierz[j, i] / macierz[i, i];
          for (int k = i; k < n + 1; k++)
         {
              macierz[j, k] -= macierz[i, k] * mnoznik;
         }
     }
}
 

I fajnie, liczy dobrze ale w miedzyczasie znalazlem taki kod w C++:

AB = new double * [n];

for(i = 0; i < n; i++) 
   AB[i] = new double[n + 1];

  for(i = 0; i < n; i++)
    for(j = 0; j <= n; j++) 
       cin >> AB[i][j];
...

for(i = 0; i < n - 1; i++)
{
    for(j = i + 1; j < n; j++)
    {
      m = -AB[j][i] / AB[i][i];
      for(k = i + 1; k <= n; k++)
         AB[j][k] += m * AB[i][k];
    }
  }

 

No i tutaj mam WTF dlaczego w tym kodzie C++ w najbardziej wewnetrznej petli jest k=i+1 ?
Porownuje te kody z pol godziny i nie widze zadnej innej roznicy, a jak u siebie dam k=i+1 to liczy zle.

Dla tych samych danych oba te algorytmy daja te same, dobre wyniki wiec ja nie wiem o co chodzi...

0

Bo autor kodu w C++ rozumie że nikogo nie obchodzi jeżeli po przekątnej macierzy będą jakieś śmieci zamiast zer.

1 użytkowników online, w tym zalogowanych: 0, gości: 1