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_Matlab_Function - Fatal编程技术网

无法找到错误的原因“;输入参数不足";,Matlab

无法找到错误的原因“;输入参数不足";,Matlab,matlab,function,Matlab,Function,调用下面代码中定义的函数时遇到问题。。根据Matlab,当我通过键入“Awesomefit(V,I,Ierr)”使用函数时,嵌套函数Chi中没有足够的输入参数。但是,我无法解释原因,因为应该提供函数所需的所有输入。。五、 I和Ierr是148x1 double的矩阵,在调用函数之前进行初始化 有人知道可能遗漏了什么吗 Matlab还使用fminsearch显示了一条错误消息。我不知道这是否与其他错误消息有关,或者与错误使用“fminsearch”命令有关。现在我认为是后一种可能性。但这绝对不是我

调用下面代码中定义的函数时遇到问题。。根据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-没问题。祝你好运