MATLAB存储连续更新的值

时间:2014-12-03 10:52:04

标签: string matlab user-interface store updating

我有一个MATLAB GUI(由GUIDE提供)帮助我做一些计算..

我有一个'计算'按钮,每按一次就会计算一个新的重量和x值(并操纵输入)

我需要以矩阵形式存储该2值,但我不知道如何使用它。因此需要创建一个等于计算值长度的矩阵并存储它们。

计算“计算”点击次数的循环可能有所帮助,但我不确定。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这是一些简单的代码,我认为你做了什么。我为演示创建了一个“程序化”GUI,但在GUIDE代码中很容易实现。具体来说,查看CalculateCallback,这是用户按下用于“计算”的按钮时执行的回调。这里没有计算/数据操作本身,代码只从文本框中获取用户输入并使用值更新矩阵。还有一个计数器来跟踪计算的数量。

代码被注释,应该很容易遵循。如果没有,请要求澄清!

function CalculateGUI

clear
clc
close all

%// Create figure and uielements
handles.fig = figure('Position',[440 500 500 150]);

handles.CalcButton = uicontrol('Style','Pushbutton','Position',[60 70 80 40],'String','Calculate','Callback',@CalculateCallback);

handles.Val1Text = uicontrol('Style','Text','Position',[150 100 60 20],'String','Value 1');
handles.Val1Edit = uicontrol('Style','Edit','Position',[150 70 60 20],'String','');

handles.Val2Text = uicontrol('Style','Text','Position',[220 100 60 20],'String','Value 2');
handles.Val2Edit = uicontrol('Style','Edit','Position',[220 70 60 20],'String','');

handles.MatrixText = uicontrol('Style','Text','Position',[290 125 100 20],'String','Value 1 Value 2');
handles.MatrixEdit = uicontrol('Style','Text','Position',[300 25 80 100]);

handles.CounterText1 = uicontrol('Style','Text','Position',[40 20 80 20],'String','Loop counter');
handles.CounterText2 = uicontrol('Style','Text','Position',[130 20 80 20],'String','');

%// Initialize counter to get # of values calculated
handles.CalculateCounter = 0;
handles.MatrixValues = zeros(1,2);

guidata(handles.fig,handles); %// Save handles structure of GUI. IMPORTANT

    function CalculateCallback(~,~)

        %// Retrieve elements from handles structure.
        handles = guidata(handles.fig);

        %// Get entries in text boxes. Assumes inputs are numbers.
        Val1 = str2double(get(handles.Val1Edit,'String'));
        Val2 = str2double(get(handles.Val2Edit,'String'));

        %// If 1st calculation, initialize the matrix containing the
        %// values. Otherwise, concatenate current values with existing matrix.
        if handles.CalculateCounter == 0
            handles.MatrixValues = [Val1,Val2];
        else
            handles.MatrixValues = [handles.MatrixValues; Val1,Val2];
        end

       %// Print matrix values in text box. 
       set(handles.MatrixEdit,'String',num2str(handles.MatrixValues));

       %// Update counter and display current value in GUI.
       handles.CalculateCounter = handles.CalculateCounter + 1;
       set(handles.CounterText2,'String',num2str(handles.CalculateCounter))
       guidata(handles.fig,handles); %// Save handles structure of GUI.
    end
end

以下是一些计算后的GUI屏幕截图:

enter image description here

完成后,您可以从handles.MatrixValues获取数据并随意执行任何操作。 希望能帮助您入门!