2017-01-04 3 views
2

Привет, я изо всех сил пытаюсь выполнить регрессию синуса в Maple, я пробовал использовать код в Интернете, но он не работал. Любая помощь будет оценена, спасибо.Регрессия синуса в Maple

Моего набора данных:

xy2 := [8.00, -.506679048120256], [8.08, 0.281910754667817e-1], [8.16, .559664265569177], [8.24, 1.01070100324046], [8.32, 1.31611672505376], [8.40, 1.43196427035055], [8.48, 1.34023337273233], [8.56, 1.05272193513947], [8.64, .611568467681354], [8.72, 0.811397528142090e-1], [8.80, -.461438501129773], [8.88, -.937510436115816], [8.96, -1.27829712008967], [9.04, -1.43481210421374], [9.12, -1.38382085374637], [9.20, -1.13084364570752], [9.28, -.712970794810407], [9.36, -.191272835454596], [9.44, .358331090663093], [9.52, .856136430555551], [9.60, 1.23021604773045], [9.68, 1.42679944926732], [9.76, 1.41736947469857], [9.84, 1.20128507880053], [9.92, .810092632128225], [10.00, .301065940880780], [10.08, -.251648449233878], [10.16, -.767849176869750], [10.24, -1.17292120742612], [10.32, -1.40861259493884], [10.40, -1.44110418232058], [10.48, -1.26379776830055], [10.56, -.902269772395664], [10.64, -.409554051221942], [10.72, .142501522971709], [10.80, .673734976975030], [10.88, 1.10731447772044], [10.96, 1.38084402685540], [11.04, 1.45522841363022], [11.12, 1.31817268904005], [11.20, .988929300957682], [11.28, .515897968446476], [11.36, -0.318624454182872e-1], [11.44, -.574750512030218], [11.52, -1.03419534660239], [11.60, -1.34402349055817], [11.68, -1.45994449557100], [11.76, -1.36423262002034], [11.84, -1.06956673456288], [11.92, -.619350106423691], [12.00, -0.793958770633476e-1], [12.08, .471761289512621], [12.16, .954294022860301], [12.24, 1.29864164214636], [12.32, 1.45551063055783], [12.40, 1.40182920346040], [12.48, 1.14373164965961], [12.56, .719231990114759], [12.64, .190472087224845], [12.72, -.365570174515493], [12.80, -.868296154301247], [12.88, -1.24516814950451], [12.96, -1.44215768668732], [13.04, -1.43084370975717], [13.12, -1.21101958959963], [13.20, -.814918996519041], [13.28, -.300617712320080], [13.36, .256936910993194], [13.44, .776860662411496], [13.52, 1.18406604455853], [13.60, 1.42009393305225], [13.68, 1.45118920522256], [13.76, 1.27106808636091], [13.84, .905832007489113], [13.92, .409125471244190], [14.00, -.146591404838158], [14.08, -.680632305076273], [14.16, -1.11580154033477], [14.24, -1.38954335200116], [14.32, -1.46281456021820], [14.40, -1.32355502489098], [14.48, -.991432071017881], [14.56, -.26695257], [14.64, 0.352425325998812e-1], [14.72, .580250581641171], [14.80, 1.04085183402835], [14.88, 1.35075391063922], [14.96, 1.46571651564137], [15.04, 1.36819902679830], [15.12, 1.07121797171521], [15.20, .618559572280749], [15.28, 0.764165939267409e-1], [15.36, -.476354929024263], [15.44, -.959710193024244], [15.52, -1.30400243735277], [15.60, -1.45998995251031], [15.68, -1.40476029253913], [15.76, -1.14472632247135], [15.84, -.718223841180242], [15.92, -.187706295906662], [16.00, .369587917409398], [16.08, .872888602357739], [16.16, 1.24959729981774], [16.24, 1.44574029144576], [16.32, 1.43304191884974]} 
+0

** Что ** вы пробовали? – Therkel

+0

@Therkel Я не умею программировать, но это сработало этим утром: с (Статистика); X: = [8, 8,08, 8,16, 8,24, 8,32, 8,4, 8,48, 8,56, 8,64, 8,72, 8,8, 8,88, 8,96, 9,04, 9,12, 9,2]; Y: = [-.506679048120256, 0.281910754667817e-1, 0,559664265569177, +1,01070100324046, +1,31611672505376, +1,43196427035055, +1,34023337273233, +1,0527219351394, 0,611568467681354, 0.811397528142090e-1, -.461438501129773, -.937510436115816, -1,27829712008967, -1,43481210421374, -1.38382085374637 , -1.13084364570752]; f: = Fit (a * sin (b * x + c) + d, X, Y, x) – Student201

+0

Наверное, очень простой, но теперь просто нужно выяснить, как идти от xy2: = [8.00, -0.506679048120256] , [8.08, ......] X: = [8, 8.08, ...] и Y: = [-0.506679048120256, ...] вместо того, чтобы делать это вручную. – Student201

ответ

3

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

Начнем с построения данных:

with(plots): 
pointplot({xy2}); 

Data plot

У человека может легко видеть образец здесь происходит. Но наивная реализация приступа дает плохой результат:

## Split data 
X := [seq(xy2[i][1], i = 1..numelems({xy2}))]: 
Y := [seq(xy2[i][2], i = 1..numelems({xy2}))]: 
## Fit a sine curve to data 
fit := Statistics:-NonlinearFit(a*sin(b*x+c)+d,X,Y,x); 
## Plot 
fitplot := plot(fit,x = min(X)..max(X),view = min(Y)..max(Y),legend = evalf(fit,4)): 
display(pointplot(X,Y),fitplot); 

Выход:

fit := 0.0099 * sin(28.6850 * x - 365.4958) + 0.0448 

Bad fit

Мы можем ограничить оптимизации рутины в диапазоны от параметров (например, a, похоже, находится между 1 и 2). Хорошие начальные предположения также могут быть важны при оптимизации. Поворот с parameterranges и initialvalues дает приятную конвергенцию.

fit := Statistics:-NonlinearFit(a*sin(b*x+c)+d,X,Y,x, 
           parameterranges = [a=1..2,b = 1..10], 
           initialvalues = [a = 1.5,b = 5]); 
## Plot 
fitplot :=plot(fit,x = min(X)..max(X),view = min(Y)..max(Y),legend = evalf(fit,4)): 
display(pointplot(X,Y),fitplot); 

Выход

fit := 1.457*sin(4.790*x+11.58)-0.5483e-3 

Good fit

Смежные вопросы