无法找到错误的原因“;输入参数不足";,Matlab
调用下面代码中定义的函数时遇到问题。。根据Matlab,当我通过键入“Awesomefit(V,I,Ierr)”使用函数时,嵌套函数Chi中没有足够的输入参数。但是,我无法解释原因,因为应该提供函数所需的所有输入。。五、 I和Ierr是148x1 double的矩阵,在调用函数之前进行初始化 有人知道可能遗漏了什么吗 Matlab还使用fminsearch显示了一条错误消息。我不知道这是否与其他错误消息有关,或者与错误使用“fminsearch”命令有关。现在我认为是后一种可能性。但这绝对不是我的主要问题。我希望,一旦我解决了另一个问题,我就可以解决这个问题 请原谅我的非正统编程风格,但我是一名试图编程的物理学家:/尽管如此,我仍在尽我所能无法找到错误的原因“;输入参数不足";,Matlab,matlab,function,Matlab,Function,调用下面代码中定义的函数时遇到问题。。根据Matlab,当我通过键入“Awesomefit(V,I,Ierr)”使用函数时,嵌套函数Chi中没有足够的输入参数。但是,我无法解释原因,因为应该提供函数所需的所有输入。。五、 I和Ierr是148x1 double的矩阵,在调用函数之前进行初始化 有人知道可能遗漏了什么吗 Matlab还使用fminsearch显示了一条错误消息。我不知道这是否与其他错误消息有关,或者与错误使用“fminsearch”命令有关。现在我认为是后一种可能性。但这绝对不是我
%% do stuff
function a = Awesomefit(V,I,Ierr)
% initialize starting values
A = 1;
Vbd = 25;
n = 1.2;
b = -0.01;
Var = [Vbd n b];
%do stuff
a = fminsearch(Chi,Var);
function Ifit = InotNorm(V,Vbd,n,b)
Ifit = zeros(size(V));
for i = 1:length(V)
if V(i) < Vbd,
Ifit(i) = 2*10^-12;
else
Ifit(i) = A * abs( (V(i)-Vbd) / (V(i)-Vbd+1/(n*b)) )^n;
end
end
end
function NM = NormMod(Vbd,n,b)
NM = sum(InotNorm(V,Vbd,n,b) ./ Ierr);
end
function ND = NormDat(I,Ierr)
ND = sum(I ./ Ierr);
end
function C = Chi(Vbd,n,b)
C = sum(( (InotNorm(V,Vbd,n,b) .* NormDat(I,Ierr) ./ NormMod(Vbd,n,b) - I) ./ Ierr ).^2);
end
end
%%做事
函数a=一个拟合度(V,I,Ierr)
%初始化起始值
A=1;
Vbd=25;
n=1.2;
b=-0.01;
Var=[Vbd n b];
%做事
a=fminsearch(Chi,Var);
函数Ifit=InotNorm(V,Vbd,n,b)
Ifit=零(尺寸(V));
对于i=1:长度(V)
如果V(i)
两个问题:
Chi
-此函数的输入必须是单个变量。文档确实明确指出了这一点:
同样地,如果你有三个试图最小化的变量,你必须把它们放到一个向量中。。。就像您对Var
所做的那样。因此,您需要更改Chi,以反映这一点:
function C = Chi(in) %// Change
Vbd = in(1); %// Change
n = in(2); %// Change
b = in(3); %// Change
C = sum(( (InotNorm(V,Vbd,n,b) .* NormDat(I,Ierr) ./ NormMod(Vbd,n,b) - I) ./ Ierr ).^2);
end
fminsearch
的第一个输入必须是函数句柄。因此,您只需更改fminsearch
调用即可:
a = fminsearch(@Chi, Var);
当您以前这样做时:
a = fminsearch(Chi, Var);
MATLAB将Chi解释为一个变量,而不是一个函数。。。。这就是为什么你会犯这个错误。您需要将句柄作为fminsearch
的第一个输入参数传递给函数。您可以将句柄视为指向要最小化的函数的“指针”。阅读有关函数句柄的更多信息:V=I=Ierr=1
,我得到以下结果:
>> Awesomefit(1,1,1)
ans =
25.0000 1.2000 -0.0100
两个问题:
Chi
-此函数的输入必须是单个变量。文档确实明确指出了这一点:
同样地,如果你有三个试图最小化的变量,你必须把它们放到一个向量中。。。就像您对Var
所做的那样。因此,您需要更改Chi,以反映这一点:
function C = Chi(in) %// Change
Vbd = in(1); %// Change
n = in(2); %// Change
b = in(3); %// Change
C = sum(( (InotNorm(V,Vbd,n,b) .* NormDat(I,Ierr) ./ NormMod(Vbd,n,b) - I) ./ Ierr ).^2);
end
fminsearch
的第一个输入必须是函数句柄。因此,您只需更改fminsearch
调用即可:
a = fminsearch(@Chi, Var);
当您以前这样做时:
a = fminsearch(Chi, Var);
MATLAB将Chi解释为一个变量,而不是一个函数。。。。这就是为什么你会犯这个错误。您需要将句柄作为fminsearch
的第一个输入参数传递给函数。您可以将句柄视为指向要最小化的函数的“指针”。阅读有关函数句柄的更多信息:V=I=Ierr=1
,我得到以下结果:
>> Awesomefit(1,1,1)
ans =
25.0000 1.2000 -0.0100
@MSergio-没问题。祝你好运@MSergio-没问题。祝你好运