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

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


person rossmcm    schedule 19.04.2011    source источник
comment
Я сделал это сам; это не очень сложно. Может быть, я могу раскопать какой-нибудь код...   -  person Andreas Rejbrand    schedule 19.04.2011


Ответы (5)


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

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

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

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 терминов.

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

пример полифита с диаграммой

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

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

person Warren P    schedule 19.04.2011
comment
Спасибо @Warren. Когда я загружаю по ссылке, я получаю 67 КБ того, что выглядит как HTML с веб-страницы SkyDrive. Пожалуйста, попробуйте еще раз, так как я думаю, что ваш вариант может подойти. - person rossmcm; 20.04.2011
comment
Я получил файл, переименовав ваш zip-файл в html, загрузив его в браузер и поковырявшись! - person rossmcm; 20.04.2011
comment
Росс; Самый простой способ — щелкнуть ссылку и загрузить ее как веб-страницу, а затем щелкнуть ссылку «СКАЧАТЬ», предоставленную Skydrive. Но эй, как тебе угодно. - person Warren P; 20.04.2011
comment
@Уоррен. Это странно. Я не понимаю, почему браузер открывает URL-адрес, который заканчивается на .zip, как веб-страницу. Я действительно щелкнул правой кнопкой мыши и сделал сохранение, как изначально. - person rossmcm; 21.04.2011
comment
Браузеры не заботятся о файлах или расширениях файлов в URL-адресах, они заботятся о типах контента HTTP в своих заголовках. Которого ты не видишь. Вы видите URL-адрес, поэтому ваш мозг сосредотачивается на нем. :-) - person Warren P; 21.04.2011
comment
Этот элемент может не существовать или больше не доступен. Вы не могли бы исправить ссылку? - person Roland Rabien; 13.02.2012

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

person Frank Schmitt    schedule 19.04.2011
comment
Существует также специальная версия TpMath, называемая DMath для Delphi, здесь: unilim. fr/pages_perso/jean.debord/tpmath/tpmath.htm DMath / TPMath поставляется с отличной документацией — настоятельно рекомендуется. - person iamjoosy; 19.04.2011
comment
Я использовал это, и это отлично сработало для меня. Я также сам ответил на этот вопрос, потому что я использую небольшое автономное решение с одним паскалем всякий раз, когда мне нужно выполнить подбор кривой наименьших квадратов. Смотрите мой ответ ниже. - person Warren P; 20.04.2011
comment
Круто @iamjoosy, @Frank. DMath кажется очень полным. - person rossmcm; 20.04.2011

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

person Clóvis Valadares Junior    schedule 19.04.2011
comment
В SysTools нет математических инструментов, кроме нескольких специальных тригонометрических функций. - person Warren P; 04.03.2013
comment
Неправильный. См. StStat.pas с множеством статистических математических функций. Не знаю, имеют ли функции регрессии полиномиальную регрессию. Я думаю, что вы проголосовали за мой ответ, не зная об этом. - person Clóvis Valadares Junior; 17.03.2013

Несмотря на то, что вы уже дали ответ, для полноты картины я решил добавить это:

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

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

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

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

person RobertFrank    schedule 20.04.2011
comment
Я видел этот материал, и это тоже очень приятно. Если вам нужно сделать много вещей, включая матричную математику, это то, что вам нужно. - person Warren P; 20.04.2011

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

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

person avra    schedule 20.04.2011
comment
не то, что я искал (я хотел исходный код на Паскале, а не Excel), но, тем не менее, полезный. Спасибо. - person rossmcm; 21.04.2011