MATLAB|标准参数输入对话框创建

引言

MATLAB是科学工程计算分析的重要编程环境,除了数值计算代码的编写,我们往往修改输入参数,作为研究变量。如果直接在代码脚本中修改有两个问题:

  • 修改不便,必须进入代码内部,找出相关变量;
  • 不熟悉程序的人有可能将程序修改错误,得到错误的结果。

解决这一问题的一种方案是:采用参数对话框输入。但是,MATLAB自带的inputdlg函数功能有限,调用较为麻烦,因此在此基础上订制开发了paradlg

问题描述

某MATLAB程序,需要输入以下参数:

f_center = 100
filename  = 'B1_C1_F'
dt = 16
f_range = [0 20]

预期以下图的对话框输入:

MATLAB|标准参数输入对话框创建_第1张图片
paradlg.jpg-27.3kB

应用示例

基本调用

使用方法:

  • 构造prompt0数据,第一列为输入提示,第二列为默认参数;
  • 支持三类数据输入,标量、向量、字符串;
  • 调用paradlg函数,返回输入的数据集para
  • para中的元素依次赋值给目标的变量f_center,filename_pub,dt,f_range
prompt0 = {                                                         % 对话框参数
    '发射信号中心频率(kHz)', 100
    '发射信号中心频率(kHz)','B1_C1_F'
    '采样周期dt (e-9 s)',16
    '绘图频谱范围(kHz)',[0 20]
};

para = paradlg(prompt0);

f_center = para{1};                                                 % 发射信号中心频率(kHz)
filename_pub = para{2};                                             % 输出报告文件名
dt = para{3};                                                       % 采样周期
f_range =para{4};

结果如图:

MATLAB|标准参数输入对话框创建_第2张图片
paradlg.jpg-25.5kB

高级调用

如需控制对话框的宽度标题,则在函数paradlg中输入第二个变量dlg0

%       dlg0.width -- 对话框宽度
%       dlg0.title -- 对话框标题

操作示例:

prompt0 = {                                                         % 对话框参数
    '发射信号中心频率(kHz)', []
    '发射信号中心频率(kHz)','B1_C1_F'
    '采样周期dt (e-9 s)',16
    '绘图频谱范围(kHz)',[0 20]
};

dlg0.width = 100;
dlg0.title = '信号谱分析参数输入';

para = paradlg(prompt0,dlg0);

f_center = para{1};                                                 % 发射信号中心频率(kHz)
filename_pub = para{2};                                             % 输出报告文件名
dt = para{3};                                                       % 采样周期
f_range =para{4};    
MATLAB|标准参数输入对话框创建_第3张图片
paradlg-pro.jpg-33.6kB

主程序代码

function para = paradlg(prompt0,dlg0 )
% 题目:标准化对话框创建程序
% 参数:
%       prompt0    -- 必要参数,提示语以及默认参数,n*2
%       dlg0       -- 可选参数对话框宽度,标题信息
%       dlg0.width -- 对话框宽度
%       dlg0.title -- 对话框标题
%       dlg0.auto  -- 是否自动保存上次数据,dlg0.auto=1或dlg0.auto=0
% 功能:
%       创建标准化参数输入对话框
%       支持 标量、向量、字符串
%       导出输入参数
%       记忆上次输入
% 作者: 马骋
% 参考:无,使用示例见附录
% 2016.03.30 @HIT

%% prompt参数

n = size(prompt0,1);

prompt = cell(n,1);                                                 % 提示语
def0 = cell(n,1);                                                   % 默认参数

for iloop = 1:n
    prompt{iloop} = prompt0{iloop,1};                               % 参数分离
    def0{iloop} = num2str(prompt0{iloop,2});                        % 默认参数必须为字符串格式
end

try 
    load data_dlg                                                   % 导入上次运行数据def
catch
    def =def0;
end

%% dlg参数
try                                                                 % 宽度设置
    dlg.width = dlg0.width;
catch
    dlg.width = 60;    
end

try                                                                 % 标题设置
    dlg.title = dlg0.title;
catch
    dlg.title = '参数输入'; 
end

%% 对话框

linewidth = ones(n,2);                                              % 宽度设置
linewidth(:,2) = linewidth(:,2)*dlg.width;                          % 可以输入控制
options.Interpreter='tex';
para_dlg = inputdlg(prompt,dlg.title,linewidth,def,options);        % 打开对话框,获取参数字符串

%% 参数转换

% 向量转换,字符串转换

para = cell(n,1);                                                   % 输出参数

for iloop = 1:n
    temp = ['[',para_dlg{iloop},']'];                               % 默认按向量转换
    para{iloop} = str2num(temp);
    
    if isempty(para{iloop})                                         % 如果转换后为空,则为字符串
        para{iloop} = para_dlg{iloop};
    end
    
end

%% 参数保存

def = para_dlg;                                                     % 本次输入赋值给def
save('data_dlg','def');                                             % 保存对话框数据,用于下次导入

try 
   if ~dlg0.auto
       delete data_dlg.mat
   end
catch
end

end

你可能感兴趣的:(MATLAB|标准参数输入对话框创建)