Matlab⼿动实现plot——输⼊参数数可变的函数
Matlab 输⼊参数数可变的函数
varargin是函数定义语句中的⼀个输⼊变量,允许函数接受任意数量的输⼊参数。
matlab数组赋值在执⾏函数时,varargin是⼀个 1×N元胞数组,其中N是函数在显式声明的输⼊后收到的输⼊项数。但是,如果该函数在显式声明的输⼊后未收到任何输⼊,则varargin是空元胞数组。
例⼦ 1
重新包装plot,使得绘制的线条的默认颜⾊为红⾊。
function varargout = redplot(varargin)
[varargout{1:nargout}] = plot(varargin{:},'Color',[1,0,0]);
end
执⾏函数,在redplot中的varargin是⼀个 1×2 的元胞数组,varargin{1} = x,varargin{2} = y。
x = 0:pi/100:2*pi;
y = sin(x);
redplot(x,y)
例⼦ 2
plot是⼀个⽐较常⽤的函数,可变数量的输⼊可以不考虑“顺序”,如
plot(x, y, 'Color', [1,0,0], 'LineStyle', '--');
plot(x, y, 'LineStyle', '--', 'Color', [1,0,0]);
的运⾏效果是⼀样的。参考实现如下:
1. 定义结构体params,包含⼀些合法的字段和默认值,后续若需要增加字段或修改默认值,只需修改这⼀步骤的代码即可;
2. 根据varargin转换为结构体,并赋值给params,可以参考。转换为结构体的好处就是避开了输⼊参数顺序的影响;
3. 根据params对⽬标对象进⾏赋值。
function [line_obj] = myplot(x, y, varargin)
%% 可选参数的默认值
% 可直接在这添加参数⽽不需要修改后⾯的代码(⼀般情况)
params.Color = [0, 1, 0];
params.LineStyle = '-';
params.LineWidth = 0.5;
params.Marker = 'none';
params.MarkerSize = 6;
%% 输⼊参数处理
% 将输⼊的元胞数组转化为结构体
input_params = struct(varargin{:});
% 将 input_params 与 params 相同字段的值赋值给 params 对应的字段
keys = fieldnames(input_params);
for i = 1:length(keys)
cur_key = keys{i};
if isfield(params, cur_key)
params.(cur_key) = input_params.(cur_key);
else
warning('字段"%s"不存在', cur_key);
fprintf('\n');
end
end
%% 修改⽬标类
line_obj = line(x, y);
keys = fieldnames(params);
for i = 1:length(keys)
cur_key = keys{i};
line_obj.(cur_key) = params.(cur_key);
end
end
执⾏函数
x = linspace(0, 2*pi, 100);
y = sin(2*pi*x);
[lineobj] = myplot(x, y, ...
'Color', [1,0,0], ...
'LineStyle', '--', ...
'Name', 'Jake', ... % ⾮法字段 'Marker', '*');
运⾏结果:
警告: 字段"Name"不存在
> 位置:untitled>myplot (第 32 ⾏)
位置: untitled (第 6 ⾏)
Processing math: 100%
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论