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

引言

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

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

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

问题描述

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

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

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

paradlg.jpg-27.3kB
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};

结果如图:

paradlg.jpg-25.5kB
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};    
paradlg-pro.jpg-33.6kB
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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,444评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,867评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,157评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,312评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,673评论 3 289
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,802评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,010评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,743评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,470评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,696评论 2 250
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,187评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,538评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,188评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,127评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,889评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,741评论 2 274

推荐阅读更多精彩内容