Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » ulan 00:31
 » RaPToRR 00:22
 » metacom 00:21
 » zibi13 00:10
 » esteban 23:52
 » alkatraz 23:48
 » Menah 23:36
 » luckyluc 23:27
 » Wolf 23:25
 » selves 23:24
 » wrrr 23:24
 » fiskomp 23:14
 » Visar 23:10
 » Magnus 23:07
 » luzak2363 23:05
 » ToM78 22:50
 » Kool@ 22:48
 » doxent 22:44
 » tian 22:41
 » Logan 22:38

 Dzisiaj przeczytano
 36891 postów,
 wczoraj 25433

 Szybkie ładowanie
 jest:
włączone.

 
ccc
TwojePC.pl © 2001 - 2025
A R C H I W A L N A   W I A D O M O Ś Ć
    

[c++] Metoda Eliminacji Gauss'a według wzoru algorytmu z książki (załączony) - problem , Soulburner 21/08/08 13:56
Witam!

Muszę opanować rozwiązywanie układów równań metodą eliminacji Gauss'a. Posiadam wzór algorytmu z pewnej książki "Metody numeryczne" - niestety, więcej nic o niej nie wiem, bo mam tylko ksero kilku stron ;)

Idąc krok po kroku i spoglądając w program znajomego (który zapewne został żywcem ściągnięty z netu :P Prawdopodobnie stąd http://www.i-lo.tarnow.pl/...lg/zmzf/pages/006.php ), udało sprowadzić się macierz do postaci trójkątnej.

Problem zaczyna się jednak podczas próby obliczenia rozwiązania, czyli "iksów".

Najpierw może pokażę co siedzi w książce:
http://img507.imageshack.us/...?image=gaussjb7.jpg

A teraz czas na kod, który na tej podstawie wymęczyłem (siedzi w nim pełno głupawych cout'ów, które pomocne były przy sprawdzeniu, w której pętli się program wywalał):

http://daath.x.pl/kodzik.cpp

Bardzo proszę o wykazanie błędu i sugestie poprawienia. Gotowe fragmenty kodu też mile widziane, byle z komentarzem ;)

You must gather your party before
venturing forth.

  1. A gdzie masz wyliczenie xn? , JOTEM 21/08/08 18:31
    reszta się wylicza iteracyjnie z pierwszego x-a, a ten pierwszy jest w postaci:
    //x[n]=
    w Twoim programiku.
    Pzdr.

    Poryjemy..zrobaczymy

    1. ok, ale w książce , Soulburner 21/08/08 21:32
      fragment dotyczący xn jest podany "luzem", nie w pętli. Zamiana //x[n]= na
      x[n]= tabA[n][n+1] / tabA[n][n];
      nie pomaga w obliczeniach - iksy wciąż wychodzą zerowe :/

      You must gather your party before
      venturing forth.

      1. No pewnie ze luzem , JOTEM 22/08/08 00:05
        i tak ma być - to rekurencyjne liczenie poza pierwszym elementem - ten jest wyliczany jawnie i poza pętlą.
        Można włączyć do pętli, ale trzeba indeksy odpowiednio rozszerzyć.

        Poza tym, Twoja książka ma błąd i Twój kod ma inne jeszcze błędy. Analizuję ten starszy kod:
        - brak wyliczeń pierwszego wyrazu (xn)
        - błąd w książce w pętli
        jest for (p=i+1; p<=1; p++)
        powinno być for (p=i+1; p<=n-1; p++)
        - zastanów się, czy pętle mają być od i=1 do n czy od i=0 do n-1
        bo jesteś niekonsekwentny (w książce masz np od 1 do n-1, a Ty używasz od 0 do n-1 - jeden obieg za dużo).

        To tyle - popraw, to zadziała.

        Poryjemy..zrobaczymy

    2. ok, coś tam wymodziłem i nawet działa, tylko , Soulburner 21/08/08 23:06
      wyniki zaokrągla do liczb całkowitych, podczas gdy liczenie na piechotę daje np.
      x3 = 2,8
      zaś program wyświetla x3 = 3

      Tutaj zmodyfikowany kod programu: http://daath.x.pl/kodzik2.cpp

      Ciekawostka - mityczny //x[n]= okazał się zbędny, bo... czy linijka:
      x[n-1] = tabA[n-1][n] / tabA[n-1][n-1]; //jak widać, trochę inna niż w poście wyżej
      jest, czy jej nie ma, wyniki wszystkie są :P

      You must gather your party before
      venturing forth.

      1. Tak mniej więcej , JOTEM 22/08/08 00:30
        krytyczny fragment po poprawnym przeindeksowaniu z książki z indeksowanie pascalowym (1..n) do indeksowania c++(0..n-1):

        x[n-1] = (tabA[n-1][n] - w) / tabA[n-1][n-1];
        for (i=n-2; i>=0; i--)
        {
        double w=0;
        for (p=i+1; p<n; p++)
        {
        w = w + tabA[i][p] * x[p];
        }
        x[i] = (tabA[i][n] - w) / tabA[i][i];
        }

        Poryjemy..zrobaczymy

        1. nie usunałem w z x(n-1) , JOTEM 22/08/08 00:32
          x[n-1] = tabA[n-1][n] / tabA[n-1][n-1];

          Poryjemy..zrobaczymy

    
All rights reserved ® Copyright and Design 2001-2025, TwojePC.PL