Тема: Метод Зейделя для вирішення СЛАР
проблема в тому, що мій цикл якимось чином повторюється надто багато разів. Навіть якщо я знижую точніть (змінна е), кількість ітерацій не змінюється (хоч, по логіці, повинно бути менше)
щось, що виводиться:
власне, мій код:
int main()
{
double mas[4][4], b_vek[4], x[4], x_k[4], r[4];
double const e = 0.0001;
//--------inicilization of mas--------//
mas[0][0]= 3.81;
mas[0][1]= 0.25;
mas[0][2]= 1.28;
mas[0][3]= 0.75;
mas[1][0]= 2.25;
mas[1][1]= 1.32;
mas[1][2]= 4.58;
mas[1][3]= 0.49;
mas[2][0]= 1.5;
mas[2][1]= 6.03;
mas[2][2]=-0.3;
mas[2][3]= 0.29;
mas[3][0]=-0.75;
mas[3][1]= 3.06;
mas[3][2]= 0.68;
mas[3][3]= 4.58;
b_vek[0]= 4.21;
b_vek[1]= 6.47;
b_vek[2]=-1.83;
b_vek[3]= 6.9;
int n=4;
double max=100501.1;
int iteraction=0;
while (max>e)
{
x_k[0]=(b_vek[0]-x[1]*mas[0][1]-x[2]*mas[0][2]-x[3]*mas[0][3])/mas[0][0];
x_k[1]=(b_vek[1]-x_k[0]*mas[1][0]-x[2]*mas[1][2]-x[3]*mas[1][3])/mas[1][1];
x_k[2]=(b_vek[2]-x_k[0]*mas[2][0]-x_k[1]*mas[2][1]-x[3]*mas[2][3])/mas[2][2];
x_k[3]=(b_vek[3]-x_k[0]*mas[3][0]-x_k[1]*mas[3][1]-x_k[2]*mas[3][2])/mas[3][3];
max=abs(x_k[0]-x[0]);
for (int i=1; i<n; i++)
{
if (abs(x_k[i]-x[i])>max)
{
max=abs(x_k[i]-x[i]);
}
};
for (int i=0; i<n; i++)
{
x[i]=x_k[i];
r[i]=b_vek[i]-mas[i][0]*x[0]-mas[i][1]*x[1]-mas[i][2]*x[2]-mas[i][3]*x[3];
cout<<"r="<<r[i]<<endl;
};
cout<<"end of iteraction#"<<iteraction<<endl<<endl;
iteraction++;
};
cout<<"Total result:"<<endl;
for (int i=0; i<n; i++)
{
cout<<"x"<<i<<"= "<<x[i]<<endl;
};
system("pause");
return 0;
};
з іншою матрицею все працює коректно