Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

(Паскаль) Метод Зейделя

36K
14 марта 2008 года
Invizibel
2 / / 14.03.2008
Мне надо Блок схему на "Метод Зейделя" на курсак помогите плиз.И ели можно сразу по етой схеме Програму на мове Паскаль.:) А тоя уже запарилса искать и програмировать чтото невиходить:mad: Может хотяби Блок схеу ето поможет(И конешно формулу которую ви использовали).:)
242
15 марта 2008 года
Оlga
2.2K / / 04.02.2006
[COLOR=Red]Вопросы сделайте за меня разрешены только в разделе Студентам, так что переехали. Также название темы должно отражать суть вопроса, получаешь предупреждение.[/COLOR]
314
15 марта 2008 года
fanto
374 / / 15.02.2003
Функция принимает на вход матрицу

a размерностью N*N, вектор правых частей b размерности N и начальное приближение вектора x

размерности N. Результат будет возвращен в x:

Код:
#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=-b;

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

   xn/=-a;
  }

  for(i=0;i < N;i++)
  {
   if(fabs(x-xn) > norma)
    norma=fabs(x-xn); //Вычисление нормы вектора
   x=xn;
  }
 
 }
 while(norma > eps); //проверка на необходимую точность вычислений


 return;
}


Данный код может быть легко преобразован в метод Зейделя, отличие которого от простой итерации заключается в том, что для xi+1 используется xi найденный только что, а не xi с предыдущей итерации
Код:
for(i=0;i < N;i++)
  {
   x=-b;

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

   x/=-a;
  }

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


Что-то в этом роде....
36K
16 марта 2008 года
Invizibel
2 / / 14.03.2008
Чтото я немогу понять.Етова алгоритма.:confused:
257
17 марта 2008 года
kosfiz
1.6K / / 18.09.2005
сам алгоритм вы найдете в книге по численным методам, если у вас такое задание то и книгу какую-то вы должны знать. можно посмотреть в гугле метод зейделя там много чего, причем с готовой программой на паскале и описанием алгоритма. например: http://www.bestreferat.ru/referat-46738.html правда не факт, что там правильно :)
7.4K
24 марта 2008 года
Nook
65 / / 17.01.2007
Uses CRT;

Const
maxn = 10;

Type
Data = Real;
Matrix = Array[1..maxn, 1..maxn] of Data;
Vector = Array[1..maxn] of Data;

{ prozedura vvoda rasshirennoy matrizy sistemy }
Procedure ReadSystem(n: Integer; var a: Matrix; var b: Vector);
Var
i, j, r: Integer;
Begin
r := WhereY;
GotoXY(2, r);
Write('A');
For i := 1 to n do begin
GotoXY(i * 6 + 2, r);
Write(i);
GotoXY(1, r + i + 1);
Write(i:2);
end;
GotoXY((n + 1) * 6 + 2, r);
Write('b');
For i := 1 to n do begin
For j := 1 to n do begin
GotoXY(j * 6 + 2, r + i + 1);
Read(a[i, j]);
end;
GotoXY((n + 1) * 6 + 2, r + i + 1);
Read(b);
end;
End;

{ prozedura vyvoda resultata }
Procedure WriteX(n :Integer; x: Vector);
Var
i: Integer;
Begin
For i := 1 to n do
Writeln('x', i, ' = ', x);
End;


{ funkziya,realizuyushaya metod Zeydelyaя }
Function Seidel(n: Integer; a: Matrix; b: Vector; var x: Vector; e: Data) :Boolean;
Var
i, j: Integer;
s1, s2, s, v, m: Data;
Begin

{ issleduem shodimost }
For i := 1 to n do begin

s := 0;
For j := 1 to n do
If j <> i then
s := s + Abs(a[i, j]);

If s >= Abs(a[i, i]) then begin
Seidel := false;
Exit;
end;

end;

Repeat

m := 0;
For i := 1 to n do begin

{ vychislyaem summy }
s1 := 0;
s2 := 0;
For j := 1 to i - 1 do
s1 := s1 + a[i, j] * x[j];
For j := i to n do
s2 := s2 + a[i, j] * x[j];

{ vychislyaem novoe priblizhenie i pogreshnost }
v := x;
x := x - (1 / a[i, i]) * (s1 + s2 - b);

If Abs(v - x) > m then
m := Abs(v - x);

end;

Until m < e;

Seidel := true;
End;

Var
n, i: Integer;
a: Matrix;
b, x: Vector;
e: Data;
Begin
ClrScr;
Writeln('programma resheniya sistem lineynyh uravneniy po metodu Zeydelyaя');
Writeln;

Writeln('vvedite poryadok matrizy sistemy(max 10)');
Repeat
Write('>');
Read(n);
Until (n > 0) and (n <= maxn);
Writeln;

Writeln('vvedite tochnost vychisleniy');
Repeat
Write('>');
Read(e);
Until (e > 0) and (e < 1);
Writeln;

Writeln('vvedite rasshirennuyu matrizu sistemy');
ReadSystem(n, a, b);
Writeln;


{ predpologaem nachalnoe priblizhenie=0 }
For i := 1 to n do
x := 0;

If Seidel(n, a, b, x, e) then begin
Writeln('rezultat vychisleniya po metodu Zeydelyaя');
WriteX(n, x);
end
else
Writeln('metod Zeydelya ne shoditsya dlya dannoy sistemy');
Writeln;
End.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог