我有一个函数,它接受11对输入参数(每对代表一个进程类型和一个输入商品)并根据所有这22个值计算结果。但是,我想使函数变得灵活,如果我想使用,例如,3对输入参数而不是11对,它仍然会得到一个结果,同时忽略其他8对未使用的参数。你能告诉我最简单的方法吗?
我尝试过使用varargin但是当我传递少于22个值作为输入参数时,MATLAB告诉我'(varargin)索引(在函数文件中)超过了marix维度。
有没有办法传递'非活动'输入参数,以便MATLAB不会对它们执行任何操作?
感谢。
以下是我在函数文件中的代码示例:
函数[Eprout,AnnEprout,Demand,AnnDemand,Status,AnnStatus] = supdem(时间,国家,权重,supdataset,输出,demdataset,... process1,process2,process3,process4,process5,process6,process7,process8 ,process9,process10,process11,... ipcom1,ipcom2,ipcom3,ipcom4,ipcom5,ipcom6,ipcom7,ipcom8,ipcom9,ipcom10,ipcom11)
Eprout =(sum(sum(supdataset(time,country,process1,ipcom1,output)))+ sum(sum(supdataset(time,country,process2,ipcom2,output)))+ ... sum(sum) (supdataset(time,country,process3,ipcom3,output)))+ sum(sum(supdataset(time,country,process4,ipcom4,output)))+ ... sum(sum(supdataset(time,country,process5, ipcom5,输出)))+ sum(sum(supdataset(time,country,process6,ipcom6,output)))+ ... sum(sum(supdataset(time,country,process7,ipcom7,output)))+ sum( sum(supdataset(time,country,process8,ipcom8,output)))+ sum(sum(supdataset(time,country,process9,ipcom9,output)))+ sum(sum(supdataset(time,country,process10) ,ipcom10,输出)))+ ... sum(sum(supdataset(time,country,process11,ipcom11,output))))/ 1000;
答案 0 :(得分:1)
有很多方法可以做到这一点。 varargin
的一个简单替代方法是传递具有0/1值的逻辑向量。在您的情况下,向量将包含11个条目。每个条目的值将向函数发信号通知是否期望该变量对在单独的数组中。在函数中,您可以使用一系列if
语句来检查v
中的条目是1还是0,例如:
function [myoutputs] = myfunction(array_1,array_2,...., v);
default_1 = some_values1; % change some_values1 to whatever should be defaults for variable 2
default_2 = some_values2; % change some_values2 to whatever should be defaults for variable 2
% ... additional default initializations
if v(1)
pair_1 = array_1;
else
pair_1 = default_1;
end
% ... if statements for remaining pairs...
% ... use pair_1 pair_2 ...
例如,传递矢量
v = [1 zeros(1,9) 1];
将向函数指示仅使用第一个和最后一个参数对。 您仍然应该传递11对,但您不想使用的对的内容可以是空的或其他值。