Выбор лучшего уравнения для математической модели

Aug 15 2020

Я работаю над проектом вычислительной геометрии и какое-то время смотрю на один и тот же код Mathematica, пытаясь что-то понять. Я пришел к выводу, что мои математические знания недостаточны в отношении того, как выбрать уравнение для параметризации.

Уравнение $a Sin[b t] + C$ведет себя не так, как ожидалось, я в основном знаком с теорией вероятностей и машинным обучением. Я подозреваю, что моему уравнению нужна другая степень свободы, чтобы точно моделировать данные, предоставляемые полиномом? Экспоненциальный? Ряд Фурье? Я не уверен, как с уверенностью сделать следующий шаг к его улучшению.

Проект требует, чтобы модель принимала произвольные кривые. В случае нашего примера представлен равномерно выбранный BsplineCurve. Когда модель построена,$263.653 sin(1.03716 t)+1670.19$не воспроизводит данные точно. Я получил доступ к свойству на NonlinearModelFitмодели и , кроме ошибки быть очень большой, на самом деле ничего не торчит о том , как улучшить выбор уравнения для модели. Учитывая, что в области машинного обучения мы находим параметры больших матриц, я предполагаю, что можно найти лучшие классы функций, которые соответствуют данным? Какими способами можно сделать выбранное уравнение более изменяемым для данных? Из какой области математики я могу обратиться за дополнительной информацией? Я возьму любые идеи, поскольку эта проблема, вероятно, перекрывает разные ветки.

(* Original Function *)
f = 
 BSplineFunction[
  controlpts]; (* Our user function *)
originalfunction = 
 ParametricPlot[f[t], {t, 0, 1}, 
  PlotStyle -> 
   Directive[{Opacity[.2], AbsoluteThickness[5], Darker[Green]}]];
data = Table[f[t], {t, 0, 1, 1/49}];

(* Create Model *)
equ = a Sin[b t] + C;
model = NonlinearModelFit[data, equ, {a, b, C}, t];
modelpts = Graphics[
   {AbsolutePointSize[8], Blue,
    Point /@ MapThread[
      List,
      {Range[0, 8000, 8000/49],
       Table[model // Normal, {t, 0, 8000, 8000/49}]}
      ]}
   ];
samplepoints = Graphics[
   {AbsolutePointSize[3], Purple, Point /@ data} // Graphics
   ];

model["BestFitParameters"]
(* a -> 263.653, b -> 1.03716, C -> 1670.19 *)

Ответы

1 Rubus Aug 15 2020 at 20:11

Просто поигравшись с libre office calc, я нашел полином степени 7 (x ^ 7), который более точно соответствует вашим данным.

Видеть

Может быть, использовать полиномы как класс функций вместо тригонометрических функций.