LINUX.ORG.RU

Решение наименьшими квадратами прямоугольных систем с комплексными числами

 


0

2

Сижу уже пару часов, пытаюсь нагуглить нормальный вариант решения системы уравнений с комплексными числами: Ax=b, где A — прямоугольная комплексная матрица (ортонормированный базис), x — искомый вектор действительных чисел (коэффициенты разложения b по базису A), b — раскладываемый ряд.

«Просто» разложить не могу, т.к. мало данных (ошибка зверская вылезает), поэтому хочу попробовать метод наименьших квадратов (на том же наборе точек для действительного вектора b он дал превосходные результаты).

Сразу увидел, что применяемый мною метод QR-разложения в GSL не имеет комплексного аналога. Взялся за LU-разложение, но на этапе компиляции увидел «gsl: luc.c:64: ERROR: LU decomposition requires square matrix» — матрица-то должна быть квадратной (а я что-то в мануале на это внимания не обратил).

Вопрос: есть ли в GSL (ну, пусть даже не GSL, а BLAS или даже LAPACK) методики решения таких уравнений?


Ответ на: комментарий от Anon

А, забыл добавить: в точках же не точное значение векторного поля, а с некоторой погрешностью.

в общем, после некоторых рассчетов получилось:

\frac {\|\Delta x\|} {\|x\|} \leq \|Delta A\|+ 2\frac {\|Delta b\|} {\|b\|}

что не отличается (точнее отличается, но на 1*\frac {\|Delta b\|}{\|b\|}, а в случае плохой \|\Delta A\| и вообще намного лучше, чем прямое решение).

от теоретической оценки погрешности прямого решения системы. Хоть МНК, хоть чем угодно. Поэтому таки в другое место копать надо.

какая у тебя погрешность вычисления матрицы A?

dikiy ★★☆☆☆
()
Последнее исправление: dikiy (всего исправлений: 4)
Ответ на: комментарий от Anon

Ок, понял.

Значит, задача сводится к тому, чтобы получить выражение для метода наименьших квадратов по набору комплексных неравномерно распределённых точек.

Потом используем этот метод как операцию скалярного умножения и получаем способ разложить точки по полиномам с минимальным среднеквадратичным отклонением.

Как выглядит метод наименьших квадратов для комплексных неравномерно распределённых точек? (я сам искренне не в курсе)

prischeyadro ★★★☆☆
()

И кстати кто тебе мешает запрограммировать QR разложение (правда в случае неквадратной A - это называется QS разложение) самому, если gsl не хавает? Ведь стандартный метод Хаусгольдеровой трансформаци отлично работает и на комплексной матрице.

dikiy ★★☆☆☆
()
Ответ на: комментарий от prischeyadro

Как выглядит метод наименьших квадратов для комплексных неравномерно распределённых точек? (я сам искренне не в курсе)

Я бы, наверное, вычислял корреляционную функцию и искал бы экстремум (она комплексная — стало быть, искал максимальное по модулю значение). Как-нибудь надо учитывать неравномерность распределения точек? По идее, среднеквадратичная ошибка будет вычисляться по отклонению от всех точек, независимо от того, где они расположены.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от dikiy

Едрена сковородка!

Поищу завтра примеры.

Anon
() автор топика
Ответ на: комментарий от ebantrop

ну, я думаю, что Эдик ортогонализировал матрицу A. ибо если нет, то конечно бредятина :) оттуда и погрешность такая жесткая. Если просто на A^T домножать.

to Eddy_Em: попробуй тогда решить систему такую: A^T*A*x=A^T*b. Матрица A^T*A будет инвертируемой.

dikiy ★★☆☆☆
()
Ответ на: комментарий от Anon

Там алгоритм на месяц работы! А готовья нет.

на вечер от силы. но раз в LAPACK есть, то пофиг.

dikiy ★★☆☆☆
()
Ответ на: комментарий от ebantrop

Эдик ортогонализировал матрицу A

Зачем он это сделал?

не знаю. Но ««Просто» разложить не могу» и его коммент в ответ на мой Решение наименьшими квадратами прямоугольных систем с комплексными числами (комментарий)

тоже говорит именно об этом.

да и вообще тогда становится непонятна постановка вопроса....

Anon может ты вообще как-то не так аппроксимируешь?

если у тебя есть базис в пространстве, то возьми, да проведи через свои точки линии. Получишь кусочно-линейную функцию. Потом берешь, да проецируешь ее на пространство, то есть тупо интегрируешь вместе в соответствующими базисными функциями (я ж так понимаю, что у тебя скалярное произведение именно интегралом задано). и никакой системы решать не надо будет.

dikiy ★★☆☆☆
()
Ответ на: Котелок уже закипел от Anon

Слушай, вся проблема у тебя в том, что «обычная» операция скалярного умножения, используемая в «обычном» разложении по базису, не даёт результат с минимальной СКО, как должно было бы быть (мне кажется, это какой-то косяк, ну да пусть). Определи скалярное умножение на основе МНК для одного полинома Жао и используй его для оптимального по минимуму СКО разложения. Всё, проблема решена.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от dikiy

да и вообще тогда становится непонятна постановка вопроса....

Да, какой то бред выходит. А если это просто полиномы, то может тупо попробовать 1, x, x^2 ... и посмотреть что получится.

ebantrop
()
Ответ на: комментарий от dikiy

Тупо интегрировать — получается рассогласование из-за ошибок. Раньше это делали ручками, сглаживая кривые на миллиметровке. Потом на фортране, но там такая муть, что я вообще не понимаю, как какие-то результаты получались (попытался воспроизвести, вышло хрен знает что).

Anon
() автор топика
Ответ на: комментарий от Anon

Затем, что неортогональная нафиг не нужна!

так если МНК травить, то никакая ортогональная не нужна. А если ортогональная, то МНК не нужен. Так что ты при ортогонализации небось погрешностей навставлял.

Тупо интегрировать — получается рассогласование из-за ошибок.

Откуда и как они вылазят? это ж все можно посчитать. почему ты думаешь, что при интегрировании ошибку будут меньше? кроме того (навскидку прикинул) твоим методом ты приближаешь не кусочно линейную функцию, а ступенчатую, которая даже не является слабо дифференцируемой. В зависимости от задачи это может означать от «ничего страшного» до «отсутствие сходимости».

dikiy ★★☆☆☆
()
Последнее исправление: dikiy (всего исправлений: 1)
Ответ на: комментарий от Anon

Затем, что неортогональная нафиг не нужна!

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

ebantrop
()
Ответ на: комментарий от dikiy

так если МНК травить, то никакая ортогональная не нужна

В этом случае решение будет сильно неоднозначным.

А если ортогональная, то МНК не нужен

Нужен, когда мало данных. В коммерческой софтине, кстати, используют именно МНК. Только хрен от них добьешься алгоритмов.

твоим методом ты приближаешь не кусочно линейную функцию, а ступенчатую

Дык, что поделать? Какая есть.

это может означать от «ничего страшного» до «отсутствие сходимости»

Второе обычно. Но, как говорится, "партия сказала: надо!".

Anon
() автор топика
Ответ на: комментарий от Anon

так если МНК травить, то никакая ортогональная не нужна

В этом случае решение будет сильно неоднозначным.

ерунда. решение в идеале то же самое. А на практике лучше, ибо нет погрешностей при ортогонализации.

А если ортогональная, то МНК не нужен

Нужен, когда мало данных. В коммерческой софтине, кстати, используют именно МНК. Только хрен от них добьешься алгоритмов.

не нужен. Это все эквивалентные преобразования.

твоим методом ты приближаешь не кусочно линейную функцию, а ступенчатую

Дык, что поделать? Какая есть.

приближать кусочно-линейную. Ведь именно она приближает реальную в последствии.

это может означать от «ничего страшного» до «отсутствие сходимости»

Второе обычно. Но, как говорится, «партия сказала: надо!».

ну смотри...

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

решение в идеале то же самое

Нет: нужно найти коэффициенты по ортогональному базису Цернике. А это невозможно без ортогонализации векторного базиса (там, кстати, весьма хитрая ортогонализация идет, судя по публикациям этого китайца, Жао лет 5 выдумывал, а потом еще лет 15 доводил до ума свои полиномы).

ну смотри...

Дык. Буду пробовать "в лоб". А там уже отпишусь. Надеюсь, не пройдет и недели...

Anon
() автор топика
Ответ на: комментарий от Anon

ты меня окончательно запутал......

Ну да ладно. Надеюсь, что ты знаешь что делаешь и ракеты таки полетят вверх а не вниз :)

dikiy ★★☆☆☆
()
Ответ на: комментарий от Anon

Полиномы — векторное поле! Векторные полиномы, понимаешь? Не скаляры.

То есть у тебя sum a_i x_i^i по i, 0...n, где x_i векторная величина? А с чего ты тогда взял что линейный МНК будет работать?

ebantrop
()
Ответ на: комментарий от ebantrop

С того, что есть куча статей (и в LAPACK это есть, но через жопу).

Anon
() автор топика
Ответ на: комментарий от Anon

В 3D придумай как считать расстояние от двух прямых. В стиле линейных наименьших квадратов.

aedeph_ ★★
()
Ответ на: комментарий от aedeph_

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

факт.

dikiy ★★☆☆☆
()

Таки зря удалял

Если A - ортонормированный базис, то x = A^T * b и есть МНК.

Если в матрице A строк меньше, чем столбцов, то количество решений в общем случае бесконечно, а x = A^T * b дает однно из них.

Ты можешь четко сформулировать, в чем проблема?

ЗЫ только для комплексных A и b будет вот так:

x = Re(A^H * b)

при условии, что A^H * A = E

A^H = сопряженная матрица

Waterlaz ★★★★★
()
Последнее исправление: Waterlaz (всего исправлений: 1)
Ответ на: комментарий от Waterlaz

Ты можешь четко сформулировать, в чем проблема?

Я же выше сказал: захотелось выпендриться и повысить точность вычислений с нескольких процентов до хотя бы 0.1%. Фигвам. Не вышло.

Anon
() автор топика
Ответ на: комментарий от Anon

вектора двумерные, поэтому я и решил их комплексными числами заменить

А ты уверен что это одно и то же? Потому что правила перемножения таки отличаются... М.б. стоит смотреть на это хозяйство как на две сист. у-й (для каждой компонеты своя) напр?

AIv ★★★★★
()
Ответ на: комментарий от AIv

вектора двумерные, поэтому я и решил их комплексными числами заменить

Аааа, вот почему бред получается. Это просто пэлестно. Я как-то пропустил сий гениальный шаг. Плачу весь. И эти люди с учеными степенями запрещают другим ковыряться в носу.

ebantrop
()
Ответ на: комментарий от AIv

Потому что правила перемножения таки отличаются...

Знаю. Это к делу не относится. У меня вектор X — действительный.

Anon
() автор топика

Эдди, я понимаю, что тебе, наверное, интересно сраться на такие небанальные темы, как можно ли представить двумерные векторы комплексными числами, но можешь пжлст прокомментировать, что там у тебя со скалярным произведением на этом пространстве? Как оно определено и, если тебе известно, как будет на нём выглядеть МНК по набору точек для отдельно взятого полинома?

prischeyadro ★★★☆☆
()
Ответ на: комментарий от prischeyadro

что там у тебя со скалярным произведением на этом пространстве?

Ax = Re(A)*x +i*Im(A)*x.

как будет на нём выглядеть МНК по набору точек для отдельно взятого полинома?

Минимизация невязки. Если невязка - D, т.е. Ax=Y+D, то МНК стремится обратить ее в нуль. В моем случае невязка — это \sum(\Re(D)^2+\Im(D)^2).

Anon
() автор топика
Ответ на: комментарий от Anon

Я имею ввиду - как собственно процесс скалярного умножения неравномерного набора точек на полином происходит?

prischeyadro ★★★☆☆
()
Ответ на: комментарий от Anon

A имеет размер m x n

P = [real(A); imag(A)] имеет размер 2m x n c = [real(b); imag(b)] имеет размер 2m x 1

псевдорешение Px=c вектор размера n x 1, и никаких отдельных наборов для комплексной и действительной части.

maggotroot
()
Ответ на: Котелок уже закипел от Anon

Вам же ответили --- замените комплексеую систему эквивалентной действительной и используйте тот же МНК, что и раньше, для действительного случая.

anonymous
()
Ответ на: комментарий от Anon

Ты должен мне новый мосг, а лучше два (второй я съем).

Если X действительный, а A и b комплексные, то ЕНИП (я давно забыл линейку) система решений не имеет, потому что для Im и Re вектора X будут разные?

Если тебя это (2 разных Х) устраивает, то это просто две вааще независимые системы, и зачем ты тогда запрещаешь ebantrop-у ковыряться в носу?;-)

Или вообще где?

AIv ★★★★★
()
Ответ на: комментарий от ebantrop

И эти люди с учеными степенями запрещают другим ковыряться в носу.

А кто тут с учеными степенями О_О?

AIv ★★★★★
()
Ответ на: комментарий от prischeyadro

Не понял вопроса. У меня векторное поле, чьи величины с определенной погрешностью известны в небольшом наборе неравномерно расположенных точек.

А по теме: я уже давным-давно сказал, что понял, что задачу решить нельзя. Все!

Anon
() автор топика

Решето!

Нет решений. Либо есть, но через задницу. Придется обойтись хреновой точностью.

Anon
() автор топика
Ответ на: Решето! от Anon

Ты какой-то странный. Твоя изначальная задача: «решить» Ax=b, где A и b комплексные, а x - действительные, что есть то же самое, что min_x |Ax-b|_2 решается элементарно, и тебе в этом треде уже несколько человек показало как это сделать.

И нет!:

А вот ничего подобного! В этом случае будет то же самое, что по-отдельности решать, т.к. длина ответа будет в 2 раза больше нужной.

не будет там никакого ответа в 2 раза больше нужного. Так что ты либо матрицы умножать не умеешь, либо задачи свои формулировать.

maggotroot
()
Ответ на: комментарий от maggotroot

Ты мне предлагаешь перемножить матрицы компонент комплексных чисел? Зачем?

И как это сделать мне только здесь показали. Если будет время, почитаю. Вполне возможно, что это и есть то, что мне нужно. Остальные же советовали всякую хрень.

Anon
() автор топика
Ответ на: комментарий от Anon

Ты понимаешь, что задачу min_x |Ax-b|^2_2

где А, b комплексные, x действительный, можно переписать так:

min_x |i*Im(A)*x - i*Im(b) + Re(A)x - Re(b)|^2_2

это эквивалентно

min_x |Px - c|^2_2,

где P = [Im(A); Re(A)] (добавляем снизу к Im(A) строки Re(A))

c = [Im(b); Re(b)]

Все, это решается обычным псевдообращением.

maggotroot
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.