Я пытаюсь подогнать свои данные, используя формулу, содержащую численный расчет определенных интегралов с бесконечными пределами интегрирования. Для подгонки я использую октавную функцию leasqr
, для которой требуется функция модели векторизации. Следующий код генерирует ошибку, возникающую при вызове численного интегрирования.
несовместимые аргументы (op1 – 1 x 387, op2 – 10 x 2)
function [fGsAb] = GsAbs (x, p)
Hw = 3108.0 ;
fGsAb = Hw ./ (2.4 .* p(1) .*p(2)) .^2 .* (exp ( - (Hw - p(1) .* x) .^2 ...
./ (2.4 .* p(1) .*p(2)) .^2 ) - exp ( - (Hw + p(1) .* x) .^2 ...
./ (2.4 .* p(1) .*p(2)) .^2 )) ;
endfunction
function [GsDisp] = gauss_disp(x, p)
[GsDisp1, err] = quadgk ( @(z) GsAbs(z, p) ./(z-x), - inf, x - 0.000001 );
[GsDisp2, err] = quadgk ( @(z) GsAbs(z, p) ./(z-x), x + 0.000001 , inf );
GsDisp = GsDisp1 +GsDisp2;
endfunction
h = [200:15:6000];
pin =[1 250];
dd = gauss_disp (h, pin);
Если я использую цикл:
for i = 1 : length (h)
dd (i) = gauss_disp (h (i), pin)
endfor
У меня нет ошибок, но я не могу использовать эту конструкцию в leasqr
. Как я могу обойти это ограничение?
Заранее спасибо!
leasqr
является функцией из пакетаoptim
, и что это ожидает функцию определенной формы, поэтому это не удается. Мне пришлось прилично поработать детективом, чтобы догадаться об этом. - person Tasos Papastylianou   schedule 25.04.2017