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

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

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

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

16.06.2009, 21:31. Просмотров 7114. Ответов 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];
  }
0
Миниатюры
Метод итераций и метод Зейделя  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2009, 21:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод итераций и метод Зейделя (C++):

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя - C++
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Посчитать количество проведенных итераций (метод простых итераций, Pascal -> C++) - C++
перевести из паскаля в С++ program method_of_simple_iteration; uses crt; var a:array of real; b,c:array of real; ...

метод Зейделя. c++ - C++
В цикле do while есть ошибка, из-за неё программа не правильно считает Xold и Xnew. Помогите, пожалуйста, найти ошибку... #pragma once ...

Метод Зейделя: - C++
Здравствуйте, у меня получается на данный момент X1 := -8.32587e+307 X2 := -inf X3 := inf я скопировал сам метод зейделя с...

Метод Зейделя в С++ - C++
всем доброго времени суток... у меня такая проблема, есть программа по решению систем линейных уравнений методом Зейделя написали мне...

Метод Зейделя - C++
решить систему нелинейных уравнений Методом зейделя:

2
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;
}
0
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
22.03.2011, 14:22 #3
не думаю, что актуально, но все равно дам ссылку на материал по сабжу - вот тут. может кому пригодится. там нормы еще считаются.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2011, 14:22
Привет! Вот еще темы с ответами:

Метод Зейделя - C++
Ребята, каждый из вас уже делал лабы по матрицам. Если у кого-то есть готовая лаба по методу Зейделя, прошу, напишите ее тут и желательно с...

Метод Зейделя - C++
ошибка найдена. тема закрыта

метод Зейделя - C++
Ребят помогите пожалуйста, а то зачот простаивает)Нужна программка реализующая метод Зейделя(или Зейзеля препод так написал что...

Метод Зейделя - C++
Я написал прогу по методу Зейделя, так вот при матрице 3х3 выдает после 7 итерации правильный ответ) а при матрице 4х4 уже на второй...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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