Комментарии 11
График!!!
2 вопроса:
1 что такое dataGridTable?
2 зачем заполнять масив нулями?
1 что такое dataGridTable?
2 зачем заполнять масив нулями?
Интересные здесь люди: то за «почти» велосипед минусуют, как только могут, то за явный — плюсуют.
Между прочим, приближение функций методом наименьших квадратов элементарно (для дифференцируемых функций, конечно) реализуется библиотекой GSL. Автор, судя по всему, о ней не слышал.
Между прочим, приближение функций методом наименьших квадратов элементарно (для дифференцируемых функций, конечно) реализуется библиотекой GSL. Автор, судя по всему, о ней не слышал.
Только вот GSL на С (если вы конечно про это: www.gnu.org/s/gsl/), а примеры тут на C#, и есть вероятность, что автору язык C не подходит…
Вот написал бы он на PHP — из минусов бы не вылез))
На самом деле, вдимо не все IT-специалисты с хабра знакомы с численными методами. Квадратичная аппроксимация с точки зрения сложности реализации алгоритма близка сортировке пузырьком… (имхо)
На самом деле, вдимо не все IT-специалисты с хабра знакомы с численными методами. Квадратичная аппроксимация с точки зрения сложности реализации алгоритма близка сортировке пузырьком… (имхо)
Согласен, метод довольно простой. Но с другой стороны, это мой первый топик на Хабрахабре, и я решил начать с чего-то не очень сложного.
Вам не нужно оправдываться. Сам факт того, то вы взяли и написали статью характеризует вас только с лучшей стороны.
Больше удивляет то, что если человек пишет статью про систему кэширования на PHP, тут же налетает толпа народа, яростно ставят минусы и пишут гадости в комментариях.
А вообще, я за популяризацию математики и мат.методов в частности, так что если вы продолжитецикл статей, будет просто замечательно.
Больше удивляет то, что если человек пишет статью про систему кэширования на PHP, тут же налетает толпа народа, яростно ставят минусы и пишут гадости в комментариях.
А вообще, я за популяризацию математики и мат.методов в частности, так что если вы продолжитецикл статей, будет просто замечательно.
На самом деле, здесь совершенно не важно, какой у нас базис, от скольких переменных функции базиса, непрерывны они или нет… Достаточно того, что в точках X, в которых нам известно значение аппроксимируемой функции Y, мы знаем значения y_i=f_i(X) (f_i — базисные функции). Дальше с каждой точкой делаем как в статье — M[i,j]+=y_i*y_j для 0<=i,j<N (N — размерность базиса), M[i,N]+=y_i*Y. Решаем систему и получаем коэффициенты.
К сожалению, мимнимизация суммы квадратов хорошо работает только для нормально распределенной ошибки. А в реальной жизни они не такие — всегда встречаются какие-нибудь выбросы (имеющие для данного метода разрушительные последствия), или наоборот, функция плотности оказывается многогорбой. Может быть, кто-нибудь знает хороший метод, как минимизировать, скажем, медиану значений abs(sum(a-i*f_i(X))-Y)?
К сожалению, мимнимизация суммы квадратов хорошо работает только для нормально распределенной ошибки. А в реальной жизни они не такие — всегда встречаются какие-нибудь выбросы (имеющие для данного метода разрушительные последствия), или наоборот, функция плотности оказывается многогорбой. Может быть, кто-нибудь знает хороший метод, как минимизировать, скажем, медиану значений abs(sum(a-i*f_i(X))-Y)?
Через матрицы предложенный алгоритм можно в три строчки поместить
(иногда так понятнее, что происходит, да и в MathCAD проще решить/проверить алгоритм):
1) Исходная СЛАУ (система алг. лин. уравненй) в матричном виде A*С=B — получена из таблицы опорных точек.
2) Домножим слева на транспонированную A --> (AT*A)*С=(AT*B) получена СЛАУ, где AT*A=D — квадратная матрица размером N*N, а AT*B=F — вектор.
3) Отсюда решение C=(AT*A)^(-1)*(AT*B), проще С=D^(-1)*F или Гаусс (если решается не в мат. пакете, а алгоритмически)
(иногда так понятнее, что происходит, да и в MathCAD проще решить/проверить алгоритм):
1) Исходная СЛАУ (система алг. лин. уравненй) в матричном виде A*С=B — получена из таблицы опорных точек.
2) Домножим слева на транспонированную A --> (AT*A)*С=(AT*B) получена СЛАУ, где AT*A=D — квадратная матрица размером N*N, а AT*B=F — вектор.
3) Отсюда решение C=(AT*A)^(-1)*(AT*B), проще С=D^(-1)*F или Гаусс (если решается не в мат. пакете, а алгоритмически)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Среднеквадратичное приближение функций