Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2009, 15:12   #21
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

омг...
Внимательно смотрим на первую строку:
Код:
int a1,b1,x1;
теперь на вторую
Код:
int a1[N][N],b1[N],x1[N];
Что вы изменили? По сути - ничего. У вас по-прежнему по два раза объявлены a,b и x.

Удалите вообще первую строку!

Я просто не понимаю, как это можно не видеть.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.06.2009, 15:17   #22
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Хорошо,спасибо, смотрите, написав вот так:

Код:
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(a,b,x);
for(i=0; i<N; i++)
 cout<<"Rezyltat metoda iterasiy = "<<x[i]<<endl;
}
Выдаёт ошибку a1 Undeclared Identifier, я же объявил как вы сказали.
prikolist вне форума Ответить с цитированием
Старый 18.06.2009, 15:23   #23
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А вы внимательно посмотрите на те переменные, которые у вас объявлены, и те, которые вы посылаете в функцию. Не замечаете нестыковку?

Сразу добавлю, что массив x у вас непроинициализирован. А там, вроде как, нужно задать начальное приближение.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.06.2009, 15:26   #24
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Вы про эту строку имеете ввиду:

Код:
iteration(a,b,x);
Ну, если я изменю её вот так,
Код:
iteration(a1,b1,x1);
вновь выдаст ошибку.

Тоесть если напишу вот так:

Код:
int main()
{

double a1[N][N],b1[N],x1[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;
}
prikolist вне форума Ответить с цитированием
Старый 18.06.2009, 15:31   #25
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от prikolist Посмотреть сообщение
Вы про эту строку имеете ввиду:

Код:
iteration(a,b,x);
Ну, если я изменю её вот так,
Код:
iteration(a1,b1,x1);
вновь выдаст ошибку.
А что, у вас где-то существует x1? Я вот что-то только x вижу.


Цитата:
Тоесть если напишу вот так:

Код:
int main()
{

double a1[N][N],b1[N],x1[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;
}
Не знаю, как вам еще объяснить, что у одной и той же переменной должно быть одно и то же имя.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.06.2009, 15:36   #26
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Спасибо,теперь скопилировалось, когда написал во таткой код:

Код:

#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()
{

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;
}
Но дело в том,что выдало всё по -1, вот фото:
Изображения
Тип файла: jpg 111.jpg (15.2 Кб, 94 просмотров)
prikolist вне форума Ответить с цитированием
Старый 18.06.2009, 15:52   #27
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вы что-то в функции изменили. Если взять функцию из первого поста, то что-то считает.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.06.2009, 16:15   #28
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Попробуйте пожалуйста,я честно говорю, выдаёт все -1, я ничего не изменял.
prikolist вне форума Ответить с цитированием
Старый 18.06.2009, 16:21   #29
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Взял функцию из первого поста.
Код:
#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 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(); 
}
Выдает:
Код:
-1.28713
-8.66337
3.38873
-6.20366
Насчет начального приближения точно не знаю. Поэтому просто нулями заполнил.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.06.2009, 16:29   #30
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Спасибо большое, скажите, а почему при запуске, когда я вставил данный код, выдаёт такое фото ниже, но когда нажать на кнопку "пропустить ", только тогда выдаёт результат.
Изображения
Тип файла: jpg 111.jpg (12.0 Кб, 95 просмотров)
prikolist вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод итераций и комбинированный метод prikolist Общие вопросы C/C++ 2 16.06.2009 20:51
Метод простых итераций church Общие вопросы C/C++ 3 06.06.2009 15:26
метод Зейделя на Паскале(график) Neznau Паскаль, Turbo Pascal, PascalABC.NET 0 27.05.2009 20:02