C++ metoda Jacobba
Ostatnio zmodyfikowano 2020-06-02 19:55
| dumki1monki1 Temat założony przez niniejszego użytkownika | C++ metoda Jacobba » 2020-06-02 19:02:36 Wie ktoś może gdzie tu mam błędy ? i czy by ktoś mi poprawił ?
 
 
 
 #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[j]);
 if ((i == j) && (A[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);
 }
 
 // Calculate N = D^-1
 for (i=0; i<num; i++)
 N = 1/A;
 
 // Calculate M = -D^-1 (L + U)
 for (i=0; i<num; i++)
 for (j=0; j<num; j++)
 if (i == j)
 M[j] = 0;
 else
 M[j] = - (A[j] * N);
 
 //Initialize x
 for (i=0; i<num; i++)
 x1 = 0;
 
 printf("Ile iteracji algorytmu wykonac?\n");
 scanf("%d", &iter);
 
 for (k=0; k<iter; k++) {
 for (i=0; i<num; i++) {
 x2 = N*b;
 for (j=0; j<num; j++)
 x2 += M[j]*x1[j];
 }
 for (i=0; i<num; i++)
 x1 = x2;
 }
 
 printf("Wynik\n");
 for (i=0; i<num; i++)
 printf("x[%d] = %f\n", (i+1), x1);
 
 return;
 
 }
 | 
|  | 
| dumki1monki1 Temat założony przez niniejszego użytkownika | c++ metoda Jacoba » 2020-06-02 19:55:36 tutaj mam lepiej napisane ale gdy włączam  pisze że tam kolumna ma 14 tych wierszy i zaczynam A[1][1] od ZERA to błąd jest "Wartość musi być różna od 0"  #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;
 
 
 
 static void forcefloat( float * p )
 {
 float f = * p;
 forcefloat( & f );
 }
 
 
 void main()
 {
 
 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;
 }
 
 
 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;
 }
 }
 
 
 for( i = 0; i < num; i++ ) {
 printf( "b[%d] = ",( i + 1 ) );
 scanf( "%f", & b[ i ] );
 }
 
 
 for( i = 0; i < num; i++ )
 N[ i ] = 1 / A[ i ][ i ];
 
 
 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 ] );
 
 
 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;
 
 }[ / i ]
 | 
|  | 
| « 1 » |