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

Odpowiedz Nowy wątek
2014-12-30 01:12
Krwawy Młot
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...

Pozostało 580 znaków

2014-12-30 08:02
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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