Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.93
prikolist
3 / 3 / 0
Регистрация: 19.07.2008
Сообщений: 142
#1

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

16.06.2009, 21:31. Просмотров 6936. Ответов 2
Метки нет (Все метки)

Здравсвуйте программисты! Спасибо всем за помощь в предыдущих темах, осталась последняя лаба, которую нужно решить по предмету "Численные методы" и сдать преподу до понедельника успеть, остальные лабы прошли на ура. Подскажите пожалуйста как решить методом Зейделя и итераций вот эти 2 системы уравнений, буду очень благодарен Вот фото:
Нашёл такой код, не знаю,правильно,согласно этим уравнениям.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#define eps 0.0001 //требуемая точность вычислений
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];
  }
Миниатюры
Метод итераций и метод Зейделя  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2009, 21:31     Метод итераций и метод Зейделя
Посмотрите здесь:

C++ метод Зейделя
Метод Зейделя C++
СЛАУ метод Зейделя C++
C++ Метод Зейделя
C++ Метод Зейделя в С++
Метод Зейделя C++
C++ метод Зейделя. c++
C++ Метод Зейделя
C++ СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя
C++ Посчитать количество проведенных итераций (метод простых итераций, Pascal -> C++)
C++ Метод Зейделя-Гаусса С++
Метод Гаусса-Зейделя C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
prikolist
3 / 3 / 0
Регистрация: 19.07.2008
Сообщений: 142
18.06.2009, 14:51  [ТС]     Метод итераций и метод Зейделя #2
Подскажите пожалуйста,как переделать вот этот код, это Метод Зейделя и итераций. Переделать в консоль на С++. Буду очень благодарен.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
unit Iter;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    rez: TMemo;
    B1: TButton;
    B2: TButton;
    procedure B1Click(Sender: TObject);
    procedure B2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.B1Click(Sender: TObject);
var x1,x2,x3,x4,f1,f2,f3,f4,t1,t2,t3,t4,e:real;
str1,str2,str3,str4,str5:string;
k:integer;
label S,F;
begin
k:=0;x1:=1.21;x2:=-0.72;x3:=-0.58;x4:=1.56;
rez.Clear;e:=0.001;
repeat
f1:=0.23*x1-0.14*x2+0.06*x3-0.12*x4+1.21;  
f2:=0.12*x1+0.32*x3-0.18*x4-0.72;
f3:=0.08*x1-0.12*x2+0.23*x3+0.32*x4-0.58;
f4:=0.25*x1+0.22*x2+0.14*x3+1.56;
    t1:=f1-x1;
    t2:=f2-x2;
    t3:=f3-x3;
    t4:=f4-x4; 
    x1:=f1;x2:=f2;x3:=f3;x4:=f4;
          inc(k);
until (abs(t1)<=e) and (abs(t2)<=e) and (abs(t3)<=e) and (abs(t4)<=e);
str(f1:6:3,str1);
str(f2:6:3,str2);
str(f3:6:3,str3);
str(f4:6:3,str4);
str(k,str5);
rez.Lines.Add(' ------- Результат вычислений ------- ');
rez.Lines.Add(' X1= '+str1+'  X2= '+str2+'  X3= '+str3+'  X4= '+str4);
rez.Lines.Add(' Количество итераций = '+str5);
end;
procedure TForm1.B2Click(Sender: TObject); // метод зейделя
var x1,x2,x3,x4,f1,f2,f3,f4,t1,t2,t3,t4,e:real;
str1,str2,str3,str4,str5:string;
k:integer;
begin
k:=0;x1:=1.21;x2:=-0.72;x3:=-0.58;x4:=1.56;
rez.Clear;e:=0.001;
repeat
f1:=0.23*x1-0.14*x2+0.06*x3-0.12*x4+1.21;
x1:=f1;
f2:=0.12*x1+0.32*x3-0.18*x4-0.72;
x2:=f2;
f3:=0.08*x1-0.12*x2+0.23*x3+0.32*x4-0.58;
x3:=f3;
f4:=0.25*x1+0.22*x2+0.14*x3+1.56;
x4:=f4;
    t1:=f1-x1;
    t2:=f2-x2;
    t3:=f3-x3;
    t4:=f4-x4;
          x1:=t1;x2:=t2;x3:=t3;x4:=t4;
                inc(k);
until (abs(t1)<=e) and (abs(t2)<=e) and (abs(t3)<=e) and (abs(t4)<=e);
str(f1:6:3,str1);
str(f2:6:3,str2);
str(f3:6:3,str3);
str(f4:6:3,str4);
str(k,str5);
rez.Lines.Add(' ------- Результат вычислений ------- ');
rez.Lines.Add(' X1= '+str1+'  X2= '+str2+'  X3= '+str3+'  X4= '+str4);
rez.Lines.Add(' Количество итераций = '+str5);
end;
end.
Добавлено через 8 часов 41 минуту 18 секунд
Вот метод итераций, как его подстроить, чтоб решило моё.

Метод итерации
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "stdafx.h"
#define eps 0.0001 //требуемая точность вычислений
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;
}
Метод Зейделя
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 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];
  }
Подскажите пожалуйста, завтра или в пятницу хочу сдать этот код, очень нужно. Как подстроить его под мои уравнения?

Добавлено через 15 часов 17 минут 29 секунд
Вот попробывал методои итераций, подскажите пожалуйста, не компилится, уже не знаю что не так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include"stdafx.h"
#include<iostream>
#include<cmath>
#define eps 0.0001 //требуемая точность вычислений
#define N 4
usingnamespace 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;
}
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
22.03.2011, 14:22     Метод итераций и метод Зейделя #3
не думаю, что актуально, но все равно дам ссылку на материал по сабжу - вот тут. может кому пригодится. там нормы еще считаются.
Yandex
Объявления
22.03.2011, 14:22     Метод итераций и метод Зейделя
Ответ Создать тему
Опции темы

Текущее время: 00:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru