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

Метод Зейделя в С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
maikl_1990
0 / 0 / 0
Регистрация: 25.01.2011
Сообщений: 14
25.01.2011, 07:29     Метод Зейделя в С++ #1
всем доброго времени суток...
у меня такая проблема, есть программа по решению систем линейных уравнений методом Зейделя
написали мне её.. даже не пойму в чем, потому как знаком только с С++ и то еле еле
можно ли эту ерунду быстро переписать на С++
заранее благодарен!

Код
Uses CRT;
Const
     maxn = 10;
Type
    Data = Real;
    Matrix = Array[1..maxn, 1..maxn] of Data;
    Vector = Array[1..maxn] of Data;
{ Процедура ввода расширенной матрицы системы }
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[i]);
     end;
End;
{ Процедура вывода результатов }
Procedure WriteX(n :Integer; x: Vector);
Var
   i: Integer;
Begin
     For i := 1 to n do
         Writeln('x', i, ' = ', x[i]);
End;
{ Функция, реализующая метод Зейделя }
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
     { Исследуем сходимость }
     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
             { Вычисляем суммы }
             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];
             { Вычисляем новое приближение и погрешность }
             v := x[i];
             x[i] := x[i] - (1 / a[i, i]) * (s1 + s2 - b[i]);
             If Abs(v - x[i]) > m then
                m := Abs(v - x[i]);
         end;
     Until m < e;
     Seidel := true;
End;
Var
    n, i: Integer;
    a: Matrix;
    b, x: Vector;
    e: Data;
Begin
      ClrScr;
      Writeln ('Программа решения систем линейных уравнений по методу Зейделя');
      Writeln;
      Writeln ('Ввести порядок матрицы системы (макс. 10)');
      Repeat
             Write('>');
             Read(n);
      Until (n > 0) and (n <= maxn);
      Writeln;
      Writeln('Ввести точность вычислений');
      Repeat
             Write('>');
             Read(e);
      Until (e > 0) and (e < 1);
      Writeln;
      Writeln('Ввести расширенную матрицу системы');
      ReadSystem(n, a, b);
      Writeln;
      { Предполагаем начальное приближение равным нулю }
      For i := 1 to n do
          x[i] := 0;
      If Seidel(n, a, b, x, e) then begin
         Writeln('Результат вычислений по методу Зейделя');
         WriteX(n, x);
      end
      else
          Writeln('Метод Зейделя не сходится для данной системы');
      Writeln;
End.
Добавлено через 6 часов 17 минут
или скажите хотя бы, в чем она написана?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2011, 07:29     Метод Зейделя в С++
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
D@rkD@iver
110 / 110 / 3
Регистрация: 01.10.2008
Сообщений: 876
25.01.2011, 08:34     Метод Зейделя в С++ #2
написана на паскале
Yandex
Объявления
25.01.2011, 08:34     Метод Зейделя в С++
Ответ Создать тему
Опции темы

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