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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2012, 18:57   #1
marwell.
Пользователь
 
Регистрация: 05.12.2012
Сообщений: 63
Вопрос метод простой итерации для решения слау

доброго времени суток
задача: реализовать метод простой итерации для решения слау
вроде бы как легкий метод, теорию взял отсюда(файл в pdf!)
пока не смог выяснить, почему программа зацикливается

Код:
const
n=6;
e=0.000001;

type
  Tmass=array[1..n] of real;
  Tmatrix=array[1..n] of TMass;

var
  korni, betta, z, old:Tmass;
  ish_matr:TMatrix; svob_koeffs:TMass;
 alpha: TMatrix;
  max: double;

...

function usl(a,b:TMass):boolean;   //условие завершения итераций
var i: integer;
    flag: boolean;
    jin: TMass;
    norma: double;
begin
flag:=True;
for i := 1 to n do jin[i] := a[i] - b[i];
for i := 1 to n do norma := norma + abs(jin[i]);
if norma>( (e*(1-max))/max ) then flag:=False;
Result:=flag;
end;

...

var i, j: integer;
    s, v, m: double;
    error: boolean;
begin
...
  for i := 1 to n do
    for j := 1 to n do
      if i = j then alpha[i,j] := 0
        else alpha[i,j] := -ish_matr[i,j]/ish_matr[i,i];
  for i:=1 to n do
    betta[i] := svob_koeffs[i]/ish_matr[i,i];
  for j := 1 to n do
    for i := 1 to n do
      z[j]:=z[j]+abs(alpha[i,j]);
  max:=z[1];
  for i := 1 to n do
    if z[i] > max then max := z[i];
  if max>=1 then showmessage ('Метод простых итераций не сходится!')
    else begin
      old := betta;
      for i := 1 to n do begin
        for j := 1 to n do
          korni[i] := korni[i] + alpha[i,j]*old[i];
        korni[i] := korni[i] + betta[i];
      end;
      repeat
      old := korni;
      for i := 1 to n do korni[i] := 0;
      for i := 1 to n do begin
        for j := 1 to n do
          korni[i] := korni[i] + alpha[i,j]*old[i];
        korni[i] := korni[i] + betta[i];
      end;
      until usl(korni, old)=True;
     
 end;
...
end;

в ish_matr коэффициенты исходной матрицы, svob_koeffs столбец свободных членов
может я условие завершения итераций понял неправильно?
marwell. вне форума Ответить с цитированием
Старый 24.12.2012, 22:05   #2
marwell.
Пользователь
 
Регистрация: 05.12.2012
Сообщений: 63
По умолчанию

гм, надо было всего то обнулять в начале norma := 0;
marwell. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение СЛАУ методом простой итерации. Fialka2012 Паскаль, Turbo Pascal, PascalABC.NET 0 16.11.2012 23:16
СЛАУ методом Якоби (простой итерации) C++ Defiler Помощь студентам 0 14.05.2012 18:24
Метод Ричардсона для решения СЛАУ антон9319 Помощь студентам 0 09.12.2011 20:31
исследовать метод квадратных корней и метод Холецкого для решения СЛАУ Vит@x@ Помощь студентам 0 22.11.2011 10:47
Решение СЛАУ. Метод простой итерации Alexander886 Помощь студентам 5 24.03.2010 18:43