Неподходящая экспонента BY Mathematica

Я пробовал NonLinearModelFit по математике. Данные должны включать что-то вроде

Exp[-ax]Sin[bx]...... Но я не могу получить правильную кривую (параметр) подгонки..

Оригинальные программы были перечислены ниже.

data = {{0, 0.8156862745098039`}, {5/21, 0.5163398692810458`}, {10/21,
 0.20784313725490197`}, {5/7, 0.052941176470588235`}, {20/21, 
0.0363921568627451`}, {25/21, 0.11776589423648247`}, {10/7, 
0.18943355119825708`}, {5/3, 0.1329847494553377`}, {40/21, 
0.04635294117647058`}, {15/7, 0.022294843863471313`}, {50/21, 
0.05026737967914438`}, {55/21, 0.08732806555458003`}, {20/7, 
0.08406234288587229`}, {65/21, 0.04240196078431373`}, {10/3, 
0.010288350634371396`}, {25/7, 0.005962384953981593`}, {80/21, 
0.0145602795573675`}, {85/21, 0.023162910023822612`}, {30/7, 
0.019077901430842606`}, {95/21, 0.007103825136612022`}, {100/21, 
0.002007843137254902`}, {5, 0.0046875`}, {110/21, 
0.009488550665021253`}, {115/21, 0.011350455675227838`}, {40/7, 
0.007381776239907728`}, {125/21, 0.0025227925565130507`}, {130/21,
 0.001340282948622487`}, {45/7, 0.002856171370282217`}, {20/3, 
0.004392156862745098`}, {145/21, 0.003963510537905002`}, {50/7, 
0.0024745727167872498`}, {155/21, 0.0011558307533539732`}, {160/
21, 0.0014921090387374463`}, {55/7, 0.0025759323337178008`}, {170/
21, 0.0030401151286202554`}, {25/3, 0.0023312550826782323`}, {60/
7, 0.0012677484787018255`}, {185/21, 
0.0015068990559186637`}, {190/21, 0.002007693029364856`}, {65/7, 
0.0024161323297091346`}, {200/21, 0.0024937154348919056`}, {205/
21, 0.0016575702445926822`}, {10, 0.0015728216420257944`}, {215/
21, 0.0020161737011188657`}, {220/21, 0.002557544757033248`}, {75/
7, 0.0030375155842683895`}, {230/21, 
0.0031632542519770337`}, {235/21, 0.002895576835385317`}, {80/7, 
0.0033217993079584776`}, {35/3, 0.0034982174688057044`}, {250/21, 
0.004`}, {85/7, 0.003390830016217013`}, {260/21, 
0.003701667582921019`}, {265/21, 0.004117647058823529`}, {90/7, 
0.004841442749939482`}, {275/21, 0.0046199301638463605`}, {40/3, 
0.004551820728291316`}, {95/7, 0.004470588235294118`}, {290/21, 
0.005930176948828312`}, {295/21, 0.005186590765338393`}, {100/7, 
0.004108309990662932`}, {305/21, 0.0024132730015082957`}, {310/21,
 0.0028011204481792717`}, {15, 0.`}};
ListLinePlot[data, PlotRange -> All]

введите здесь описание изображения

Затем я сделал примерку

fit = NonlinearModelFit[data,0.8 Exp[-t*r] Sin[4.5 (r + b)] + d, {t, b, d}, r];

В любом случае результат всегда не очень хорошо подходит.. следующим образом:

введите здесь описание изображения

Я уверен, что модель должна заключить что-то вроде

Exp[-ax]Sin[kx]

Должен ли я изменить модель или что-то в этом роде? Как я могу получить более подогнанные кривые?

Любые предложения или помощь приветствуются.


person Cici    schedule 16.01.2015    source источник
comment
Отметьте этот вопрос соответствующим языком. Увидел, теги проверил, ну и подумал... с чего ты вообще работаешь?.   -  person mr.stobbe    schedule 16.01.2015
comment
Кроме того, вторичная мысль, это сразу же кажется более подходящим для statexchange. Двигайтесь для миграции.   -  person mr.stobbe    schedule 16.01.2015
comment
Хорошо, я вижу по это, что вы новичок в концепция обмена стеками. Это фантастика, что вы ищете совета у других, но, советов. Во-первых, пометьте свой вопрос как минимум на языке, о котором идет речь. Если это mathmatica, то это должно быть помечено. Во-вторых, отметьте ответ как ответ. Поблагодарив их так много, почему вы не отметили их ответ (в ранее связанном вопросе) как ответ? Отметьте это как ответ, если это так. (продолжение ниже).   -  person mr.stobbe    schedule 16.01.2015
comment
Наконец, продолжайте отвечать на свой вопрос. Если вы что-то выясните, не отказывайтесь от собственного вопроса. Расскажите людям, что вы поняли это и как вы это сделали! Отвечать на свой вопрос — это хорошо, особенно если это правильный ответ. Если кто-то задает вопрос или делает комментарий, вы должны ответить. В противном случае ваш вопрос умрет, и все, кто ищет те же знания, что и вы (помните, подобные сайты предназначены не только для вас, но и для всех остальных), будут в таком же убытке.   -  person mr.stobbe    schedule 16.01.2015
comment
Спасибо за все предложения. U R так здорово ... Я буду следовать всем им ... Я должен сказать, что я новичок в этом форуме ...   -  person Cici    schedule 16.01.2015
comment
Похоже, это не столько вопрос программирования, сколько вопрос поиска подходящей функции. У вас есть какие-то физические причины думать, что он должен соответствовать этой форме? (На мой взгляд больше похоже на Exp[-r] ( a + b Sin[ c r ] ) )   -  person agentp    schedule 16.01.2015
comment
Ага~~~ Я думаю, что U R прав.. Я уверен, что подгоночная функция должна включать что-то вроде Exp[-ax] & Sin[kx].. но ее следует до некоторой степени изменить.. Я думаю, U уже выдал более разумная модель для кривой .. Большое спасибо   -  person Cici    schedule 16.01.2015
comment
Сильно связанная тема сообщества Wolfram: Find Fit for Nonlinear Data.   -  person Alexey Popkov    schedule 06.06.2015


Ответы (1)


Это можно легко сделать с помощью квантильной регрессии с B -splines Антона Антонова (прямая ссылка на M-файл):

Needs["QuantileRegression`"]

qfunc = QuantileRegression[data, data[[;; , 1]], {0.5}, 
     InterpolationOrder -> 2][[1]]; // Quiet

Plot[qfunc[x], {x, Min[data[[All, 1]]], Max[data[[All, 1]]]}, 
 Frame -> True, PlotStyle -> Red, Prolog -> Point[data], 
 PlotLabel -> "Comparison of the model with original data", 
 Exclusions -> None, PlotRange -> All]
ListPlot[data[[;; , 2]] - qfunc /@ data[[;; , 1]], PlotRange -> All, 
 Filling -> Axis, 
 PlotLabel -> "Differences between the original data and the model"]

plot1участок2

person Alexey Popkov    schedule 06.06.2015