2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Алгоритм обращения квадратной матрицы
Сообщение15.01.2007, 23:12 
Вот придумал алгоритм обращения квадратной матрицы, с исходниками на CPP.

Матрица обращается на месте, без использования памяти на дополнительные матрицы. С выбором ведущего элемента.

Теория метода и исходники - http://www.drobotenko.com/code_rus.html

 
 
 
 
Сообщение03.05.2007, 23:29 
Старые коды с Борланда пришлось переписать. Теперь там есть архив для VC Коды совместима со стандартом СПП. - Дело в том что СПП по части темплайтов сильно меняется.

Семантика указателя (а=б создает алиас), без перегруженных операций, иначе копирований неизбежать и потери производительности.. Тоесть fun(A,..) не A=M*V. Сейчас есть версия double с итераторами присвоения, пересылки и темплате. Темплате может работать с матрицами-векторами любого типа и с любыми контейнерами, вклоючая просто массивы

Про алгоритмы:
Инверсия матрицы вообще не требует памяти – тоесть на месте. СЛАУ создает внутри копию, которую портит, исходные оставляет. Мои методы точные и быстрые. Мое СЛАУ подходит для МНК всегда, в отличии от LU разложения, которое переопределенные системы не считает. Детерминант всегда считается.

 
 
 
 
Сообщение23.10.2007, 05:43 
я попробовал ваш алгоритм как вы его описали по ссылке на произвольной матрице 2x2, но у меня не сошлось. Вы не могли бы пояснить на таком простейшем примере? Должно получиться
\left(\begin{array}{cc}a & b\\c & d \end{array}\right)^{-1} = \frac{1}{ad-bc}\left(\begin{array}{cc}d & -b\\-c & a \end{array}\right)

 
 
 
 
Сообщение24.10.2007, 13:14 
vasionok писал(а):
я попробовал ваш алгоритм как вы его описали по ссылке на произвольной матрице 2x2, но у меня не сошлось. Вы не могли бы пояснить на таком простейшем примере? Должно получиться
\left(\begin{array}{cc}a & b\\c & d \end{array}\right)^{-1} = \frac{1}{ad-bc}\left(\begin{array}{cc}d & -b\\-c & a \end{array}\right)

Для простоты первый ведущий будет a никакие перестановки не понадобятся. Тогда второй на месте d. Все простые элементы это d из него вычитается b*c/a. Потом делим строки и столбцы ведущего на a, это b и c. Ну и само a. тогда после первого шага \left(\begin{array}{cc}-1/a & b/a\\c/a & d-bc/a  \end{array}\right) или \left(\begin{array}{cc}-1/a & b/a\\c/a & (ad-bc)/a  \end{array}\right) Теперь ведущий (ad-bc)/a . Повторяя тоже получим как у Вас, только с обратным знаком $\frac{-1}{ad-bc }$ \left(\begin{array}{cc}d & -b\\-c & a \end{array}\right) . Для левого верхнего распишем подробней $\frac{-1}{a}$-$\frac{b}{a}$$\frac{c}{a}$$\frac{a}{ad-bc}$  = $\frac{ -(ad-bc)-bc)}{a(ad-bc)}$   = $\frac{ -d}{ad-bc}$, Попутно можно получить детерминант, как произведение ведущих a*((ad-bc)/a)=ad-bc

 
 
 
 
Сообщение25.10.2007, 19:22 
drob писал(а):
... Мои методы точные и быстрые. Мое СЛАУ подходит для МНК всегда, в отличии от LU разложения, которое переопределенные системы не считает. Детерминант всегда считается.

Подскажите пожалуйста, как Ваш "быстрый и точный метод" применить к нахождению собственных векторов методом обратной итер. (Решение СЛАУ). С точки зрения "железа" необходимо решать вырожденные СЛАУ.

 
 
 
 
Сообщение30.10.2007, 03:34 
abc_qmost писал(а):
drob писал(а):
... Мои методы точные и быстрые. Мое СЛАУ подходит для МНК всегда, в отличии от LU разложения, которое переопределенные системы не считает. Детерминант всегда считается.

Подскажите пожалуйста, как Ваш "быстрый и точный метод" применить к нахождению собственных векторов методом обратной итер. (Решение СЛАУ). С точки зрения "железа" необходимо решать вырожденные СЛАУ.

То что "считается всегда" это штука не очень хитрая, но полезная и удобная. Просто когда ведущий становится маленьким остальные координаты не рассматриваются. Можно хотябы для диагностики использовать. Сейчас в нелинейных задаче это использую. Есть набор параметров, которые можно закрепить или оптимизировать и вобщем всегда программа как-то работает, тоесть оптимизирует тот набор что может.

СЛАУ там самый обыкновенный, за исключением того что "считается всегда". Быстрый и точный метод - это про обращение матриц. Коды компактные строчек 50 всего, подходят для низкоуровневой оптимизации . А если взять http://www.netlib.org/cgi-bin/netlibfil ... 2Fdgetri.f из http://www.netlib.org/lapack/double/ то там 500 и еще плюс всякие EXTERNAL XERBLA которые неизвестно где. Точные - потому что полный выбор ведущего.

 
 
 
 Re: Алгоритм обращения квадратной матрицы
Сообщение30.10.2007, 07:27 
drob писал(а):
Вот придумал алгоритм обращения квадратной матрицы, с исходниками на CPP.


Вы его где-нибудь публиковали?
хотелось бы посмотреть статьи.

 
 
 
 Re: Алгоритм обращения квадратной матрицы
Сообщение31.10.2007, 00:14 
KSergP писал(а):
Вы его где-нибудь публиковали?
хотелось бы посмотреть статьи.

Нигде не опубликовано – есть только то, что на сайте

 
 
 
 Re: Алгоритм обращения квадратной матрицы
Сообщение31.10.2007, 05:19 
drob писал(а):
KSergP писал(а):
Вы его где-нибудь публиковали?
хотелось бы посмотреть статьи.

Нигде не опубликовано – есть только то, что на сайте


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

 
 
 [ Сообщений: 9 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group