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 » |