Matlab, как определить интегральную функцию и найти лучшие коэффициенты

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

function dT = km(x,sT)

fun=@(temp)((-x(1)*x(2)*(temp).^(x(2)-1.0))./ ...  
                ((x(3)^x(2))*((1+(temp./x(3)).^x(2)).^2)));
dT=integral(fun,0,sT);
% x is a array containing three coefficients;
% sT is a array containing integral upper limits;
$ dT is integral values;

А затем была вызвана функция lsqcurvefit для поиска лучших коэффициентов:

 x0=[0.0, 0.0, 0.0]; % initial coefficients;
 x1=[300.0 -10.0 0.0]; % lower limit;
 x2=[500.0 0.0 1000.0]; % upper limit;

stimeT=[1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0]; %  XDATA
dmT=[3.0 6.0 9.0 12.0 15.0 18.0 21.0 24.0]; % YDATA

    [x,resnorm]=lsqcurvefit(@km,x0,stimeT,dmT,x1,x2);

Но я получил эти ошибки:

Error using integral (line 86)
A and B must be floating point scalars.
Error in km (line 6)
dT=integral(fun,0.0,sT);
Error in lsqcurvefit (line 195)
            initVals.F = feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});
Error in individual_kernel (line 57)
 [x,resnorm]=lsqcurvefit(@km,x0,stimeT,dmT,x1,x2);
Caused by:
    Failure in initial user-supplied objective function evaluation. LSQCURVEFIT
    cannot continue. 

Тип данных MATLAB по умолчанию — double, а double — тип с плавающей запятой, поэтому я не знаю, как модифицировать код. Любой совет будет оценен!


person just_rookie    schedule 18.05.2015    source источник


Ответы (1)


Функция integral требует, чтобы ее второй и третий аргументы были скалярами. Если вы хотите построить массив dT интегралов сверх пределов, содержащихся в массиве sT (или silkingTсообщенная вами ошибка не согласуется с предоставленным кодом), используйте в определении функции km:

dT = arrayfun(@(T) integral(fun,0,T), sT);
person Community    schedule 18.05.2015