[C++] Metoda eliminacji Gaussa

NCaro
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 8 cze 2010, o 19:23
Płeć: Kobieta
Lokalizacja: Somewhere
Podziękował: 1 raz

[C++] Metoda eliminacji Gaussa

Post autor: NCaro »

Witam
Jako projekt mam napisać program, który rozwiązuje układ równań liniowych metodą eliminacji Gaussa. Mam taki kod (zapewne jest beznadziejny, ale mi nie zależy na tym, żeby był funkcjonalny, ja chcę to tylko zdać; równania oblicza, raczej dobrze; wkleję samą funkcję liczącą rozwiązującą podany układ)

Kod: Zaznacz cały

void gauss(double **t, double *b, int n){
    for (int i=1; i<=n-1; i++)
    for (int j=i+1; j<=n; j++)
    {
      for (int k=i+1; k<=n; k++)
          t[j-1][k-1] -= t[i-1][k-1]*t[j-1][i-1]/t[i-1][i-1];
    b[j-1] -= b[i-1]*t[j-1][i-1]/t[i-1][i-1];
    }
  b[n-1] /= t[n-1][n-1];
  double s=0;
  for (int i=1; i<=n-1; i++){
    for (int j=n+1-i; j<=n; j++)
      s += t[n-i-1][j-1]*b[j-1];
    b[n-i-1] = (b[n-i-1] - s)/t[n-i-1][n-i-1];
  }
}
Mój problem polega na tym, że funkcja na pewno wyłoży się, jeśli wprowadzi się układ bez rozwiązań albo też z nieskończoną ilością rozwiązań, nie mam jednak pojęcia, w którym miejscu wrzucić warunki i, przede wszystkim, jak te warunki mają wyglądać.
Mam nadzieję, że ktoś, kto to ogarnia, będzie miał chęć mi pomóc.
Z góry dziękuję
Pozdrawiam
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[C++] Metoda eliminacji Gaussa

Post autor: witekkq »

Przedewszystkim musisz sprawdzać czy na diagonali nie masz wartości zerowej, jeśli tak to musisz spróbować zmienić kolejność równań (partial pivoting) lub też możesz również rozważyć zmienne kolejnośći wierszy i kolumn, jednak w tym przypadku strasznie skomlikuje Ci to program gdyż później będziesz musiała powrócić do postaci pierwotnej z zmiennymi.
NCaro
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 8 cze 2010, o 19:23
Płeć: Kobieta
Lokalizacja: Somewhere
Podziękował: 1 raz

[C++] Metoda eliminacji Gaussa

Post autor: NCaro »

Dzięki za odpowiedź.
To wiem, tyle że nie chciałabym za bardzo ingerować w cały kod programu, bo jestem totalnym imbecylem, jeśli chodzi o programowanie (o parę innych spraw również) i tego po prostu nie widzę. Jestem ciekawa, czy mogę gdzieś w ten konkretny kod wpisać jakieś warunki, żeby wyświetlało odpowiedni komunikat (Nieskończenie wiele/Brak rozwiązań).
Pozdrawiam
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[C++] Metoda eliminacji Gaussa

Post autor: witekkq »

na moje jednym warunkiem nie...



musisz sprawdzić czy macierz jest nie osobliwa żeby wiedzieć czy jest rozwiązywalna
i sprawdzić rząd macierzy w stosunku do liczby zmiennych, w celu sprawdzenia czy jest nieskończona ilość rozwiązań

jedynie t[i-1][i-1] w kodzie powyżej możesz sprawdzać czy jest 0, ale warunek sprawdza tylko czy program się wysypie a nie że nie ma rozwiązania
NCaro
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 8 cze 2010, o 19:23
Płeć: Kobieta
Lokalizacja: Somewhere
Podziękował: 1 raz

[C++] Metoda eliminacji Gaussa

Post autor: NCaro »

Czyli mam trochę przewalone. Dzięki wielkie
Pozdrawiam
wojtek_b_8
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 14 cze 2012, o 20:16
Płeć: Mężczyzna
Lokalizacja: Kraków

[C++] Metoda eliminacji Gaussa

Post autor: wojtek_b_8 »

Witam.
Mam na zadanie zrobić schemat blokowy algorytmu eliminacji Gaussa, już się z tym uporałem, ale muszę jeszcze wyznaczyć jego złożoności pamięciowe i czasowe dla przypadku optymistycznego, pesymistycznego i średniego. Z tym mam problem. Kompletnie nie wiem jak się za to zabrać. Proszę o pomoc i jenocześnie z góry dziękuję.
Awatar użytkownika
steal
Użytkownik
Użytkownik
Posty: 1043
Rejestracja: 7 lut 2007, o 18:35
Płeć: Mężczyzna
Lokalizacja: Białystok|Warszawa
Podziękował: 6 razy
Pomógł: 160 razy

[C++] Metoda eliminacji Gaussa

Post autor: steal »

Wystarczy poszukać w Google: ... m_lato.pdf
ODPOWIEDZ