Czesc, mam za zadanie napisac program ktory uklad rownan metoda gaussa-seidla.
#include <iostream>
#include <cmath>
#include <math.h>
#include <iomanip>
using namespace std;
int main()
{
int i, j, k;
int iter=10;
int n=4;
float sum1, sum2;
float W[n][n]={{0,0.13,0.065,0.13},{0.065,0,0.195,0.13},{0.195,0.13,0,0.065},{0.13,-0.065,0.195,0}};
float Z[n]={-1.4,-2.1,-3,-0.6};
float X[n]={-0.3,4.2,-4.7,-3.7};
for(k=0;k<iter;k++)
{
sum1=0;
for(j=1;j<n;j++)
{
sum1+=W[0][j]*X[j];
}
X[0]=sum1+Z[0];
for(i=1;i<n-1;i++)
{
sum1=0;
for(j=0;j<i-1;j++)
{
sum1+=W[i][j]*X[j];
}
sum2=0;
for(j=i;j<n;j++)
{
sum2+=W[i][j]*X[j];
}
X[i]=sum1+sum2+Z[i];
}
sum2=0;
for(j=0;j<n-1;j++)
{
sum2+=W[n-1][j]*X[j];
}
X[n-1]=sum2+Z[n-1];
cout << "Iteracja " << k+1 << endl;
for(i=0;i<n;i++)
{
cout << "X[" << i << "]=" << X[i] << " ";
}
cout << endl;
}
return 0;
}
Napisalem taki kod, ale wyniki jakie daje nie zgadzaja sie z odpowiedziami w zadaniu. Ktos widzi gdzie jest blad?
Prawidlowe wyniki:
iteracja 1
X0=-1.6405 X1=-3.60413 X2=-4.02893 X3=-1.36464
iteracja 2
X0=-2.30782 X1=-3.21305 X2=-3.95642 X3=-1.46267
iteracja 3
X0=-2.26501 X1=-3.20888 X2=-3.9539 X3=-1.45689
iteracja 4
X0=-2.26355 X1=-3.20754 X2=-3.95307 X3=-1.45662
iteracja 5
X0=-2.26329 X1=-3.20732 X2=-3.95297 X3=-1.45658
iteracja 6
X0=-2.26325 X1=-3.2073 X2=-3.95296 X3=-1.45658
iteracja 7
X0=-2.26325 X1=-3.20729 X2=-3.95296 X3=-1.45657
iteracja 8
X0=-2.26325 X1=-3.20729 X2=-3.95296 X3=-1.45657
iteracja 9
X0=-2.26325 X1=-3.20729 X2=-3.95296 X3=-1.45657
iteracja 10
X0=-2.26325 X1=-3.20729 X2=-3.95296 X3=-1.45657