Форум: "Потрепаться";
Текущий архив: 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