Я пытаюсь повторить анализ, выполненный в публикации, и у меня возникли проблемы. Речь идет о попытке вычислить бесконечный спектр релаксации по реологическим данным.
![General_Function](https://i.imgur.com/VcYP78R.png)
Учитывая экспериментальный ряд данных (выше), авторы извлекают спектр релаксации (H (тау)), решая для разности суммы квадратов между экспериментальными (выше) и модельными данными (ниже).
![Model](https://i.imgur.com/vSatzVN.png)
Эта релаксация следует распределению, описываемому следующим соотношением.
![Relaxation Model](https://i.imgur.com/69t55fc.png)
Этот расчет был выполнен с помощью функции Matlabs lsqcurefit. Однако lsqcurvefit не принимает функцию в качестве разрешимого параметра. Я хотел бы знать, как это извлечение может быть выполнено с помощью этой функции Matlab.
РЕДАКТИРОВАТЬ: После комментариев Bentoys, вот разъяснение моего вопроса.
Я подробно опишу следующее только для G '' (Gdp) для экономии места.
У меня есть экспериментальные данные в следующем виде: вектор значений частоты (омега), xdata и вектор значений отклика Gdp (Gdp).
Я хотел бы рассчитать H (тау), и для этого мне понадобятся параметры, содержащиеся в этой функции. Это дает следующее выражение, которое мне нужно решить:
![Mix](https://i.imgur.com/RSQuZnk.png)
ВВП - это функция от омеги, а мои xdata - это вектор значений омеги, но я интегрирую по отношению к ln (тау). Кажется, это может быть возможной проблемой?
Кроме того, у меня нет четкого идеала ожидаемых начальных значений для 6 переменных, только для результирующего H (tau), поэтому я выбрал произвольные значения для начала. Я могу оптимизировать их относительные значения, если рассчитанные значения могут быть получены.
Из ваших предложений мой код Matlab выглядит следующим образом:
w = numdata(:,1); %w is omega (experimental xdata)
GdpExp = numdata(:,3); % response values (ydata)
x0 = [10,10,0.1,0.1,1,1]; % arbitrary intial values
H = @(x, xdata) x(1)*exp(-(xdata-log(x(3))).^2/x(5)^2/2)...
+ x(2)*exp(-(xdata-log(x(4))).^2/x(6)^2/2);
Gdp = @(A_1, A_2, tau_1, tau_2, sigma_1, sigma_2, w) ...
integral(H([A_1, A_2, tau_1, tau_2, sigma_1, sigma_2], ...
u).* w.*exp(u)./(1+w.^2.*exp(2*u)), -Inf, Inf);
lsqcurvefit(Gdp, x0, w, GdpExp);
Эта валюта дает следующую ошибку:
>> lsqcurvefit(Gdp, x0, w, GdpExp);
Not enough input arguments.
Error in
Inf_Spec_Test>@(A_1,A_2,tau_1,tau_2,sigma_1,sigma_2,w)integral
(H([A_1,A_2,tau_1,tau_2,sigma_1,sigma_2],u).*w.*exp(u)./(1+w.^2.*exp(2*u)),
-Inf,Inf)
Error in lsqcurvefit (line 202)
initVals.F = feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});
Caused by:
Failure in initial objective function evaluation. LSQCURVEFIT cannot
continue.
Правильно ли я считаю, что каждая функция является автономной, или имена A_1, A_2 и т. Д. Должны совпадать с x (1), x (2), или A_1 и т. Д. Просто обозначают для обозначения расчетные значения?
Экспериментальные данные и рассчитанный H (тау) должны напоминать следующие цифры.
![EgFig](https://i.imgur.com/lVuu2TI.png)
Я также обнаружил следующее соотношение, которое можно использовать для преобразования вектора омега в вектор тау, что может помочь преодолеть несоответствие между текущими xdata и интегралом.
![EgFig](https://i.imgur.com/2kJJZ2U.png)