Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 23.01.2014, 02:20   #1 (permalink)
Chelios_rus
Member
 
Регистрация: 14.12.2013
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Решить систему линейных уравнений методом Зейделя

Помогите написать программу на языке Паскаль по приложенному файлу. Решение в Excel.
Вложения
Тип файла: rar zeidel.rar (4.3 Кб, 363 просмотров)
Chelios_rus вне форума   Ответить с цитированием

Старый 23.01.2014, 02:20
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Внимательно прочитайте содержимое этих тем

Решите систему линейных уравнений методом простой итерации
Решение уравнений методом Ньютона
Система для решения уравнений методом хорд на C/C++

Старый 23.01.2014, 14:55   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,872
Сказал(а) спасибо: 318
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 101510
По умолчанию

Цитата:
Сообщение от Chelios_rus Посмотреть сообщение
Помогите написать программу на языке Паскаль по приложенному файлу. Решение в Excel.
Да... Стыдно, но я, похоже, пас. Сам по себе метод несложный, но вот найти предварительное преобразование системы к виду, удовлетворяющему критерию сходимости (т.н. "диагональное преобладание"), мне, увы, так и не удалось. Уж я и так, и сяк - и никак.
Сожалею.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 23.01.2014, 17:31   #3 (permalink)
Chelios_rus
Member
 
Регистрация: 14.12.2013
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

печально, но спасибо что попробовали
Chelios_rus вне форума   Ответить с цитированием
Старый 23.01.2014, 19:05   #4 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,872
Сказал(а) спасибо: 318
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 101510
По умолчанию

Цитата:
Сообщение от Chelios_rus Посмотреть сообщение
печально, но спасибо что попробовали
Впрочем, завтра, если будет время, попробую "в лоб" - подумал, что условие сходимости типа "диагональное преобладание" может быть и избыточным. Авось и так сойдется.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 24.01.2014, 11:14   #5 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,872
Сказал(а) спасибо: 318
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 101510
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Впрочем, завтра, если будет время, попробую "в лоб" - подумал, что условие сходимости типа "диагональное преобладание" может быть и избыточным. Авось и так сойдется.
Ну вот - получилось-таки! Действительно, всё сошлось и программа не пошла вразнос. А могла бы: условие гарантированной сходимости здесь не выполняется. Но - повезло:
Код:
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.jpg  
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 24.01.2014, 19:04   #6 (permalink)
Chelios_rus
Member
 
Регистрация: 14.12.2013
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

ох спасибо большое! сильно выручили, прям благодарен еще раз спасибо)
Chelios_rus вне форума   Ответить с цитированием
Старый 27.01.2014, 14:07   #7 (permalink)
Chelios_rus
Member
 
Регистрация: 14.12.2013
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

такое дело, теперь желательно что бы можно было с клавиатуры ввести любые числа и получить соответствующий результат, но тоже по этому же методу, если вас не затруднит
Chelios_rus вне форума   Ответить с цитированием
Старый 27.01.2014, 16:07   #8 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,872
Сказал(а) спасибо: 318
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 101510
По умолчанию

Цитата:
Сообщение от Chelios_rus Посмотреть сообщение
такое дело, теперь желательно что бы можно было с клавиатуры ввести любые числа и получить соответствующий результат, но тоже по этому же методу, если вас не затруднит
Да не сказал бы, чтобы не затруднило.
То есть Вам нужна универсальная программа решения СЛАУ методом Гаусса-Зейделя? Большая работа. Ну вот смотрите: в Википедии приведена такая программа на Паскале, казалось бы, только добавить ввод коэффициентов и сумм, но, во-первых, там ставится жесткое условие выполнения "диагонального преобладания", и если оно не выполняется, то система объявляется несовместной, а это не всегда правильно - в частности, в Вашем примере это условие нарушено, а система решается, а вот что будет, если вставить произвольные числа, - Бог ведает, во-вторых, в программе из Вики не рассмотрен обход нулевых диагональных коэффициентов матрицы, а они, вообще говоря, недопустимы, поскольку на них идет деление.
Так что работы тут много, уж и не знаю - скорее всего, не возьмусь. Извините.
А попробуйте сами! Нет?
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 03:04.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.