Аппроксимация функции полиномом

Пусть заданы значения функции в некоторых точках и степень полинома. Необходимо выбрать коэффициенты полинома так, чтобы минимизировать отклонения от заданных значений функции. Обычно минимизируют сумму квадратов отклонений, т.е. решают задачу наименьших квадратов. Известно несколько способов решения этой задачи. Ниже представлены два из них.

bool apprLSS_H ( nat n, CArrRef<double> x, CArrRef<double> y, nat m, ArrRef<double> c );

bool apprLSS_O ( nat n, CArrRef<double> x, CArrRef<double> y, nat m, ArrRef<double> c );

Первый из них решает задачу наименьших квадратов при помощи преобразований Хаусхолдера. В моих экспериментах этот способ давал наилучшую точность в сложных случаях.
Второй способ использует для решения ортогонализацию Грамма-Шмидта и работает несколько быстрее предыдущего.

Входными данными являются: количество исходных точек, ссылки на массивы x и y, количество коэффициентов полинома и ссылку на них. Обратите внимание, что m - это не степень полинома, а количество коэффициентов. Степень полинома равна m-1.

Описание класса Matrix находится здесь
Описание шаблонов классов CArrRef и ArrRef находится здесь.

Исходники находятся в approx.cpp

Наверх

Hosted by uCoz