1

嘿伙计们。好的。我已经完成了这个编码。但它似乎有错误。谁能向我解释为什么会出现错误?这是编码:

Hcurve = cell2mat(get(handles.Mytable3,'Data'));
costA = cell2mat(get(handles.Mytable1,'Data'));
cost1 = str2num(get(handles.input2_editText,'String'));
cost2 = str2num(get(handles.input3_editText,'String'));
cost3 = str2num(get(handles.input4_editText,'String'));
cost4 = str2num(get(handles.input5_editText,'String'));
limit = cell2mat(get(handles.Mytable2,'Data'));
Pdt = str2num(get(handles.input1_editText,'String'));

if isempty(costA)

    if size(Hcurve,1) == 2

        H1 = Hcurve(1,:)*cost1;
        H2 = Hcurve(2,:)*cost2;
        H = num2cell([H1;H2]);
        set(handles.Mytable1,'Data',H)
        cost = cell2mat(get(handles.Mytable1,'Data'));

    else if size(Hcurve,1) == 3 

        H1 = Hcurve(1,:)*cost1;
        H2 = Hcurve(2,:)*cost2;
        H3 = Hcurve(3,:)*cost3;
        H = num2cell([H1;H2;H3]);
        set(handles.Mytable1,'Data',H)
        cost = cell2mat(get(handles.Mytable1,'Data'));

    else if size(Hcurve,1) == 4 

        H1 = Hcurve(1,:)*cost1;
        H2 = Hcurve(2,:)*cost2;
        H3 = Hcurve(3,:)*cost3;
        H4 = Hcurve(3,:)*cost4;
        H = num2cell([H1;H2;H3;H4]);
        set(handles.Mytable1,'Data',H)
        cost = cell2mat(get(handles.Mytable1,'Data'));

        else 

        cost = costA;

        end
        end
    end
end


if size(cost,1) == 1

    set(handles.text8,'String','At Lease Two Generators');

这是发生的错误:

???在编译时,“cost”被确定为一个变量并且这个变量是未初始化的。“成本”也是一个函数名称,以前版本的 MATLAB 会调用该函数。但是,MATLAB 7 禁止在相同的上下文中使用相同的名称作为函数和变量。

==> fyp_editor>Mybutton_Callback 在 131 如果 size(cost,1) == 1 时出错

==> gui_mainfcn 中的错误 96 feval(varargin{:});

==> fyp_editor 中的错误 42 gui_mainfcn(gui_State, varargin{:});

==> @(hObject,eventdata)fyp_editor('Mybutton_Callback',hObject,eventdata,guidata(hObject)) 中的错误

???评估 uicontrol 回调时出错

4

2 回答 2

4

您遇到的可能问题是它costA为空,因此您的嵌套代码都不会被评估,并且在您调用 line 之前,变量永远不会被初始化为任何东西。您可能希望像这样订购嵌套的 if 语句:costif size(cost,1) == 1

if isempty(costA)  %# If costA is empty, compute a value for cost

  if size(Hcurve,1) == 2
  ...
  elseif size(Hcurve,1) == 3
  ...
  elseif size(Hcurve,1) == 4
  ...
  end

else
  cost = costA;  %# Will set cost equal to costA if it is not empty
end

您遇到的异常错误的解释是,它cost作为变量出现在您的代码中,但似乎也有一个同名的函数cost。当您定义与函数同名的变量时,该变量具有优先权,并且只要在任何计算中使用该名称,就会使用该变量而不是函数。

即使cost在您的条件下没有被初始化为任何东西,MATLAB 仍然认识到它可能是您的函数中的一个变量,因此(在 MATLAB 7 或更高版本中)它不会尝试调用function cost。显然,在旧版本中,如果同名变量未初始化,MATLAB 会调用阴影函数。

于 2011-03-10T20:25:11.707 回答
-1

看起来错误是说cost变量是保留字。这意味着您不能将此名称用作变量。

尝试重命名cost为其他名称,例如finalCost.

于 2011-03-10T20:15:22.520 回答