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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2009, 20:29   #11
maliyusha
Пользователь
 
Аватар для maliyusha
 
Регистрация: 23.12.2008
Сообщений: 49
По умолчанию

Если я не ошибаюсь, то обычно создают новую тему.
maliyusha вне форума Ответить с цитированием
Старый 23.11.2010, 15:33   #12
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

to puporev

Цитата:
Код:
for k:=1 to n do //прямой ход Гаусса, приведение матрицы коэффициентов к треугольному виду
     begin
       for j:=k+1 to n do
          begin
            r:=a[j,k]/a[k,k];
            for i:=k to n do
               begin
                 a[j,i]:=a[j,i]-r*a[k,i];
               end;
            b[j]:=b[j]-r*b[k];
          end;
     end;
не подскажешь, что будет означать если в строке

Код:
 r:=a[j,k]/a[k,k];
a[k,k] будет получаться равная 0?

система уравнений не имеет решения?
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 23.11.2010, 15:43   #13
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Это упрощенный вариант для матриц с преобладанием диагональных элементов.
А вообще сначала проверяется главный элемент и если он ноль, то перестановкой строк добиваются чтобы он не был равен нолю. Если в результате всех преобразований последний главный все равно ноль, то если свободный член тоже ноль, то неопределенность, если не ноль, то решений нет.
puporev вне форума Ответить с цитированием
Старый 13.12.2012, 21:08   #14
oliviya1111
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 27
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
writeln('Введите коэффициенты системы и свободные члены');
[/CODE]
как вводить коэффициенты системы и свободные члены?
oliviya1111 вне форума Ответить с цитированием
Старый 14.12.2012, 10:06   #15
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

В моем коде коэффициенты уравнений вводятся построчно вместе со свободными членами, например для примера в посте 1 вроде так
1, 1, −1, 1, 4,
2,−1, 3,− 2, 1,
1, 0, −1, 2, 6,
3,−1, 1, −1, 0
puporev вне форума Ответить с цитированием
Старый 18.02.2013, 15:21   #16
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
Радость

Цитата:
Сообщение от puporev Посмотреть сообщение
Это упрощенный вариант для матриц с преобладанием диагональных элементов.
А вообще сначала проверяется главный элемент и если он ноль, то перестановкой строк добиваются чтобы он не был равен нолю. Если в результате всех преобразований последний главный все равно ноль, то если свободный член тоже ноль, то неопределенность, если не ноль, то решений нет.
Цитата:
А вообще сначала проверяется главный элемент и если он ноль, то перестановкой строк добиваются чтобы он не был равен нолю.
хорошо, а как это делать ? есть у кого исходник
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Старый 18.02.2013, 15:44   #17
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот писал когда-то, могли бы и сами в инете поискать.
Код:
uses crt;
type
   Tmas=array[1..20] of real;
   Tmatr=array[1..20] of Tmas;
procedure Per(k,n:integer;var a:Tmatr; var b:Tmas);
var i,j:integer;z:real;
begin
   z:=a[k,k];i:=k;//если главный элемент строки (a[k,k])=0, z=0; запоминаем эту строку  
                                            ///(i:=k;) 
   for j:=k+1 to n do //от следующей стороки до конца ищем самый большой элемент в том столбце, где 0
     begin
       if abs(a[j,k])>z then //обычный поиск максимального
          begin
            z:=a[j,k];
            i:=j;
          end;
       if i>k then //если нашли больше ноля
          begin     
            for j:=k to n do //то делаем обмен элементами между строкой с нолем и            
               begin    //строкой с максимальным элементом в столбце с нолем
                 z:=a[i,j];a[i,j]:=a[k,j];a[k,j]:=z;
               end;
            z:=b[i];b[i]:=b[k];b[k]:=z; //обмениваем свободные члены
          end;
       end;
     end;
var a:Tmatr; //матрица системы
    b:Tmas;   //массив свободных членов
    x:Tmas;   //массив корней системы
    n,i,j,k:integer; //счетчики циклов
    z,r,g:real;  //вспомогательные переменные при расчетах
begin
clrscr;
write('Введите количество уравнений n=');
readln(n);
writeln('Введите коэффициенты системы и свободные члены');
for i:=1 to n do
for j:=1 to n+1 do
read(A[i,j]);  //вводим в строку через пробел коэффициенты и свободный член первого уравнения, жмем  
                    //Enter, 
                   //вводим следующую строку и так до конца
clrscr;     //очищаем экран
writeln('Матрица коэффициентов и свободных членов'); //выводим матрицу системы
for i:=1 to n do
  begin
    for j:=1 to n+1 do
    write(A[i,j]:6:2);
    writeln;
  end;
//Прямой ход Гаусса, преобразуем квадратную матрицу коэффициентов в треугольную типа
//2,35 -5,36 4,56 16,25
//0,00 -3,25 7,26 25,39
//0,00 0,00 2,35 59,23  //здесь потом найдем 3-ий корень (59,23/2,35), а от него обратным ходом остальные
for i:=1 to n do
b[i]:=a[i,n+1];  //присваиваем значения массиву свободных членов (последний столбец матрицы)
for k:=1 to n do  //начинаем с первой строки
     begin
       if a[k,k]=0 then Per(k,n,a,b);//добавлена процедура
       for j:=k+1 to n do //идем по строке выше главной диагонали до конца
          begin
            r:=a[j,k]/a[k,k]; //вычисляем коэффициент приведения первых коэффициентов, чтобы они были   
                                    //равны и при вычитании давали 0 (освобождаемся от очередного неизвестного), 
                                    //например    
                                    //1-е ур. 2х1+3х1-4х3=12
                                     //2-е ур -3х1+2х2+2х3=25
                                     //r= -3/2, тогда 2х1*-3/2=-3х1 
                                     //вычтем из ур.2-ур.1, х1 исчезнет 
           for i:=k to n do
               begin
                 a[j,i]:=a[j,i]-r*a[k,i]; //сейчас умножив все первое урававнение на -3/2,  вычитаем из первого  
              end;                         //уравнения второе      
           b[j]:=b[j]-r*b[k];             //и свободнгые члены
        end;
     end;
   //система будет 1.    2х1+3х1-4х3=12
   //                         2.   0х1+(2-(3*-3/2))х2 +(2+(4*-3/2)=25-12*(-3/2)
//Обратный ход Гаусса, находим корни
for k:=n downto 1 do //от последней строки к первой
     begin
       r:=0;
       for j:=k+1 to n do //в строке от главной диагонали вправо (где не ноли)
         begin
           g:=a[k,j]*x[j]; //умножаем коэффициенты на  известные уже корни
           r:=r+g;         //суммируем
         end;
      x[k]:=(b[k]-r)/a[k,k];  //из преобразованного прямым ходом свободного члена вычитаем полученную  
                                      //суммму и делим на первый коэффициент (который на главной диагонали)
     end;	
writeln('Корни системы:'); //выводим результат
for i:=1 to n do
write('x[',i,']=',x[i]:0:2,'   ');
readln;
end.
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите,плиз! Задача на паскль! Решение линейных уравнений методом Гаусса! vdv08 Помощь студентам 4 21.10.2008 23:33
Решить систему линейных уравнений, которая содержит до 200 переменных, методом Гаусса. Etlau Помощь студентам 5 05.05.2008 07:50