Форум программистов, компьютерный форум, киберфорум
Другие языки программирования
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 30.10.2013
Сообщений: 14
1

[Ada] Метод Якоби для решения системы линейных уравнений

30.10.2013, 19:24. Просмотров 1172. Ответов 5
Метки нет (Все метки)


Помогите, кто может, написать код на языке ADA на одну из трех тем:
1) Кусочно-линейный интеграл
2) Циклическая редукция
3) Метод Якоби для решения СЛУ (системы линейных уравнений)

Очень прошу помочь как можно скорее. До пятницы нужно сдать
Исходные данные подбираются рандомом (учесть это в программе).
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2013, 19:24
Ответы с готовыми решениями:

Метод простых итераций для решения системы линейных уравнений
помогите найти ошибку в алгоритме при вводе уравнения x+y = 2 2x-y = 7 x = 2-y; y =...

Метод простой итерации для решения системы линейных уравнений
Здравствуйте. Помогите пожалуйста разобраться в методе простых итераций решения системы нелинейных...

Метод Гаусса решения системы линейных алгебраических уравнений и его модификации
1. Реализовать в виде отдельной процедуры метод Гаусса решения системы линейных алгебраических...

Решение системы линейных алгебраических уравнений методом Якоби
Помогите пожалуйста. Нужен код на языке VBA для метода решения системы линейных алгебраических...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
5
117 / 117 / 0
Регистрация: 27.09.2013
Сообщений: 710
30.10.2013, 19:30 2
Цитата Сообщение от upgr4de Посмотреть сообщение
Помогите, кто может, написать код на языке ADA на одну из трех тем:
1) Кусочно-линейный интеграл
2) Циклическая редукция
3) Метод Якоби для решения СЛУ (системы линейных уравнений)
Очень прошу помочь как можно скорее. До пятницы нужно сдать
Исходные данные подбираются рандомом (учесть это в программе).
У меня вопрос, почему люди берутся за то, что не могут выполнить? Как вообще дело до такого доходит???
Я вот знаю примерно 10 языков, но ADA, к сожалению

Если вы студент, то может выбрать другой ЯП?!

Сорри, за офтоп.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30871 / 20192 / 7875
Регистрация: 22.10.2011
Сообщений: 35,053
Записей в блоге: 6
30.10.2013, 22:01 3
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Код
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Float_Text_IO; use Ada.Float_Text_IO;

with Ada.Numerics.Discrete_Random;
with Ada.Numerics.Float_Random; use Ada.Numerics.Float_Random;

with Ada.Numerics.Elementary_Functions; use  Ada.Numerics.Elementary_Functions;

procedure Main_Jacobi is

   Eps : constant Float := 0.00001;

   type Vector is array (Natural range <>) of Float;
   type Matrix is array (Natural range <>, Natural range <>) of Float;

   procedure Do_Jacobi (A : Matrix; F : Vector; X : in out Vector);
   function Is_Repeatable (A : Matrix) return Boolean;
   procedure Print (mx : Matrix);
   procedure Print (vec : Vector);

   procedure Do_Jacobi (A : Matrix; F : Vector; X : in out Vector) is
      TX : Vector (F'Range);
      Norm : Float;
   begin
      loop
         for i in TX'Range loop
            TX (i) := -F (i);
            for g in A'Range (2) loop
               if i /= g then
                  TX (i) := TX (i) + A (i, g) * X (g);
               end if;
            end loop;
            TX (i) := TX (i) / (-A (i, i));
         end loop;

         Norm := abs (X (0) - TX (0));
         for h in TX'Range loop
            if abs (X (h) - TX (h)) > Norm then
               Norm := abs (X (h) - TX (h));
            end if;
            X (h) := TX (h);
         end loop;
         exit when Norm <= Eps;
      end loop;
   end Do_Jacobi;
   
   function Is_Repeatable (A : Matrix) return Boolean is
      Ek : Float := 0.0;
   begin
      for i in A'Range (1) loop
         for j in A'Range (2) loop
            if i /= j then
               Ek := Ek + ((-A (i, j)) / A (i, i)) ** 2;
            end if;
         end loop;
      end loop;
      Ada.Float_Text_IO.Put (Ek, Fore => 8, Aft => 3, Exp => 0);
      Ada.Text_IO.Put_Line ("");
      Ek := Sqrt (Ek);
      Ada.Float_Text_IO.Put (Ek, Fore => 8, Aft => 3, Exp => 0);
      Ada.Text_IO.Put_Line ("");
      return (Ek < 1.0);
   end Is_Repeatable;
   
   procedure Print (mx : Matrix) is
   begin
      for i in mx'Range (1) loop
         for j in mx'Range (2) loop
            Ada.Float_Text_IO.Put (mx (i, j), Fore => 8, Aft => 3, Exp => 0);
         end loop;
         Ada.Text_IO.Put_Line ("");
      end loop;
   end Print;

   procedure Print (vec : Vector) is
   begin
      for i in vec'Range loop
         Ada.Float_Text_IO.Put (vec (i), Fore => 8, Aft => 3, Exp => 0);
      end loop;
      Ada.Text_IO.Put_Line ("");
   end Print;
   
   subtype Matrix_Size_Type is Integer range 5 .. 10;
   
   package Int_Rnd is new Ada.Numerics.Discrete_Random (Result_Subtype => Matrix_Size_Type);
   use Int_Rnd;
   I_Gen : Int_Rnd.Generator;
   F_Gen : Ada.Numerics.Float_Random.Generator;

begin
   Reset (I_Gen);  --  Integer generator
   Reset (F_Gen);  --  Float generator
   
   declare
      n : constant Integer := Int_Rnd.Random (I_Gen);
      --  4;
      subtype Index is Integer range 0 .. n - 1;
      
      mx : Matrix (Index, Index) := (others => (others => 0.0));
      --  ((15.0, 2.0, -1.0, -1.0),
      --  (1.0, -10.0, -1.0, -2.0),
      --  (2.0, 1.0, 12.0, 1.0),
      --  (1.0, 1.0, 1.0, 11.0));

      res : Vector (Index) := (others => 0.0);
      --  (22.0, -14.0, -10.0, -20.0);
      
      X : Vector (Index) := (others => 0.0);

   begin
      for i in Index'Range loop
         res (i) := 10.0 * (0.5 - Random (F_Gen));
         for j in Index'Range loop
            mx (i, j) := 10.0 * (0.5 - Random (F_Gen));
         end loop;
      end loop;
      
      Put_Line ("Матрица : ");
      Print (mx);
      Put_Line ("Вектор-столбец : ");
      Print (res);         
      
      if Is_Repeatable (mx) then   
         Do_Jacobi (mx, res, X);
         Put_Line ("Результат : ");
         Print (X);
      else
         Put_Line ("Ek > 1 : Итерационный процесс расходится");
      end if;
   end;
   
end Main_Jacobi;
Но учти, что ты в 99.(9)% случаев будешь получать сообщение о расходящемся итерационном процессе (при случайной генерации матрицы). Реальная матрица, на которой тестировался метод, закомментирована. Мало ли что...
0
0 / 0 / 0
Регистрация: 30.10.2013
Сообщений: 14
30.10.2013, 22:15  [ТС] 4
PetyaVasechkin, да мне то он тоже особо не интересен этот язык, в универе вот решили обучить нас...в итоге нифига не научили ничему и задания еще дают

Добавлено через 12 минут
UI, охх, ты меня выручил очень сильно. Спасибо тебе огромное. А такой вопрос : где используется этот язык и зачем он вообще нужен? Вот проходим мы его в университете, а смысла я не понимаю.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30871 / 20192 / 7875
Регистрация: 22.10.2011
Сообщений: 35,053
Записей в блоге: 6
30.10.2013, 23:11 5
Цитата Сообщение от upgr4de Посмотреть сообщение
где используется этот язык
Посмотри вот тут: http://www.adacore.com/customers

Цитата Сообщение от upgr4de Посмотреть сообщение
и зачем он вообще нужен?
Ну, вам-то я не знаю зачем, а вот мы на нем, скажем, пишем свое ПО.
1
2303 / 1061 / 77
Регистрация: 12.03.2013
Сообщений: 4,978
31.10.2013, 17:41 6
Цитата Сообщение от UI Посмотреть сообщение
Ну, вам-то я не знаю зачем, а вот мы на нем, скажем, пишем свое ПО.
Забавно. Мне очень нравится Ada как язык.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2013, 17:41

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Страница для решения системы линейных уравнений
Доброго времени суток. Я пишу web-приложение в netbeans для решения системы линейных...

Метод Гаусса для решения линейных уравнений
Мож у когото завалялся, буду благодарен.

Программа для решения системы двух линейных уравнений
Помогите, пожалуйста, решить задачу. Составьте программу для решения системы двух линейных...

Составьте программу для решения системы линейных уравнений
Не могу сделать прогу в поскали кто сделает огромное спасибо Составьте программу для решения...


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

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

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