私は MATLAB プログラミングの初心者です。私は統計データに取り組んでいますが、while ループに問題があります。コードは次のとおりです。
% --- Executes on button press in b_analisa_data.
function b_analisa_data_Callback(hObject, eventdata, handles)
hitung(handles.lb_tkp, handles);
tkp=getappdata(handles.lb_tkp,'tkp2');
tpp=getappdata(handles.lb_tpp,'tpp2');
po=getappdata(handles.lb_po,'po2');
nq=getappdata(handles.lb_nq,'nq2');
nt=getappdata(handles.lb_nt,'nt2');
tq=getappdata(handles.lb_tq,'tq2');
tt=getappdata(handles.lb_tt,'tt2');
s=getappdata(handles.lb_s,'s2');
set(handles.lb_tkp,'String',tkp);
set(handles.lb_tpp,'String',tpp);
set(handles.lb_po,'String',po);
set(handles.lb_nq,'String',nq);
set(handles.lb_nt,'String',nt);
set(handles.lb_tq,'String',tq);
set(handles.lb_tt,'String',tt);
set(handles.lb_s,'String',s);
% hObject handle to b_analisa_data (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
function hitung(handles_hitung,handles)
% Perhitungan tingkat kedatangan pelanggan (TKP)
a=str2num(get(handles.st_twak,'String'));
b=str2num(get(handles.st_jwak,'String'));
param=str2num(get(handles.txt_param,'String'));
c=a/b;
t=3600;
tkp=t/c;
%set(handles.lb_tkp,'String',tkp);
% Perhitungan tingkat pelayanan pelanggan (TPP)
d=str2num(get(handles.st_twp,'String'));
e=str2num(get(handles.st_jwp,'String'));
f=d/e;
tpp=t/f;
%set(handles.lb_tpp,'String',tpp);
% Perhitungan probabilitas tidak adanya pelanggan (PO)
s=str2num(get(handles.st_kasir,'String'));
g=tkp/tpp;
h=tkp/(s*tpp);
for i=0:s-1;
j(i+1)=(g^i)/(factorial(i));
end
k=sum(j);
l=g/((factorial(s)*(1-h)));
m=k+l;
po=1/m;
%set(handles.lb_po,'String',po);
% Perhitungan jumlah pelanggan dalam antrian (NQ)
n=po*(g^s)*h;
o=factorial(s);
p=o*((1-h)^2);
nq=n/p;
%set(handles.lb_nq,'String',nq);
% Perhitungan jumlah pelanggan dalam sistem (NT)
nt=nq+g;
%set(handles.lb_nt,'String',nt);
% Perhitungan waktu tunggu rata-rata dalam antrian (TQ)
tq=nq/tkp;
%set(handles.lb_tq,'String',tq);
% Perhitungan waktu tunggu rata-rata dalam sistem (TT)
q=tq+(1/tpp);
tt= q*60;
%set(handles.lb_tt,'String',tt);
% Perhitungan jumlah kasir (S)
%set(handles.lb_s,'String',s);
while tt>param
s=s-1;
tkp=t/c;
tpp=t/f;
po=1/m;
nq=n/p;
nt=nq+g;
tq=nq/tkp;
tt= q*60;
end
setappdata(handles_hitung,'tkp2',tkp);
setappdata(handles_hitung,'tpp2',tpp);
setappdata(handles_hitung,'po2',po);
setappdata(handles_hitung,'nq2',nq);
setappdata(handles_hitung,'nt2',nt);
setappdata(handles_hitung,'tq2',tq);
setappdata(handles_hitung,'tt2',tt);
setappdata(handles_hitung,'s2',s);
私のプロジェクトでは、複数の数式を使用して統計データを計算します。だから、私は「関数hitung」内にすべての式を入れました
function hitung(handles_hitung,handles)
% Perhitungan tingkat kedatangan pelanggan (TKP)
a=str2num(get(handles.st_twak,'String'));
b=str2num(get(handles.st_jwak,'String'));
param=str2num(get(handles.txt_param,'String'));
c=a/b;
t=3600;
tkp=t/c;
%set(handles.lb_tkp,'String',tkp);
% Perhitungan tingkat pelayanan pelanggan (TPP)
d=str2num(get(handles.st_twp,'String'));
e=str2num(get(handles.st_jwp,'String'));
f=d/e;
tpp=t/f;
%set(handles.lb_tpp,'String',tpp);
% Perhitungan probabilitas tidak adanya pelanggan (PO)
s=str2num(get(handles.st_kasir,'String'));
g=tkp/tpp;
h=tkp/(s*tpp);
for i=0:s-1;
j(i+1)=(g^i)/(factorial(i));
end
k=sum(j);
l=g/((factorial(s)*(1-h)));
m=k+l;
po=1/m;
%set(handles.lb_po,'String',po);
% Perhitungan jumlah pelanggan dalam antrian (NQ)
n=po*(g^s)*h;
o=factorial(s);
p=o*((1-h)^2);
nq=n/p;
%set(handles.lb_nq,'String',nq);
% Perhitungan jumlah pelanggan dalam sistem (NT)
nt=nq+g;
%set(handles.lb_nt,'String',nt);
% Perhitungan waktu tunggu rata-rata dalam antrian (TQ)
tq=nq/tkp;
%set(handles.lb_tq,'String',tq);
% Perhitungan waktu tunggu rata-rata dalam sistem (TT)
q=tq+(1/tpp);
tt= q*60;
%set(handles.lb_tt,'String',tt);
% Perhitungan jumlah kasir (S)
%set(handles.lb_s,'String',s);
while tt>param
s=s-1;
tkp=t/c;
tpp=t/f;
po=1/m;
nq=n/p;
nt=nq+g;
tq=nq/tkp;
tt= q*60;
end
setappdata(handles_hitung,'tkp2',tkp);
setappdata(handles_hitung,'tpp2',tpp);
setappdata(handles_hitung,'po2',po);
setappdata(handles_hitung,'nq2',nq);
setappdata(handles_hitung,'nt2',nt);
setappdata(handles_hitung,'tq2',tq);
setappdata(handles_hitung,'tt2',tt);
setappdata(handles_hitung,'s2',s);
そして、「function b_analisa_data Callback」内で「function hitung」を呼び出します
function b_analisa_data_Callback(hObject, eventdata, handles)
hitung(handles.lb_tkp, handles);
tkp=getappdata(handles.lb_tkp,'tkp2');
tpp=getappdata(handles.lb_tpp,'tpp2');
po=getappdata(handles.lb_po,'po2');
nq=getappdata(handles.lb_nq,'nq2');
nt=getappdata(handles.lb_nt,'nt2');
tq=getappdata(handles.lb_tq,'tq2');
tt=getappdata(handles.lb_tt,'tt2');
s=getappdata(handles.lb_s,'s2');
set(handles.lb_tkp,'String',tkp);
set(handles.lb_tpp,'String',tpp);
set(handles.lb_po,'String',po);
set(handles.lb_nq,'String',nq);
set(handles.lb_nt,'String',nt);
set(handles.lb_tq,'String',tq);
set(handles.lb_tt,'String',tt);
set(handles.lb_s,'String',s);
% hObject handle to b_analisa_data (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
私のプログラムは、8 つのリストボックスで数式を計算した結果をすべて表示します。しかし、「関数hitung」を呼び出して、8つのリストボックスにも表示できるとは思いもしませんでした。以下のコードを試してみたところ、いくつかのエラーが発生しました。
function b_analisa_data_Callback(hObject, eventdata, handles)
hitung(handles.lb_tkp,handles.lb_tpp, handles);
....
そのため、リストボックスを1つだけ試してみましたが、プログラムがwhileループを使用しない限り機能します。
function b_analisa_data_Callback(hObject, eventdata, handles)
hitung(handles.lb_tkp, handles);
...
プログラムが while ループを使用する条件の場合、プログラムは応答しなくなります。なぜこのような結果になるのか、私はまだ混乱しています。