Где я могу получить реализацию Delphi / Pascal для полиномиальной регрессии кривой в стиле Excel? - PullRequest
3 голосов
/ 19 апреля 2011

У меня есть набор значений XY (то есть график рассеяния), и я хочу, чтобы подпрограмма Паскаля генерировала коэффициенты полинома N-го порядка, которые соответствуют этим точкам, так же, как в Excel.

Ответы [ 5 ]

10 голосов
/ 20 апреля 2011

Я использовал пример Polyfit Дэвида Дж. Тейлора (curvefit.zip), который реализует алгоритм подбора кривой наименьших квадратов (также известный как линейная регрессия). Сайт Дэвида здесь , но продолжайте читать, потому что моя версиялучше.(См. Ниже).

Происхождение алгоритмов, которые использует Дэвид, представляет собой книгу по научной математике для программистов на Паскале, программу Аллена Миллера «Кривая Фиттинга» из книги «Программы на Паскале для ученых и инженеров», напечатанную и отправленную на адресMTPUG в октябре 1982 года Юргеном Левеном, исправленный и адаптированный для Turbo Pascal Джеффом Вейссом.

Вы можете получить файл кривойfitfit.zip непосредственно из bitbucket здесь .(Вы можете клонировать исходный код с помощью Mercurial / TortoiseHG или загрузить ZIP из bitbucket)

hg clone https://bitbucket.org/wpostma/curvefit curvefit

Он работает в любой версии Delphi 5 и выше, Unicode или нет, даже Delphi 10 Berlin.В демке есть небольшая диаграмма, добавленная мной.Я также добавил способ форсирования результата через начало координат, распространенную технику, при которой вы хотите наилучшим образом подходить ко всем значениям, кроме константы, которая должна быть принудительно установлена ​​либо в ноль, либо в некоторое экспериментально полученное среднее значение.Принудительное «вычитание холостого хода», которое устанавливается равным среднему значению для ряда аналитических «нулевых образцов», является обычным явлением в определенных типах аналитической химии при использовании с определенными типами контрольно-измерительных приборов, а также в других научных случаях, когда оно может быть большеполезнее, чем оптимальное соответствие, потому что вы можете минимизировать ошибку вокруг начала координат, а не минимизировать ошибку в самой удаленной от начала области кривой.

Я также должен уточнить, что для целей линейной регрессии«Кривая» также может быть линией, что является тем случаем, который мне нужен для аналитической химии, и это уравнение для любой прямой линии (y = mx + b) также называется «калибровочной кривой».Подгонка кривой первого порядка - это линия (y = mx + b), подбор кривой второго порядка (показанный на рисунке) - это парабола (y = nX ^ 2 + mX + b).Как вы можете догадаться, этот алгоритм масштабируется от первого порядка до любого уровня, который вы можете пожелать.Хотя я не проверял выше 8 терминов.

Вот скриншот:

polyfit example with chart

Ссылка на проект Bitbucket:

https://bitbucket.org/wpostma/curvefit/overview

4 голосов
/ 19 апреля 2011

Попробуйте TPMath http://tpmath.sourceforge.net/ - я годами использовал это для подбора регрессии холма и могу рекомендовать его.

2 голосов
/ 19 апреля 2011

Проверьте функции в Библиотека SysTools Turbo Power , теперь с открытым исходным кодом, включает математические функции в модуле StStat.

1 голос
/ 20 апреля 2011

XlXtrFun - это лучший пример кривой, который я знаю и использую, но для Excel:

http://www.xlxtrfun.com/XlXtrFun/XlXtrFun.htm

1 голос
/ 20 апреля 2011

Несмотря на то, что вы уже получили ответ, для полноты я подумал, что добавлю следующее:

Мы используем математический пакет SDL Components и очень довольны им.

http://www.lohninger.com/delfcomp.html

Он хорошо продуман и делает именно то, что нам нужно.

У него на сайте множество других интересных инструментов.

...