Пусть заданы значения функции в некоторых точках и степень полинома. Необходимо выбрать коэффициенты полинома так, чтобы минимизировать отклонения от заданных значений функции. Обычно минимизируют сумму квадратов отклонений, т.е. решают задачу наименьших квадратов. Известно несколько способов решения этой задачи. Ниже представлены два из них. 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 находится здесь
Исходники находятся в approx.cpp Наверх |