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 では、同じコンテキストで関数と変数の両方に同じ名前を使用することは禁止されています。

size(cost,1) == 1 の場合、131 での ==> fyp_editor>Mybutton_Callback のエラー

==> 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、空ではないことです。そのためネストされたコードは評価されず、行を呼び出す前に変数costが何かに初期化されることはありませんif size(cost,1) == 1ネストされたifステートメントを次のように並べ替えることができます。

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以降では)関数 costを呼び出そうとしません。どうやら、古いバージョンでは、同じ名前の変数が初期化されていない場合、MATLABはシャドウ関数を呼び出していました。

于 2011-03-10T20:25:11.707 に答える
-1

cost変数が予約語であるというエラーが表示されているようです。これは、この名前を変数として使用できないことを意味します。

など、別の名前に変更costしてみてくださいfinalCost

于 2011-03-10T20:15:22.520 に答える