簡體   English   中英

Matlab如何定義積分函數並找到最佳系數

[英]Matlab how define an integral function and find best coefficients

我想找到最適合非線性函數的系數,並且非線性函數是一個積分函數。 所以第一步是定義一個函數:

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是浮點類型,因此我不知道如何修改代碼。 任何建議將被認真考慮!

integral函數要求其第二和第三自變量為標量。 如果要在數組sT包含的極限范圍內構建積分的數組dT (或silkingT您報告的錯誤與提供的代碼不一致),請在函數km的定義中使用:

dT = arrayfun(@(T) integral(fun,0,T), sT);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM