Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.12;
Скачать: CL | DM;

Вниз

Народ помогите Как найти Обратную матрицу   Найти похожие ветки 

 
_0$a_ ©   (2003-05-24 00:13) [0]

Помогите ;
Дайте алгоритм нахождения обр матрицы
Или дайте ссылку где прочитать
!!!!!!!!!!!!!!!!!1
Плизззз


 
Юрий Зотов ©   (2003-05-24 00:58) [1]

А что, учебники по математике уже отменили?
Или из них формулы повыкинули?


 
Asteroid ©   (2003-05-24 02:47) [2]

Ещесмотря для чего...если для OpenGL/DirectX - там есть свои ограничения, позволяющие упростить подсчет. Если в общем - есть два пути: по определению и методом Гаусса-Жордана.


 
Новик ©   (2003-05-24 09:29) [3]

Методов обращения матриц несколько десятков, если не сотен и гауссовский метод среди них считается самым неэфективным. Так у
меня относительно простую матрицу 30 на 30 он обращал 10 минут.
Я когда-то занимался матричными преобразованиями и из большой
научной книжки вытащил следующее:

function ReverseMatrix(M : MatrixPtr) : MatrixPtr;
var
mr:matrixptr;
i, j, k,size:integer;
cos_phi, sin_phi, r, x, y:extended;
begin
size:=GetMatrixRow(M);
MR:=CreateMatrix(size,size);
cos_phi:=0;
sin_phi:=0;
r:=0;
x:=0;
y:=0;
for i:= 1 to size do
for j:= 1 to size do
if i=j then setmatrixelement(MR,i,j,1)
else setmatrixelement(MR,i,j,0);
for i:= 1 to size-1 do begin
for j:=i+1 to size do begin
x:= GetmatrixElement(M,i,i);
y:= GetmatrixElement(M,i,j);
if (abs(y)<1e-100)then continue;
r:= sqrt(x*x + y*y); // Warn: r = 0 ?
if (r <1e-100 )then continue;
cos_phi:= x / r;
sin_phi:= -y / r;
SetmatrixElement(M,i,i,r);
SetmatrixElement(M,i,j,0);
for k:= i+1 to size do begin
x:= GetmatrixElement(M,k,i);
y:= GetmatrixElement(M,k,j);
SetmatrixElement(M,k,i,x*cos_phi - y*sin_phi);
SetmatrixElement(M,k,j,x*sin_phi + y*cos_phi);
end;
for k:= 1 to size do begin
x:= GetmatrixElement(MR,k,i);//a1[k*size + i];
y:= GetmatrixElement(MR,k,j);//a1[k*size + j];
SetmatrixElement(MR,k,i,x*cos_phi - y*sin_phi);
SetmatrixElement(MR,k,j,x*sin_phi + y*cos_phi);
end;
end;
end;
for k:=size downto 1 do
for i:=1 to size do begin
r:= 0;
for j:= k+1 to size do
r:= r+ GetmatrixElement(M,j,k)*GetmatrixElement(MR,i,j);
SetmatrixElement(MR,i,k,GetmatrixElement(MR,i,k)-r);
SetmatrixElement(MR,i,k,GetmatrixElement(MR,i,k)/GetmatrixElement(M,k,k));

end;
result:=mr;
end;

где MatrixPtr указатель на структуру
MatrixPtr = ^MatrixRec;
MatrixRec = record
MatrixRow : byte;
MatrixCol : byte;
MatrixArray : pointer;
end;

Сама структура и очевидные функции SetmatrixElement,
GetmatrixElement и т.д. не мои, а из широко гуляющей по
инету библиотеки matrix.pas (советую ознакомится - удачная
штука, даже решение систем линейных уравнений есть).
Скорость такого обращения матриц сопоставима с аналогичными преобразованиями MatLab"а. Удачи!


 
_0$a_ ©   (2003-05-24 17:39) [4]

Спасибо всем а особо Новик ©

А начет дир икс ил жл то там я знаю хороший способ нахождения
Но там много багов с рекурсией так - что лучше на вин апи
А визуальные компоненты тоже не плохо
С уважением к Asteroid © :)


 
Ne0   (2003-05-24 17:43) [5]

Это третья серия, что ли?


 
Думкин ©   (2003-05-26 06:08) [6]

Не знаю как так криво можно написать, чтобы матрица 30на30 обращалась 10 мин. У меня на 286-м 70на70 обращалась за не очень долго.
Что имеется под методом Гаусса(обращения матриц) - не помню. Но можно менять так.
Имеем 2 матрицы - исходную и еденичную. Исходную с помощью элементарных преобразований приводим к еденичной, все действия дублируем на еденичной - в результате получаем на месте еденичной - обратную.


 
Внук ©   (2003-05-26 09:05) [7]

Чтобы получить обратную матрицу, нужно взять исходную "Матрицу" и просмотреть ее задом наперед. Только обязательно целиком.


 
Asteroid ©   (2003-05-26 09:48) [8]

> Думкин © (26.05.03 06:08)
Это и есть Гаусса-Жордана


 
Думкин ©   (2003-05-26 10:10) [9]

> Asteroid © (26.05.03 09:48)
Ну значит - все пучком. Но скорость там не такая медленная как приведено. Не ахти, конечно.


 
Axis_of_Evil ©   (2003-05-26 10:37) [10]

2Юрий Зотов © (24.05.03 00:58)

>А что, учебники по математике уже отменили?
>Или из них формулы повыкинули?

Это я должен был сказать :>


 
_0$a_ ©   (2003-05-27 23:42) [11]

Народ все спасибо я сделал Г-Ж и все пучком



Страницы: 1 вся ветка

Текущий архив: 2003.06.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
14-35069
Polevi
2003-05-28 10:55
2003.06.12
Carmina Burana


1-34863
bander_log
2003-05-31 10:49
2003.06.12
D6 и MSWord


1-34871
АЛЕКС
2003-05-31 12:30
2003.06.12
МЕНЮ


1-34822
Mishenka
2003-06-01 23:00
2003.06.12
Как в OpenDialog запретить смену каталога?


14-35006
Bug
2003-05-26 12:14
2003.06.12
Создание ехе файла