Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычислительная математика, Паскаль 
:(
    Опции темы
Ura20007
Дата 22.11.2007, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 22.4.2007

Репутация: нет
Всего: 1



Ребятки помогите доделать програмку.Нужно дописать нахождение определителя матрицы.
Код программы прикрепил

Это сообщение отредактировал(а) Ura20007 - 22.11.2007, 16:17

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  P1.PAS 2,66 Kb
PM MAIL   Вверх
Ofer
Дата 23.11.2007, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



Когда-то в инсте решал определитель методом Гауса. Кидаю этот метод, может он тебе поможет. Переделать под нужный размер матрицы не сложно.

Код

procedure TMath.GayssMethod;
var
  i,j,n,pos : Integer;
  mnow1, mnow2 : Real;
begin
  n := 1;
  WriteLn('Исходный массив');
  aViv(a);  {Процедура выводит матрицу на экран. Матрица а описана ранее, как глобальная}
  WriteLn('Ход работы');
  WriteLn;
  for j := 1 to 3 do
  begin
    for i := n to 3 do
    if a[i+1,j] <> 0 then
    begin
      mnow1 := a[j,j];
      mnow2 := a[i+1,j];
      for pos := 1 to 4 do
      begin
        a[i+1,pos] := a[i+1,pos]*mnow1 - a[j,pos]*mnow2;
        a[i+1,pos] := a[i+1,pos]/mnow1;
      end;
      aViv(a);
      ReadLn;
    end;
    n := n + 1;
  end;
  WriteLn('Определитель матрицы равен ',(a[1,1]*a[2,2]*a[3,3]*a[4,4]):8:8);
  ReadLn;
end;



Надеюсь это тебе пригодится smile
PM MAIL ICQ   Вверх
primax
Дата 25.11.2007, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 29.12.2006
Где: НТУУ-КПИ.Киев

Репутация: нет
Всего: нет



Никогда не сталкивался с такими заданиями) хотя по курсу вышки помню только метод разложения строки на арифмитические дополнения. Можно написать рекурсивный алгоритм для поиска определителя и он будет фактически для любой размерности smile
 Но это наверна не рационально)
П.С. Не читал код метода Гаусса (2 ночи всетаки), но эт случаем не треугольный метод (когда над\под главной диагональю одни нули)? Потомучто других методов для поиска детерминанта из вышки не помню. 

Это сообщение отредактировал(а) primax - 25.11.2007, 03:01
PM WWW ICQ Skype   Вверх
Ofer
Дата 25.11.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



primax, это так и есть. Формируется треугольник из нулей под главной диагональю. Определитель можно еще найти понижением порядка, рекурентных соотношений, методом квадратных корней, присоедененной матрицы, методом елементарных преобразований......  smile 
Гауса и два последних наиболее простые. ИМХО
PM MAIL ICQ   Вверх
BSE
Дата 25.11.2007, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 25.11.2007

Репутация: нет
Всего: нет



var F, G: Text;
    I, J: Longint;
    N: Byte;
    Matrix, Buff: Array[1..100, 1..100] of Integer;

function PlusMin(I: Longint): Longint;
begin
   if I mod 2= 0 then PlusMin:= -1 else
      PlusMin:= 1;
end;

function Summ(Y: Byte): Longint;
var I, M, J, X1, X2: Byte;
    Summ2: Longint;
begin
   if (N- Y)= 1 then begin
      X1:=0;
      for I:= 1 to N do
         if Buff[I, N-1]=1 then
            if X1=0 then X1:= I else
               begin
                  X2:= I;
                  break;
               end;
      Summ:= Matrix[X1, N-1]*Matrix[X2, N]- Matrix[X1, N]*Matrix[X2, N-1];
   end else begin
      Summ2:=0;
      J:= 0;
      for I:=1 to N do begin
         if Buff[I, Y]<> 0 then begin
            Inc(J);
            for M:= Y+1 to N do Buff[I, M]:=0;
            Summ2:= Summ2+PlusMin(J)* Matrix[I, Y]* Summ(Y+1);
            for M:= Y+1 to N do Buff[I, M]:=1;
         end;
      end;
      Summ:= Summ2;
   end;
end;

begin
   Assign(F, 'InPut.txt');
   Assign(G, 'OutPut.txt');
   Reset(F);
   Rewrite(G);
   Read(F, N);
   for I:=1 to N do
      for J:=1 to N do begin
         Read(F, Matrix[I, J]);
         Buff[I, J]:= 1;
      end;
   Write(G, Summ(1));
   Close(F);
   Close(G);
end.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0733 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.