2

我可以运行任何方程的代码,但是当我引入积分时,命令将不会运行:

    t=dataset_TK1(:,1);
dataset_TK4=xlsread('Akis','Sheet1','AG491:AR725');
y_4=dataset_TK4(:,12);

Kg=1.76717865712934;
N0=1.08E+05;

fun1=@(Z) Z^(-1+(X(1)-Kg)/X(3))*exp(Z);

Ntotal=@(X,t)integral(fun1,X(2)*exp(-X(3)*t),X(2));

X0=[10,10,10];
Fsumsquares=@(X)sum((Ntotal(X,t)-y_4).^2);
opts = optimoptions('fminunc','Algorithm','quasi-newton');
[xunc,ressquared,eflag,outputu] =   fminunc(Fsumsquares,X0,opts)

有什么建议么?

谢谢

4

1 回答 1

0

下面的 MWE(最小工作示例)代码有效,从某种意义上说它不会引发错误:为了获得它,我用虚拟数组替换了您的 excel 数据。

我限制自己从代码片段中的函数中删除不必要的句柄,并将运算符调整为按元素.^.*in fun1。此外,在Ntotal积分中,限制应该是标量,而不是向量。这就是为什么我只取出一个元素的原因t

% dummies, put your data back
t=ones(1,10);
y_4=[1,2,3,4,5,6,7,8,9,10];
X=[11,3,4,6,2,3,55,22,89,6];

Kg=1.76717865712934;
N0=1.08E+05;

fun1=@(Z) Z.^(-1+(X(1)-Kg)/X(3)).*exp(Z);               % changed
Ntotal=integral(fun1,X(2)*exp(-X(3)*t(1)),X(2));        % changed

X0=[10,10,10];
Fsumsquares=@(X) sum((Ntotal-y_4).^2);                  % changed
opts = optimoptions('fminunc','Algorithm','quasi-newton');
[xunc,ressquared,eflag,outputu] =   fminunc(Fsumsquares,X0,opts)
于 2020-10-02T19:12:24.427 回答