0

我有一个函数,它接受 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,进程10,进程11,... ipcom1,ipcom2,ipcom3,ipcom4,ipcom5,ipcom6,ipcom7,ipcom8,ipcom9,ipcom10,ipcom11)

Epout = (sum(sum(supdataset(time,country,process1,ipcom1,output)))+sum(sum(supdataset(time,country, process2,ipcom2,output)))+ ... sum(sum(supdataset(时间,国家,process3,ipcom3,输出)))+sum(sum(supdataset(时间,国家,process4,ipcom4,输出)))+ ... sum(sum(supdataset(时间,国家,process5,ipcom5,输出) )))+sum(sum(supdataset(时间,国家,process6,ipcom6,output)))+... sum(sum(supdataset(time,country,process7,ipcom7,output)))+sum(sum(supdataset (时间,国家, process8,ipcom8,output)))+ ... sum(sum(supdataset(time,country,process9,ipcom9,output)))+sum(sum(supdataset(time,country, process10,ipcom10,输出)))+... sum(sum(supdataset(时间,国家,process11,ipcom11,输出))))/1000;

4

1 回答 1

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 对,但您不想使用的对的内容可以为空或其他值。

于 2013-08-04T13:27:24.967 回答