Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / ЧМ.Лабы.Лисовец / ЧМ.labs.by mice / lab04 / docs / from alglib.manual.ru (10.04.2005) / Аппроксимация прямыми методом наименьших квадратов / Аппроксимация прямыми методом наименьших квадратов (МНК) - Библиотека алгоритмов

.htm
Скачиваний:
33
Добавлен:
17.04.2013
Размер:
16.73 Кб
Скачать

Аппроксимация прямыми методом наименьших квадратов (МНК) - Библиотека алгоритмов H2 { FONT-SIZE: larger; FONT-FAMILY: Tahoma,sans-serif } H3 { FONT-SIZE: 12pt; FONT-FAMILY: Arial,sans-serif } INPUT { FONT-SIZE: 9pt; FONT-FAMILY: Courier New,monospace } UL { TEXT-ALIGN: justify } OL { TEXT-ALIGN: justify } A.leftmenu { FONT-SIZE: 8pt; COLOR: #cc0000; FONT-FAMILY: Tahoma,sans-serif; TEXT-DECORATION: none } A.leftmenu:hover { TEXT-DECORATION: underline } A.artlist { COLOR: #111177; TEXT-DECORATION: none } A.artlist:visited { COLOR: #111177; TEXT-DECORATION: none } A.artlist:hover { COLOR: #111177; TEXT-DECORATION: underline } A.special { FONT-SIZE: 10pt; COLOR: #000066 } A.special:visited { FONT-SIZE: 10pt; COLOR: #000066 } A.specialatt { FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #aa0000 } A.specialatt:visited { FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #aa0000 } .compact { MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px } .code { FONT-SIZE: 9pt; COLOR: #006699; FONT-FAMILY: Courier New, monospace } .smalltext { FONT-SIZE: 10pt } .halfsmalltext { FONT-SIZE: 11pt } .attention { FONT-WEIGHT: bold; COLOR: #aa0000 }

Главная Ссылки FAQ Статьи Новости Форум Контакты О сайте Terms of use Содержание - Интерполяция, аппроксимация и численное дифференцирование - Аппроксимация прямыми методом наименьших квадратов (МНК)   Аппроксимация прямыми методом наименьших квадратов (МНК) При аппроксимации функции прямыми по МНК у нас задан набор точек и значений функции в них, и мы предполагаем, что эти точки должны лежать на одной прямой. При этом число точек может быть произвольным, намного больше двух, и обычно через все сразу нельзя провести прямую. В таком случае мы считаем, что все отклонения от прямой, на которой они должны лежать, обусловлены случайными погрешностями в ходе измерений.

Как восстановить исходную прямую? Из всех прямых мы выбираем ту, для которой сумма квадратов отклонений значений функции от этой прямой минимальна. Т.е. мы минимизируем функцию

Такой выбор функции оценки качества решения не случаен. Известно, что если ошибки измерения распределяются по Гауссу и независимо, то такой выбор функции оценки приведет нас к наиболее правдоподобному результату.

Поиск коэффициентов Для поиска минимума мы приравниваем к нолю производные и . Данный случай хорош тем, что это, во-первых, не только необходимое, но и достаточное условие минимума, а во-вторых, это условие записывается в виде системы линейных уравнений относительно a и b.

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

Замечание #1

Используемый алгоритм решения системы линейных уравнений не является самым быстрым. Если вы работаете с выборками из сотен и тысяч точек, то разницу невозможно заметить, но при малом числе точек (порядка десяти) простейший метод Гаусса будет на несколько десятков процентов быстрее. Тем не менее, метод Гаусса не может корректно справиться с некоторыми вырожденными случаями, поэтому я рекомендую именно тот метод, который реализован в программе, за исключением тех случаев, когда требутся много раз выполнять МНК-аппроксимацию для наборов из малого числа точек.

Описание программы Входные параметры:

X - массив вещественных чисел с нумерацией элементов от 0 до N-1. Содержит набор абсцисс, в которых известны значения функции. Y - массив вещественных чисел с нумерацией элементов от 0 до N-1. Содержит набор значений функции. N - число точек. N >= 1

Выходные параметры:

a, b - коэффициенты аппроксимирующей прямой a + b*t

Если нашли ошибку в алгоритме - сообщите!

Реализация алгоритма Исходный код данного алгоритма доступен в версиях на C++, Visual Basic 6 и Delphi. Все версии идентичны по своей функциональности.

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

Если вы в первый раз посетили этот сайт, то: Скачайте и подключите библиотеку AP (12 КБ) - библиотеку классов и функций, которая необходима для работы программ с сайта. Архив содержит версии библиотеки для каждого из языков, представленных на сайте. Обязательно прочитайте FAQ. Обратите внимание на раздел, посвященный выбранному вами языку. И ещё - читайте комментарии. Сэкономите много времени, поскольку НУМЕРАЦИЯ ЭЛЕМЕНТОВ МАССИВОВ НЕ ВСЕГДА НАЧИНАЕТСЯ С НОЛЯ, а не все это замечают.

C++ Аппроксимация прямыми методом наименьших квадратов (МНК) (скачать, открыть в браузере)

Delphi Аппроксимация прямыми методом наименьших квадратов (МНК) (скачать, открыть в браузере)

Visual Basic 6 Аппроксимация прямыми методом наименьших квадратов (МНК) (скачать, открыть в браузере)

Реализация алгоритма на AlgoPascal Реализация алгоритма на AlgoPascal доступна для лучшего понимания сути алгоритма, если вы захотите разобраться в нем. Автоматический перевод позволяет получить работоспособную программу, но оригинал на AlgoPascal гораздо легче читать, поскольку он набирается человеком.

открыть AP-файл в браузере

    Бочканов Сергей, Быстрицкий Владимир

Copyright © 1999-2005

При поддержке проекта MANUAL.RU