Разложить сложное матричное преобразование на ряд простых преобразований?

Своего рода определение" , когда два потока получают доступ к тому же местоположению в памяти одновременно, и по крайней мере один из доступов является записью ". В ситуации поток "читателя" может получить старое значение или новое значение, в зависимости от которого поток "выигрывает гонки". Это - не всегда bug— на самом деле некоторые действительно волосатые алгоритмы низкого уровня делают это на purpose— но этого нужно обычно избегать. Gury give's @Steve хороший пример того, когда это могла бы быть проблема.

9
задан Marcin 24 July 2009 в 12:28
поделиться

2 ответа

Разложение по сингулярным значениям (см. Также этот блог и этот PDF ). Он превращает произвольную матрицу в композицию из 3-х матриц: ортогональных + диагональных + ортогональных. Ортогональные матрицы - это матрицы вращения; диагональная матрица представляет собой перекос по первичным осям = масштабирование.

Перевод добавляет в игру гаечный ключ, но что вам нужно сделать, так это убрать трансляционную часть матрицы, чтобы у вас была матрица 3x3, запустите SVD на ней чтобы дать вам вращение + наклон, затем снова добавьте часть перемещения. Таким образом у вас будет вращение + масштаб + вращение + преобразование композиции из 4 матриц. Вероятно, это можно сделать в 3-х матрицах (вращение + масштабирование по некоторому набору осей + перевод), но я не уверен, как именно ...

9
ответ дан 4 December 2019 в 21:50
поделиться

Yes, but the solution will not be unique. Also you should rather put translation at the end (the order of the rest doesn't matter)

For any given square matrix A there exists infinitely many matrices B and C so that A = B*C. Choose any invertible matrix B (which means that B^-1 exists or det(B) != 0) and now C = B^-1*A.

So for your solution first decompose MC into MT and MS*MR*MSk*I, choosing MT to be some invertible transposition matrix. Then decompose the rest into MS and MR*MSk*I so that MS is arbitrary scaling matrix. And so on...

Now if at the end of the fun I is an identity matrix (with 1 on diagonal, 0 elsewhere) you're good. If it is not, start over, but choose different matrices ;-)

In fact, using the method above symbolically you can create set of equations that will yield you a parametrized formulas for all of these matrices.

How useful these decompositions would be for you, well - that's another story.

If you type this into Mathematica or Maxima they'll compute this for you in no time.

0
ответ дан 4 December 2019 в 21:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: