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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2012, 23:37   #1
Мельхиора
Новичок
Джуниор
 
Регистрация: 13.01.2012
Сообщений: 5
Радость Метод прогонки, Зейделя, Якоби для СЛАУ(Paskal)

Добрый день.
В поисках примеров, схожих с своими, перерыла кучу форумов, и столкнулась с такой любопытностью:
Все примеры программ, приводимые там - универсальны. То есть огромный код для программы, позволяющей решить любые подобные уравнения. А ведь в основном задают написать программу для решения однй конкретной системы.
Зачастую посылают в Википедию. Но там по методу Зейделя, например, вообще на С++ написано. А пример на Паскале опять же на универсальную программу. Для метода Якоби тоже пример на С++. Пример решения системы линейных алгебраических уравнений методом простых итераций. Не ручаюсь, что он полностью верен, однако, возможно кому-либо пригодится.
1.1x1 + 11.2x2 + 11.1x3 - 13.1x4 =1 .3
-3.3x1 + 1.1x2 + 30.1x3 - 20.1x4 = 1.1
7.5x1 + 1.3x2 + 1.1x3 + 10x4 = 20
1.7x1 + 7.7x2 - 1.8x3 + 2.1x4 = 1.1
Код:
 Program l2a;
uses crt;
const n=4;
      eps=0.001;
      a:array[1..n,1..n] of integer=((11,112,111,-131),(-33,11,301,-201),(75,13,11,10),(17,75,-18,21));
      b:array[1..n] of integer=(13,11,200,11);

var x:array[1..n,1..n] of real;
    i,j,p,k:byte;
    x1,x2,x3,x4,tmp1,tmp2,tmp3:real;
begin
     clrscr;
     writeln('sistema uravnenii:');
     for i:=1 to n do
         begin
              for j:=1 to n do write(a[i,j]:4);
              writeln(b[i]:4);
         end;

     for i:=n downto 2 do
         begin
              for j:=1 to n do
                  begin
                       p:=a[i,j];
                       a[i,j]:=a[i-1,j];
                       a[i-1,j]:=p;
                  end;
              p:=b[i];
              b[i]:=b[i-1];
              b[i-1]:=p
         end;
     for i:=1 to n do
         begin
              for j:=1 to n do write(a[i,j]:3);
              writeln(b[i]:3);
         end;
     writeln;

     for i:=1 to n do
         begin
              j:=1;k:=0;
              while (k<=n) and (j<=n) do
                    if j<>i then
                       begin
                            inc(k);
                            x[i,k]:=a[i,j]/-a[i,i];
                            inc(j);
                       end
                       else inc(j);
              x[i,n]:=b[i]/a[i,i];
         end;
     for i:=1 to n do
         begin
              for j:=1 to n do write(x[i,j]:7:3);
              writeln;
         end;
     x1:=0;x2:=0;x3:=0;k:=1;
     repeat
           tmp1:=x[k,1]*x2+x[k,2]*x3+x[k,3];
           inc(k);
           tmp2:=x[k,1]*x1+x[k,2]*x3+x[k,3];
           inc(k);
           tmp3:=x[k,1]*x1+x[k,2]*x2+x[k,3];
           k:=1;
           x1:=tmp1;x2:=tmp2;x3:=tmp3;
           writeln('x1=',x1:6:3,' x2=',x2:6:3,' x3=',x3:6:3,' x4=', x4:6:3);
     until (x1<=eps)or(x2<=eps)or(x3<=eps);
     readln; end.
Ответ:
x1 =-1,235 x2 =1,170 x3 =0,668 x4 =0
А вопрос в следующем: не мог бы кто-нибудь выложить подобные примеры по методам Прогонки и Зейделя, для конкретных систем, а не универсальные?
Спасибо.

Последний раз редактировалось Мельхиора; 15.01.2012 в 00:20.
Мельхиора вне форума Ответить с цитированием
Старый 29.04.2014, 18:15   #2
now2
Форумчанин
 
Регистрация: 12.03.2014
Сообщений: 217
По умолчанию

Цитата:
Сообщение от Мельхиора Посмотреть сообщение
Добрый день.
В поисках примеров, схожих с своими, перерыла кучу форумов, и столкнулась с такой любопытностью:
Все примеры программ, приводимые там - универсальны. То есть огромный код для программы, позволяющей решить любые подобные уравнения. А ведь в основном задают написать программу для решения однй конкретной системы.
Зачастую посылают в Википедию. Но там по методу Зейделя, например, вообще на С++ написано. А пример на Паскале опять же на универсальную программу. Для метода Якоби тоже пример на С++. Пример решения системы линейных алгебраических уравнений методом простых итераций. Не ручаюсь, что он полностью верен, однако, возможно кому-либо пригодится.
1.1x1 + 11.2x2 + 11.1x3 - 13.1x4 =1 .3
-3.3x1 + 1.1x2 + 30.1x3 - 20.1x4 = 1.1
7.5x1 + 1.3x2 + 1.1x3 + 10x4 = 20
1.7x1 + 7.7x2 - 1.8x3 + 2.1x4 = 1.1
Код:
 Program l2a;
uses crt;
const n=4;
      eps=0.001;
      a:array[1..n,1..n] of integer=((11,112,111,-131),(-33,11,301,-201),(75,13,11,10),(17,75,-18,21));
      b:array[1..n] of integer=(13,11,200,11);

var x:array[1..n,1..n] of real;
    i,j,p,k:byte;
    x1,x2,x3,x4,tmp1,tmp2,tmp3:real;
begin
     clrscr;
     writeln('sistema uravnenii:');
     for i:=1 to n do
         begin
              for j:=1 to n do write(a[i,j]:4);
              writeln(b[i]:4);
         end;

     for i:=n downto 2 do
         begin
              for j:=1 to n do
                  begin
                       p:=a[i,j];
                       a[i,j]:=a[i-1,j];
                       a[i-1,j]:=p;
                  end;
              p:=b[i];
              b[i]:=b[i-1];
              b[i-1]:=p
         end;
     for i:=1 to n do
         begin
              for j:=1 to n do write(a[i,j]:3);
              writeln(b[i]:3);
         end;
     writeln;

     for i:=1 to n do
         begin
              j:=1;k:=0;
              while (k<=n) and (j<=n) do
                    if j<>i then
                       begin
                            inc(k);
                            x[i,k]:=a[i,j]/-a[i,i];
                            inc(j);
                       end
                       else inc(j);
              x[i,n]:=b[i]/a[i,i];
         end;
     for i:=1 to n do
         begin
              for j:=1 to n do write(x[i,j]:7:3);
              writeln;
         end;
     x1:=0;x2:=0;x3:=0;k:=1;
     repeat
           tmp1:=x[k,1]*x2+x[k,2]*x3+x[k,3];
           inc(k);
           tmp2:=x[k,1]*x1+x[k,2]*x3+x[k,3];
           inc(k);
           tmp3:=x[k,1]*x1+x[k,2]*x2+x[k,3];
           k:=1;
           x1:=tmp1;x2:=tmp2;x3:=tmp3;
           writeln('x1=',x1:6:3,' x2=',x2:6:3,' x3=',x3:6:3,' x4=', x4:6:3);
     until (x1<=eps)or(x2<=eps)or(x3<=eps);
     readln; end.
Ответ:
x1 =-1,235 x2 =1,170 x3 =0,668 x4 =0
А вопрос в следующем: не мог бы кто-нибудь выложить подобные примеры по методам Прогонки и Зейделя, для конкретных систем, а не универсальные?
Спасибо.
ГДЕ В ПРОГРАММЕ ИСПОЛЬЗУЕТСЯ ПЕРВАЯ И ВТОРАЯ МЕТРИКИ
now2 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод Зейделя Якоби AnZet Паскаль, Turbo Pascal, PascalABC.NET 0 11.12.2011 17:39
исследовать метод квадратных корней и метод Холецкого для решения СЛАУ Vит@x@ Помощь студентам 0 22.11.2011 10:47
Паскаль. Метод Якоби Flashmob Помощь студентам 0 23.12.2010 05:13
Решения СЛАУ методом Гаусса и Зейделя [ICQ] Помощь студентам 0 04.05.2010 20:51
Решение СЛАУ методом Зейделя на Delphi Кнопик Помощь студентам 2 01.11.2009 13:05