Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

C++ metoda Jacobba

Ostatnio zmodyfikowano 2020-06-02 19:55
Autor Wiadomość
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;
 
}
P-176952
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"
C/C++
#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;
   
}[ / i ]
P-176953
« 1 »
  Strona 1 z 1