Undefined function or variable in my simple project

조회 수: 2 (최근 30일)
inggrid kinanti
inggrid kinanti 2020년 7월 3일
댓글: Walter Roberson 2020년 7월 20일
Hi...
I tried to develop my simple project after studying matlab. but I have a problem that is when I press the process button (btnTrain), an error like this appears;
1) Undefined function or variable 'addressfile'.
2.) Error in try 01> btnTrain_Callback training_ data = file address (:, 1: 5);
Could you help me correct my code for that?
Please help me to correct my error code,
this is my code :
% --- Executes on button press in btnBrowse.
function btnBrowse_Callback(hObject, eventdata, handles)
proyek=guidata(gcbo);
[namafile,direktori]=uigetfile({'*.xls;*.xlsx','file excel(*.xls,*.xlsx)';'*.*','semua file(*.*)'},'buka file Excel');
alamatfile=fullfile(direktori,namafile);
xlRange='A1:E32';
set(handles.btnBrowse,'String','alamatfile');
[a,b,c]=xlsread(alamatfile,xlRange);
bar=size(c,1);
col=size(c,2);
rnames=linspace(1,bar,bar);
data=c(:,1:col)
data_latih=alamatfile(:,1:5);
target_latih=alamatfile(:,6)';
[m,n]=size(data_latih);
set(handles.tabel1,'Data',data);
guidata(hObject,handles);
% --- Executes on button press in btnTrain.
function btnTrain_Callback(hObject, eventdata, handles)
data_latih=alamatfile(:,1:5);
net=newff(minmax(data_latih),[30 20 20 20 1],{'tansig','logsig','logsig','logsig','purelin'},'traingdx');
learning_rate=str2double(get(handles.edit11,'String'));
epoch=str2double(get(handles.edit12,'String'));
goal=str2double(get(handles.edit13,'String'));
show=str2double(get(handles.edit14,'String'));
net.performFcn = 'mse';
net.trainParam.showWindow = true;
net.trainParam.showCommandLine = false;
net.trainParam.show = show;
net.trainParam.epochs = epoch;
net.trainParam.time = inf;
net.trainParam.goal = goal;
net.trainParam.min_grad = 1e-09;
net.trainParam.max_fail = 3000;
net.trainParam.lr = learning_rate;
net.trainParam.mc=0.95;
[net_keluaran,tr,Y,E]= train(net,data_latih,target_latih);
bobot_input = net_keluaran.IW{1,1};
bobot_bias_input = net_keluaran.b{1,1};
bobot_lapisan1 = net_keluaran.LW{2,1};
bobot_bias_lapisan1= net_keluaran.b{2,1};
bobot_lapisan2 = net_keluaran.LW{3,1};
bobot_bias_lapisan2= net_keluaran.b{3,1};
bobot_lapisan3 = net_keluaran.LW{4,1};
bobot_bias_lapisan3= net_keluaran.b{4,1};
bobot_lapisan4 = net_keluaran.LW{5,1};
bobot_bias_lapisan4= net_keluaran.b{5,1};
jumlah_iterasi = tr.num_epochs;
nilai_keluaran = Y;
nilai_error = E;
error_MSE = (1/n)*sum(nilai_error.^2);
save net.mat net_keluaran
% Hasil prediksi
hasil_latih = sim(net_keluaran,data_latih);
max_data = max(max('Data'));
min_data = min(min('Data'));
hasil_latih = ((hasil_latih-0.1)*(max_data-min_data)/0.8)+min_data;
set(handles.tabel_output,'Data',hasil_latih);

채택된 답변

Walter Roberson
Walter Roberson 2020년 7월 3일
Your code only has alamatfile as a local variable to btnBrowse_Callback . You are not saving it for use in other functions.
alamatfile=fullfile(direktori,namafile);
alamatfile is going to be a file name -- a character vector.
[a,b,c]=xlsread(alamatfile,xlRange);
You read the file contents into a, b, c. Meanwhile, alamatfile is going to continue to be the character vector that is the file name.
data_latih=alamatfile(:,1:5);
The character vector has one row, so using : as the first subscript refers to that one row, which is okay. Then you take the first 5 characters of the file name and assign them to data_latih .
target_latih=alamatfile(:,6)';
target_latih is going to become the 6th character of the file name only. As it will be a scalar, the transpose at the end of the line is not doing anything useful there.
[m,n]=size(data_latih);
We established above that data_latih is going to be a 1 x 5 character vector because you extract it from the file name. So m will become 1 and n will become 5.
You do not do anything with data_latih or target_latih or m or n before you return from the function, so it is not clear why you bother calculating them.
function btnTrain_Callback(hObject, eventdata, handles)
data_latih=alamatfile(:,1:5);
If you had managed to share alamatfile from the other function, then it would be the character vector that is the file name, and data_latih would become the first 5 characters of that.
net=newff(minmax(data_latih),[30 20 20 20 1],{'tansig','logsig','logsig','logsig','purelin'},'traingdx');
so you take the minmax of the 5 characters in data_latih . But that is an error, because minmax() must be applied to a numeric array or a cell array.
  댓글 수: 5
inggrid kinanti
inggrid kinanti 2020년 7월 6일
if I want alamatfile to be file name, what steps should I take afterwards?
Walter Roberson
Walter Roberson 2020년 7월 20일
(Reminder for myself)

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Characters and Strings에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by