Есть ли способ, которым я могу исправить свои данные / код, чтобы соответствовать этому NonLinearModelFit? - PullRequest
0 голосов
/ 01 января 2019

Когда я пытался запустить этот код:

Data1 = FinancialData["^DJI", {{2003, 10, 21}, {2007, 10, 09}}];
Data2 = {{{{AbsoluteTime[#1] - AbsoluteTime[{2003, 10, 21}]}/
    86400}, #2} & @@@ Data1};
Data3 = Data2 //. {x_List} :> x;
Data4 = Data3 //. {x_List} :> x;
Data5 = Data4 //. {x_List} :> x;
Data6 = ArrayReshape[Data5 = Data4 //. {x_List} :> x, {1000, 2}];
NonlinearModelFit[Data6, {10^(a + b u^z + 
 c u^z Cos[\[Phi] + \[Omega] Log10[u]]), {b < 0, -1 < c < 1, 0.1` <= z <= 
0.9`, 4.8` <= \[Omega] <= 13,0 <= \[Phi] <= 2 \[Pi]}}, {a, b, c, z, \ 
[Omega], \[Phi]}, u]

я получаю следующие сообщения об ошибках:

Градиент не является вектором действительных чисел в {a, b, c, z, [Omega], [Phi]} = {1., - 1., 0,8,0,82,5,62,0,628319}.Оценка градиента функции Experimental`NumericFunction [<< 1 >>] не удалась при {1., - 1., 0.8,0.82,5.62,0.628319}.

Что вызывает это?

1 Ответ

0 голосов
/ 02 января 2019
First[Data6]
(* {0, 9747.64} *}

Имеет u = 0, а устанавливаемая функция имеет Log10[u].Сместите значения u на 1.

Data7 = {First[#] + 1, Last[#]} & /@ Data6

Добавьте ограничение на a и подгоните

fit = NonlinearModelFit[
  Data7, {10^(a + b u^z + c u^z Cos[\[Phi] + \[Omega] Log10[u]]), {a <
      10, b < 0, -1 < c < 1, 0.1` <= z <= 0.9`, 
    4.8` <= \[Omega] <= 13, 0 <= \[Phi] <= 2 \[Pi]}}, {a, b, c, 
   z, \[Omega], \[Phi]}, u]

Данные графика и подгоните

Show[Plot[fit[u], {u, 1, 1450}], ListPlot[Data7]]

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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...