Не уверен, что чисто алгебраические задачи будут тут уместны, но всё же. Есть, казалось бы, банальная задача: есть два набора векторов в трёхмерном пространстве (строго говоря, это цвета). Векторов заведомо больше трёх. Надо приблизительно найти матрицу 3×3, максимально близко переводящую один набор в другой.

То есть мы имеем
X*c1 = cc1
X*c2 = cc2.…
X*cn = ccn
где X имеет размерность 3×3.
Как расписать это в виде классической системы линейных уравнений, чтобы применить к ней МНК? У меня что-то голова пухнет, я линейку совсем было позабыл. Примеры на matlab/python приветствуются.

GD Star Rating
loading...

11 Responses to Не уверен, что чисто алгебраические задачи будут тут уместны, но всё же.

  1. Xyhone:

    Короче, поскольку я не нашёл готового решения, пришлось самому изобретать велик: http://pastebin.com/w9jZzrAj

  2. Amtite:

    эээ…

    c * X = cc

    где c есть матрица n x 3 (или 3 х n), cc есть матрица n x 3 (или 3 х n), X есть матрица 3 х 3

    X = c-1 * cc

    Вроде так.

  3. Amtite:

    ага, всё таки n x 3, а во вторых, обратных матриц для неквадратных матриц не существует.
    Но это фигня, можно просто сделать из векторов квадратные матрицы, поставив значения векторов на диагональ, а все остальные сделав нулями.

  4. Ef7one:

    А ну-ка тоже поизобретаю велик вместе с вами. Только мне обозначения не нравятся, введу другие. Пусть матрица 3х3 будет A, её элементы аij, индекс i(j)=1,2,3 это строка(столбец). Вектор начальный(конечный) обозначу x(y). Компоненты векторов будут иметь индексы 1,2,3. Тогда условие МНК можно записать как сумму скалярных произведений (Axk-yk,Axk-yk). Раскрывая скобки имеем СУММАk[(Axk,Axk)-2(Axk,yk)+(yk,yk)]. В общем-то на этом этапе задача уже решена, осталось продифференцировать по aij и всё нудно расписать. Получим СЛАУ из 9 уравнений на компоненты матрицы. Ща.

  5. Xyhone:

    Я так и сделал в итоге, работает

  6. Ef7one:

    Продифференцируем по а11, например. Третье слагаемое у нас вообще не зависит от компонент матрицы, от него всегда будет ноль. Первое даст СУММАk[2x1k(a11x1k+a12x2k+a13x3k)], второе СУММАk[2x1ky1k]. Приравнивая нулю имеем одну из 9 строк нашей СЛАУ, a11*СУММАk[x1kx1k]+a12*СУММАk[x1kx2k]+a13*СУММАk[x1kx3k]=СУММАk[x1ky1k]. Ох как потешно тут математику записывать, быстрее в ворде и скриншот.

  7. Ef7one:

    А теперь для любого aij. Выходит будто бы вот так: ai1*СУММАk[xikx1k]+ai2*СУММАk[xikx2k]+ai3*СУММАk[xikx3k]=СУММАk[xikyjk]. Старался не ошибиться, но лучше перепроверить!

  8. Appuper:

    О, работает!
    http://www.codecogs.com/latex/eqneditor….

    Пользуйтесь.

  9. Appuper:

    А вот эта штука тут не будет работать?

    интересная наука

  10. Xyhone:

    Мне тут ещё предложили, оказывается, классический вариант решения через псевдообратную матрицу. Результат численно совпадает с моим. Только своё решение я понимаю, а это не особо)

  11. Peein:

    Привет изобретателям велосипедов.

    Если дано матричное уравнение вида АX = B, где матрицы не обязательно квадратны,
    его решением с точки зрения наименшьих квадратов будет
    X = A^+ B

    где А^+ — псевдообратная матрица Мура-Пенроуза, она же pinv(A) в Матлабах-Питонах-Октавах.

Добавить комментарий