Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何在非线性数据拟合中使用积分:先使用Fsumsquares,然后使用FMINUC进行参数优化_Matlab_Integral_Non Linear - Fatal编程技术网

Matlab 如何在非线性数据拟合中使用积分:先使用Fsumsquares,然后使用FMINUC进行参数优化

Matlab 如何在非线性数据拟合中使用积分:先使用Fsumsquares,然后使用FMINUC进行参数优化,matlab,integral,non-linear,Matlab,Integral,Non Linear,我可以运行任何方程式的代码,但当我引入积分时,命令将无法运行: 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=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)
有什么建议吗

谢谢

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

我限制自己从代码段中的函数中删除不必要的句柄,并在
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)

我想积分的极限应该是标量,不能用函数在运行时计算。
fun1
应该是
fun1=@(X,Z)
也许?你的代码缺少
X
把手下只有
Z
,但我必须记录每个时间点。是否有建议的方法?
fun1
中的
X(1)
X(3)
,但是
X
没有定义,至少没有在您的代码段中定义。
t
也在
Ntotal
的句柄中,但也在代码段的第一行中定义
X
没有定义,而是与
t
一样处理
Ntotal
Fsumsquares
中调用时定义了其参数,而
fun1
Ntotal
调用时没有定义参数。我认为函数参数应该一视同仁。