Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
_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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-34859
KpeHgeJIb
2003-05-31 01:48
2003.06.12
Как создать модальное сообщение?


14-35068
Konsul
2003-05-26 12:47
2003.06.12
ЯЗЫКИ!


3-34707
Levan Varshanidze
2003-05-23 09:49
2003.06.12
Глюк с Quickreport


3-34692
Marat111
2003-05-22 15:23
2003.06.12
Получить оповещение от базы


8-34930
sndanil
2003-02-27 14:36
2003.06.12
Логарифмическая шкала





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский