algorytm.org

Implementacja w C/C++



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Metoda Jacobiego - Implementacja w C/C++
Ocena użytkownikóww: *****  / 29
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 08 sierpnia 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

jacobi.c:
// Metoda Jacobiego
// www.algorytm.org
// (c) 2006 Tomasz Lubinski

#include "stdio.h"

float A[100][100];
float M[100][100];
float N[100];
float b[100];
float x1[100];
float x2[100];

int num, iter;
int i, j, k;

//only to avoid the following error:
//scanf: floating point formats not linked
static void forcefloat(float *p)
{
float f = *p;
forcefloat(&f);
}


void main()
{
   // Get n
   printf("Metoda Jacobiego\n");
   printf("Rozwiazywanie ukladu n-rownan z n-niewiadomymi Ax=b\n");
   printf("Podaj n\n");
   scanf("%d", &num);
   if ((num < 1) && (num > 100)) {
      printf("Nieprawidlowa warosc parametru n\n");
      return;
    }

   // Get values of A
   for (i=0; i<num; i++)
      for (j=0; j<num; j++) {
         printf("A[%d][%d] = ", (i+1), (j+1));
         scanf("%f", &A[i][j]);
         if ((i == j) && (A[i][j] == 0)){
           printf("Wartosci na przekatnej musza byc rozne od 0\n");
           return;
         }
      }

   // Get values of b
   for (i=0; i<num; i++) {
      printf("b[%d] = ", (i+1));
      scanf("%f", &b[i]);
   }

   // Calculate N = D^-1
   for (i=0; i<num; i++)
      N[i] = 1/A[i][i];

   // Calculate M = -D^-1 (L + U)
   for (i=0; i<num; i++)
      for (j=0; j<num; j++)
         if (i == j)
            M[i][j] = 0;
         else
            M[i][j] = - (A[i][j] * N[i]);

   //Initialize x
   for (i=0; i<num; i++)
      x1[i] = 0;

   printf("Ile iteracji algorytmu wykonac?\n");
   scanf("%d", &iter);

   for (k=0; k<iter; k++) {
      for (i=0; i<num; i++) {
         x2[i] = N[i]*b[i];
         for (j=0; j<num; j++)
            x2[i] += M[i][j]*x1[j];
      }
      for (i=0; i<num; i++)
         x1[i] = x2[i];
   }

   printf("Wynik\n");
   for (i=0; i<num; i++)
      printf("x[%d] = %f\n", (i+1), x1[i]);

   return;

}
Komentarze
photo
-41 # Michał13 2012-05-11 12:28
Witam, ma pan błąd w 78 linii,
jest:
x2 += M[j]*x1[j];
powinno być:
x2 += M[j]*x1[j];
Pozdrawiam
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-42 # Michał13 2012-05-21 10:54
ups M[j] powinno być, a nie M[j]:)
Małe przeliterowanie .
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz