• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Решить систему линейных уравнений методом Зейделя

Chelios_rus

Новые
Регистрация
13 Дек 2013
Сообщения
21
Реакции
0
Баллы
0
Решить систему линейных уравнений методом Зейделя

Помогите написать программу на языке Паскаль по приложенному файлу. Решение в Excel.
 

Вложения

Помогите написать программу на языке Паскаль по приложенному файлу. Решение в Excel.
Да... Стыдно, но я, похоже, пас. Сам по себе метод несложный, но вот найти предварительное преобразование системы к виду, удовлетворяющему критерию сходимости (т.н. "диагональное преобладание"), мне, увы, так и не удалось. Уж я и так, и сяк - и никак.
Сожалею.
 
печально, но спасибо что попробовали
 
печально, но спасибо что попробовали
Впрочем, завтра, если будет время, попробую "в лоб" - подумал, что условие сходимости типа "диагональное преобладание" может быть и избыточным. Авось и так сойдется.
 
Впрочем, завтра, если будет время, попробую "в лоб" - подумал, что условие сходимости типа "диагональное преобладание" может быть и избыточным. Авось и так сойдется.
Ну вот - получилось-таки! Действительно, всё сошлось и программа не пошла вразнос. А могла бы: условие гарантированной сходимости здесь не выполняется. Но - повезло:
Код:
Type
 Matrix=Array[1..3,1..3] of Real;
 Vector=Array[1..3] of Real;

Const
 A:Matrix=(( 1.000000,  3.00000, -1.16667),
           ( 0.264706,  1.00000, -0.20588),
           (-0.333330, -0.66667,  1.00000));
 B:Vector=(-0.16667, 0.058824, 0.666667);
 Eps=0.0018;

Var
 X1,X2:Vector;
 i,j:byte;
 Nrm:real;

Function Dif(D1,D2:Vector):Vector;
var
 p:byte;
 DX:Vector;
begin
 for p:=1 to 3 do DX[p]:=D1[p]-D2[p];
 Dif:=DX;
end;

Function Norm_Vect(NV:Vector):Real;
var
 p:byte;
 Sum:Real;
begin
 Sum:=0;
 for p:=1 to 3 do Sum:=Sum+Sqr(NV[p]);
 Norm_Vect:=Sqrt(Sum);
end;

Begin
 for i:=1 to 3 do X1[i]:=0;
 X2:=X1;
 Repeat
  for i:=1 to 3 do
   begin
    X2[i]:=B[i];
    for j:=1 to 3 do
     if j<>i then X2[i]:=X2[i]-A[i,j]*X2[j];
   end;
  Nrm:=Norm_Vect(Dif(X1,X2));
  for i:=1 to 3 do write('  ',X2[i]:8:5);
  write('        ');
  for i:=1 to 3 do write('  ',X2[i]-X1[i]:8:5);
  writeln;
  X1:=X2;
 Until Nrm<=Eps;
 Writeln;
 Writeln('x1= ',X2[1]:8:5,'     x2= ',X2[2]:8:5,'     x3= ',X2[3]:8:5);
 Readln
End.
 

Вложения

  • AA01.webp
    AA01.webp
    65.4 KB · Просмотры: 1,019
ох спасибо большое! сильно выручили, прям благодарен еще раз спасибо)
 
такое дело, теперь желательно что бы можно было с клавиатуры ввести любые числа и получить соответствующий результат, но тоже по этому же методу, если вас не затруднит
 
такое дело, теперь желательно что бы можно было с клавиатуры ввести любые числа и получить соответствующий результат, но тоже по этому же методу, если вас не затруднит
Да не сказал бы, чтобы не затруднило.
То есть Вам нужна универсальная программа решения СЛАУ методом Гаусса-Зейделя? Большая работа. Ну вот смотрите: в Википедии приведена такая программа на Паскале, казалось бы, только добавить ввод коэффициентов и сумм, но, во-первых, там ставится жесткое условие выполнения "диагонального преобладания", и если оно не выполняется, то система объявляется несовместной, а это не всегда правильно - в частности, в Вашем примере это условие нарушено, а система решается, а вот что будет, если вставить произвольные числа, - Бог ведает, во-вторых, в программе из Вики не рассмотрен обход нулевых диагональных коэффициентов матрицы, а они, вообще говоря, недопустимы, поскольку на них идет деление.
Так что работы тут много, уж и не знаю - скорее всего, не возьмусь. Извините.
А попробуйте сами! Нет?
 
Назад
Сверху