Загвоздка в результате методом Итерации

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
prikolist
Сообщения: 38
Зарегистрирован: 19 ноя 2008, 13:09

Здравсвуйте программисты! Спасибо за ответы на предыдущие посты. Осталось решить методом итераций систему уравнений. Вчера Сазари мне подсказал как делать методом Зейделя, осталось методом итераций. Вот попробывал собрать код методом итераций, но дело в том,что результат системы уравнений равен по -1, все 4 уравнения, подскжаите пожалуйста где в данном коде мождет быть проблемма.
Загвоздка в результате. Зараннее благодарен за скорый ответ.


Вот код:

Код: Выделить всё

#include "stdafx.h"
#include <iostream>
#include <cmath>
#define eps 0.0001 //требуемая точность вычислений
#define N 4
using namespace std;


void iteration(double a[N][N],double b[N],double x[N])
{
 int i,j;
 double norma; //чебышевская норма вектора
 double xn[N]={0};//вектор для текущей итерации, начальное значение
       //должно быть равно начальному приближению

 do{
norma=0.0;  
 for(i=0;i < N;i++)  
 {
 xn[i]=-b[i];   
 for(j=0;j < N;j++)   
 {   
 if(i!=j)   
 xn[i]+=a[i][j]*x[j];  
 }  
 xn[i]/=-a[i][i];  
 }  
 for(i=0;i < N;i++) 
 {   
if(fabs(x[i]-xn[i]) > norma)   
 norma=fabs(x[i]-xn[i]); //Вычисление нормы вектора  
 x[i]=xn[i];  
   }  
 } 
 while(norma > eps); //проверка на необходимую точность вычислений 
 return;
 }
//------------------------------------------
int main()
{
cout<<"Metod Iterasii"<<endl<<endl;
double a[N][N],b[N],x[N];
int i;

a[0][0] = -1.01; a[0][1] = 0.02; a[0][2] = -0.62; a[0][3] = 0.08; b[0] = 1.3;
a[1][0] = -1.03; a[1][1] = 0.28; a[1][2] = 0.33; a[1][3] = -0.07; b[1] = -1.1;
a[2][0] = -1.09; a[2][1] = 0.13; a[2][2] = 0.42; a[2][3] = 0.28; b[2] = 1.7;
a[3][0] = -1.19; a[3][1] = -0.23; a[3][2] = 0.08; a[3][3] = 0.37; b[3] = 1.5;

for(i=0; i<N; i++)
 x[i] = 0;

iteration(a,b,x);
for(i=0; i<N; i++)
 cout<<x[i]<<endl;
 
cin.get(); 
}

Ответить