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...