Метод итераций и метод Зейделя

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

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

Здравсвуйте программисты! подскажите пожалуйста, попробывал решить программу метод Зейделя, выдаёт ошибку, в функции мэин..
Не могу понять где ошибка в программе. Вот исходник, программа на студии 2005, в консоле вин 32:

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



#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()
{
int a,b,x;
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;


iteration(a,b,x);
for(i=0; i<N; i++)
 cout<<"Rezyltat metoda iterasiy = "<<x[i]<<endl;
}

Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

prikolist, когда научишься использовать С++ подстветку кода? Я уже устал исправлять.

По программе. Проблема вот этих двух строках:

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

int a,b,x;
double a[N][N],b[N],x[N];
Сначала переменные объявлены как int, а потом с тем же именем, но с другим типом.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

prikolist писал(а):Здравсвуйте программисты! подскажите пожалуйста, попробывал решить программу метод Зейделя, выдаёт ошибку, в функции мэин.
Если уж вопрос "Почему ошибка?", то нехудо бы и текст ошибки привести. А то как в той библейской истории про фараонв, которому приснился сон, но, проснувшись, он забыл что именно за сон был. И вызывает от мудрецов своих и ставит задачу: 1) рассказать, что за сон был; 2) истолковать его.


В данном случае, рискну прекдположить, что ошибка "функция main должна вернуть значение".
Или объяви main типа void, либо ВЕРНИ, блин!, ЗНАЧЕНИЕ на родину! :) )
prikolist
Сообщения: 38
Зарегистрирован: 19 ноя 2008, 13:09

Вот попробывал так переделать, но дело в том,что по результату выдаёт все -1.
Вот изменённый код:

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


#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};//вектор для текущей итерации, начальное значение
       //должно быть равно начальному приближению
 
 for(i=0;i < N;i++)
  {
   x[i]=-b[i];

   for(j=0;j < N;j++)
   {
    if(i!=j)
     x[i]+=a[i][j]*x[j];
   }

   x[i]/=-a[i][i];
  }

  for(i=0;i < N;i++)
  {
   if(fabs(x[i]-xn[i]) > norma)
    norma=fabs(x[i]-xn[i]);
   xn[i]=x[i];
  }



int main()
{

double a1[N][N],b1[N],x[N];

int i;

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


iteration(a1,b1,x);
for(i=0; i<N; i++)
 cout<<"Rezyltat metoda iterasiy = "<<x[i]<<endl;
}




Вот фото результата:
Вложения
111.jpg
111.jpg (15.16 КБ) 303 просмотра
Ответить