我想优化以下等式中的x值
formula_1=((x(1)+x(2).*exp(-TR./x(3)))./(1+cos(time_stamps).* exp(-TR./x(3))));
diff =@(x)sum((formula_1-img_vol).^2);
[pa,fval,exfl]= fminsearch(diff,startingvals,opts);
startingvals=[1,1,0.1];
opts = optimset('Display','off','TolFun',1e-9,'TolX',1e-9);
img_vol = 32x32x11 vector.
这些都是我在主脚本文件中所做的。但出现的错误是
Error in fminsearch (line 191)
fv(:,1) = funfcn(x,varargin{:});
Error in biexp_main (line 65)
[pa,fval,exfl]=fminsearch(diff,startingvals,opts);
请帮我想做什么??
由于缺少许多信息,因此很难重现错误。(确切的误差是多少?TR
和time_stamps
的大小是多少?)。
应该有所帮助的是:
-
如果当前情况并非如此,请更改函数
diff
,使其返回标量(请使用diff(startginvals)
进行检查)。也许把它改成sum(sum(sum(.)))
。 -
如评论所示:在当前形式中,
diff
独立于x
。您提到的"间接贡献"不起作用:它将formula_1
和x
视为常数。
把这些放在一起,试试:
TR = rand; %?
time_stamps = rand; %?
img_vol = rand(32,32,11);
formula_1 = @(x) (x(1)+x(2).*exp(-TR./x(3))) ./ (1+cos(time_stamps).*exp(-TR./x(3)));
diff = @(x) sum(sum(sum((formula_1(x)-img_vol).^2)));
opts = optimset('Display','off','TolFun',1e-9,'TolX',1e-9);
startingvals=[1,1,0.1];
[xOpt,diffOpt] = fminsearch(diff,startingvals,opts);