【问题标题】:MATLAB GUI: updating variables to mat fileMATLAB GUI:将变量更新为 mat 文件
【发布时间】:2017-11-21 20:03:39
【问题描述】:

我有一个程序,最后会启动一个 GUI。我使用指南构建了它。我使用名为 n.mat 的 mat 文件(和按钮功能)将程序中的 4 个变量加载到 4 个 GUI 文本框中。

在节目中

n = [nuno, ndue, ntre, nquattro];
save n.mat

GUI界面按钮

% --- Executes on button press in upload.
function upload_Callback(hObject, eventdata, handles)
% hObject    handle to upload (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

S = load('n.mat');

handles.v1 = S.nuno;
handles.v2 = S.ndue;
handles.v3 = S.ntre;
handles.v4 = S.nquattro;

set(handles.initial1,'String',num2str(handles.v1));
set(handles.initial2,'String',num2str(handles.v2));
set(handles.initial3,'String',num2str(handles.v3));
set(handles.initial4,'String',num2str(handles.v4));

guidata(hObject, handles); 

然后我有其他 4 个文本框,我在其中更改变量的值并将它们保存在另一个 mat 文件中。我不确定我这样做是否正确。

在程序中(在调用 myGUI 之前)我为更新的变量初始化 m 向量。

nunof = 0;
nduef = 0;
ntref = 0;
nquattrof = 0;
m = [nunof, nduef, ntref, nquattrof];
save m.mat

在程序中(在调用 myGUI 之后)我尝试加载 m.mat 文件并从中提取变量,以便我可以在程序中进一步的一些计算中使用它们。

load m.mat;

nunof = m.nunof;
nduef = m.nduef;
ntref = m.ntref;
nquattrof = m.nquattrof;

在此之前,在 GUI 界面的“完成”按钮中,我尝试将输入保存到 m.mat 文件中,如下所示:

function done_Callback(hObject, eventdata, handles)
% hObject    handle to done (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% save the parameters to file

load('m.mat');
m = [nunof, nduef, ntref, nquattrof];
nunof = str2num(get(handles.final1,'String'));
nduef = str2num(get(handles.final2,'String'));
ntref = str2num(get(handles.final3,'String'));
nquattrof = str2num(get(handles.final4,'String'));

save('m.mat','-append');

我想知道为什么这不起作用以及如何更改它。非常感谢。

【问题讨论】:

    标签: matlab user-interface matlab-guide matlab-gui


    【解决方案1】:

    您不能使用save('m.mat','-append');。你错过了追加的选项。

    为了使用追加,你必须声明一个文件名,变量然后追加。

    save(filename,variables,'-append')
    

    取自-https://au.mathworks.com/help/matlab/ref/save.html

    另外,从您的代码中,您没有重新定义 m 结构中的变量。

    【讨论】:

    • 谢谢.. 我只是试图在'nquattrof' 定义之后移动m = [nunof, nduef, ntref, nquattrof]; 并将save('m.mat','m','-append') .. 我得到这个错误:Struct contents reference from a non-struct array object. Error in virtualnet (line 325) <-- my program nunof = m.nunof; 还有你所说的'另外,从您的代码没有重新定义 m 结构中的变量。我该怎么做?我正在学习编码。
    • 想想你在done_Callback 函数中做了什么。您首先加载'm.mat'。什么是米? m 已经是一个结构了吗?如果是,那么您认为m = [nunof, nduef, ntref, nquattrof]; 会做什么?这是在结构中重新定义变量的正确方法吗?查看 MATLAB 文档以了解结构以及如何访问和重新定义其中的变量。
    • 我像这样重新定义了 m:m = struct('f1','nunof','f2','nduef','f3','ntref','f4','nquattrof'); 但我仍然得到Reference to non-existent field 'nunof'.
    • 在结构中定义变量时不要使用' ''nunof' 应该只是 nunof
    • 我按照你说的做了,并且注释了程序中我初始化 m.mat 文件的部分,它现在正在工作,最后更新的变量显示在命令窗口中!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多