Я использовал пример 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 терминов.
Вот скриншот:
Ссылка на проект Bitbucket:
https://bitbucket.org/wpostma/curvefit/overview