Подскажите кто-нибудь,пожалуйста, как решается система линейных уравнений, в которой число уравнений на несколько порядков больше числа неизвестных. Вроде бы МНК надо использовать?
Здравствуйте, Аноним, Вы писали:
А>Подскажите кто-нибудь,пожалуйста, как решается система линейных уравнений, в которой число уравнений на несколько порядков больше числа неизвестных. Вроде бы МНК надо использовать?
Один из вариантов — выбрать несколько уравнений (по числу переменных, чтобы получилась квадратная матрица) таким образом, чтобы матрица система имела преобладающую главную диагональ.
Любите книгу — источник знаний (с) М.Горький
Re[2]: СЛАУ
От:
Аноним
Дата:
06.02.03 09:25
Оценка:
Неее, как это? Нужно, чтобы в итоге полученное решение ПРИБЛИЖЕННО удовлетворяло (с погрешностью, конечно) всем уравнениям. Если я не прав, тогда скажите, что такое преобладающая главная диагональ.
Здравствуйте, <Аноним>, Вы писали:
А>Неее, как это? Нужно, чтобы в итоге полученное решение ПРИБЛИЖЕННО удовлетворяло (с погрешностью, конечно) всем уравнениям. Если я не прав, тогда скажите, что такое преобладающая главная диагональ.
Очень часто для твоего случая применяют SVD — сингулярное разложение матриц
Здравствуйте, SergIG, Вы писали:
SIG>Здравствуйте, <Аноним>, Вы писали:
А>>Неее, как это? Нужно, чтобы в итоге полученное решение ПРИБЛИЖЕННО удовлетворяло (с погрешностью, конечно) всем уравнениям. Если я не прав, тогда скажите, что такое преобладающая главная диагональ.
SIG>Очень часто для твоего случая применяют SVD — сингулярное разложение матриц SIG>
Можно почитать:
Дж. Форсайт М.Малькольм К.Моулер
"Машинные методы математических вычислений"
Сингулярное разложение или МНК, но можно проще (естественно менее эффективно).
Я помню делал методом Гаусса. Ax=и (Где унрав-ий больше неизвест.)
Приводишь ее к квадратной BAx=Bu, где И — это транспонированная A.
Если система имеет решение то ты ее решишь, а если нет то и близкого решения не получишь (В SVD можно).
PS Нужно будет позаботиться о спец. мерах чтобы ошибоки округления меньше сказывались.
Здравствуйте, Аноним, Вы писали:
А>Неее, как это? Нужно, чтобы в итоге полученное решение ПРИБЛИЖЕННО удовлетворяло (с погрешностью, конечно) всем уравнениям. Если я не прав, тогда скажите, что такое преобладающая главная диагональ.
Так и есть. Пусть все уравнения описывают некую определенную систему (объект). Часть уравнений по каким-то причинам нас не устраивают (погрешности при вычислении/измерении коэффициентов и т.д). Тогда можно отобрать часть уравнений так, чтобы на главной диагонали стояли числа, существенно большие, чем все остальные. А затем решить этут систему тем же методом Гаусса. К сожалению не помню выражений для оценки погрешности
Здравствуйте, Bell, Вы писали:
B>Так и есть. Пусть все уравнения описывают некую определенную систему (объект). Часть уравнений по каким-то причинам нас не устраивают (погрешности при вычислении/измерении коэффициентов и т.д). Тогда можно отобрать часть уравнений так, чтобы на главной диагонали стояли числа, существенно большие, чем все остальные. А затем решить этут систему тем же методом Гаусса. К сожалению не помню выражений для оценки погрешности
Возможно для небольшого числа уравнений подобный алгоритм может и подойти,
но я как-то решал систтему уравнений в которой было 1000 уравнений и всего неизвестных.
Так вначале ничего кроме SVD и не помогло. Потом уже, из-за специфики самой системы пришлось перейти к функциональному анализу.
Здравствуйте, Fiend, Вы писали:
F>Я слыхал про какой-то метод Хаусходлера (может это не имя, точно не знаю). Он подходит?
Метод Хаусхолдера (это таки имя) используется для приведения симметричной квадратной матрицы к трехдиагональной форме. Поскольку матрица в решаемой задаче не является ни симметричной ни квадратной, то о чем говорить?
Преобразования Хаусхолдера ( они же преобразования отражения ) используются на первом этапе SVD для приведения матрицы к двухдиагональной форме. Наверное, про это ты и слышал.
А вообще хочу присоединиться к дружному хору фанатов SVD: ничего лучше человечество пока не придумало.
Здравствуйте, KonstantinA, Вы писали:
KA>А чем это не метод наименьших квадратов?
Это он и есть
KA>Минимизируем <Ax-b,Ax-b> и получаем условие BAx=Bu, где B = транспонированная( A ).
ага. и погрешность будет порядка d*cond(A)*cond(A), где cond(A) — число обусловленности A, где d — ошибка округления. Если матрица содержит линейно зависимые строки, то погрешность в теории будет стремиться к бесконечности, а на практике будет просто очень большой. Предложенный тобой подход можно применить только если про матрицу точно известно, что она хорошо обусловленная.
( B ) должна быть не транспонированная( A ), а псевдообратная( A ).
Здравствуйте, Аноним, Вы писали:
А>Подскажите кто-нибудь,пожалуйста, как решается система линейных уравнений, в которой число уравнений на несколько порядков больше числа неизвестных. Вроде бы МНК надо использовать?
Могу порекомендовать компонент TMatrix из серии SDL Components Suite. У Tmatrix есть метод MultiLinReg как раз на этот случай.Если в инете не найдеш пиши Kilo@inbox.ru пришлю.Воооще матричной математики на Delphi не найдеш так что если что по поводу СЛАУ есть шли.