[C++] Metoda Jacobiego

józef92
Użytkownik
Użytkownik
Posty: 660
Rejestracja: 13 gru 2008, o 21:01
Płeć: Mężczyzna
Lokalizacja: Bolesławiec
Podziękował: 263 razy
Pomógł: 3 razy

[C++] Metoda Jacobiego

Post autor: józef92 »

Witam

Muszę obliczyć taki układ równań:

macierz TAB:

Kod: Zaznacz cały

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0.89 0.98 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 0 -0.43 0.15 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0.43 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 -1 -0.89 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 -0.98 0 0 0.83 0.98 0 0 0 0 0 0 0 0 0
0 0 0 -0.15 -1 0 -0.55 0.15 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 -0.15 -1 0 0 -0.15 0 0 0 0 0
0 0 0 0 0 0 0.55 0 1 0.55 0 0 0 0 0 0 0
0 0 0 0 0 -1 -0.83 0 0 0.83 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 -0.83 0 -0.98 0 0 0 0.98 0
0 0 0 0 0 0 0 0 0 -0.55 0 0.15 -1 0 0 -0.15 0
0 0 0 0 0 0 0 0 0 0 0 0 0 -0.89 0 -0.98 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 -0.43 0 0.15 -1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
macierz B:

Kod: Zaznacz cały

-21.875
15
-15
0
25
0
0
0
0
0
0
0
20
0
0
0
-23.125
Oto mój kod:

Kod: Zaznacz cały

#include<iostream>
#include<cstdio>
#include<fstream>
#include<math.h>

using namespace std;

int main()
{
    const int W=17,K=17;
    //Wczytywanie danych do tablicy!
    double tab[17][17];
    int i,j;

    ifstream plik;
    plik.open("plik.txt");

    if(plik.good()==true)
    {
        for(j=0;j<K;j++)
        {
           for(i=0;i<W;i++)
           {
              plik>>tab[j][i];
           }
        }
    plik.close();
    }
    else
    {
        cout<<"Nie mozna otworzyc pliku!";
        return -1;
    }

    for(i=0;i<W;i++)
    {
        cout<<""<<endl;
        for(j=0;j<K;j++)
        {
            if(i==j) cout<<""<<tab[i][j];
        }
    }
//koniec wczytywanie, teraz metoda Jacobbiego
double s; double w; double X[W]; double B[W]; double XX[K];
cout<<"Wprowadz dane"<<endl;

for(i=0;i<W;i++)
{
    cin>>w;
    B[i]=w;
}

for(i=0;i<W;i++) {X[i]=0;XX[i]=1;}
for(int k=0;k<5;k++)
{


for(i=0;i<17;i++)
{
    double s=0;
    for(j=0;j<K;j++)
    {
        if(j!=i) s+=tab[i][j]*XX[j];
    }
    X[i]=(B[i]-s)/(tab[i][i]);
    XX[i]=X[i];
}
}
//for(i=0;i<W;i++) cout<<""<<X[i]<<endl;
             std::ofstream wynik("wynik.txt");
         for(i=0; i<W; i++)
         {

           wynik<<X[i]<<""<<"

";;
         }

getchar();
return 0;
    }
Cały czas zwraca mi bzdurne wyniki kiedy np. Matlab daje poprawne rozwiązanie czy inny program ze stronki z Tarnowa ( eliminacja gaussa )

Oto prawidłowe wyniki:

Kod: Zaznacz cały

 -21.8750
   15.0000
   34.5783
  -46.7089
   10.1313
   45.7747
  -14.9641
  -34.0352
   10.2112
   -3.6017
   36.3439
  -34.0396
  -17.5615
   40.8407
         0
  -37.0900
  -23.1250
Proszę o podpowiedź co robię źle
Ostatnio zmieniony 25 mar 2012, o 14:03 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
ODPOWIEDZ