 |
|
 |
| Precedente :: Successivo |
Autore |
Messaggio |
|
|
maris.p Novizio
Registrato: 30/10/09 12:27 Messaggi: 9
|
Inviato: Mer Dic 02, 2009 7:18 pm Oggetto: Metodo di jacobi |
|
|
Ho un grosso problema con il metodo di jacobi. Ecco la traccia:
calcolare con il metodo di Jacobi la soluzione, accurata entro la tolleranza, del sistema Ax=b. Ecco il codice che ho scritto, ma il risultato non va..
qualcuno può aiutarmi??? Grazie mille
| Codice: |
#include<iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define EPS 0,00001 //tolleranza
#define MAXINTER 100000 //numero max di interazioni
using namespace std;
const int MAX_DIM = 10;
void leggi(double A[MAX_DIM][MAX_DIM],int &dim);
void leggi_b(int dimensione, double b[]);
void stampa(double A[MAX_DIM][MAX_DIM], double x[MAX_DIM], int dim);
int jacobi(double A[MAX_DIM][MAX_DIM], double b[MAX_DIM],int dim)
{
int i,j;
int flag=0;
double sum;
double X[MAX_DIM];
for( i=0; i<dim; i++){
X[i]=b[i]/A[i][i];
}
while(EPS && flag < MAXINTER)
{
for(i=0;i<dim;i++){
b[i]=X[i];
sum=b[i];
for(j=0;j<dim;++j)
if(j!=i)
sum-=A[i][j]*b[j];
X[i]=sum/A[i][i];
for (i=0;i<dim;i++)
if(fabs(X[i]- b[i])>fabs(X[i])*EPS)
++flag;
}
}
}
void leggi( double A[MAX_DIM][MAX_DIM], int &dim)
{
int i,j;
cout << "Inserire la dimensione della matrice: ";
cin >> dim;
for( i=0; i<dim; i++)
for( j=0; j<dim; j++) {
cout << "A(" << i+1 << "," << j+1 << ")=";
cin >> A[i][j];
}
}
void leggi_b( int dim, double b[MAX_DIM])
{
int i;
for( i=0; i<dim; i++) {
cout << "b(" << i+1 << ")=";
cin >> b[i];
}
}
void stampa(double A[MAX_DIM][MAX_DIM], double term_noti[MAX_DIM], int dim)
{
int i,j;
cout << "Matrice\n";
for(i=0;i<dim;i++) {
for(j=0;j<dim;j++)
cout << "\tA("
<< i+1 << ","
<< j+1 << ")="
<<A[i][j];
cout << "\n";
}
}
void stampa_sol(double x[MAX_DIM], int dim)
{
int i;
cout << "Vettore soluzioni\n";
for(i=0;i<dim;i++) {
cout << "\tx(" << i+1 << ")=" << x[i];
cout << "\n";
}
}
main()
{
double A[MAX_DIM][MAX_DIM],b[MAX_DIM], X[MAX_DIM];
int dim;
int success;
cout << "\n\n\n";
leggi(A,dim);
leggi_b(dim,b);
stampa(A,b,dim);
jacobi(A,b,dim);
cout << "\n\nIl vettore delle soluzioni e’:\n";
stampa_sol(X,dim);
system ("PAUSE"); return 0;
}
|
|
|
Top |
|
 |
cali1981 Site Admin
Registrato: 16/01/06 22:01 Messaggi: 836
|
|
Top |
|
 |
maris.p Novizio
Registrato: 30/10/09 12:27 Messaggi: 9
|
Inviato: Gio Dic 03, 2009 8:04 pm Oggetto: |
|
|
i valori del vettore x delle soluzioni non si trova con gli esempi che ho per fare le prove.. ma non riesco a capire il perchè..
per esempio con dim =4:
la matrice A è:
a11= 3 a12=-13 a13=9 a14=3
a21=-6 a22=4 a23=1 a24=-18
a31=6 a32=-2 a33=2 a34=4
a41=12 a42=-8 a43=6 a44=10
il vettore b è: b1=-19 b2=-34 b3=16 b4=26
il vettore x dovrebbe uscire: x1=3 x2=1 x3=-2 x4=1
ma con il codice che ho scritto non esce questo risultato. |
|
Top |
|
 |
cali1981 Site Admin
Registrato: 16/01/06 22:01 Messaggi: 836
|
|
Top |
|
 |
maris.p Novizio
Registrato: 30/10/09 12:27 Messaggi: 9
|
Inviato: Ven Dic 04, 2009 6:10 pm Oggetto: |
|
|
ok cali, ti ringrazio cmq tantissimo.. ciao |
|
Top |
|
 |
|
|
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|