作业帮 > 综合 > 作业

我有m个向量,每个向量的元数不相同,现在需要求从每个向量中各取一个元数的组合,怎么才能用matlab求出

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/12 23:14:08
我有m个向量,每个向量的元数不相同,现在需要求从每个向量中各取一个元数的组合,怎么才能用matlab求出
例:a=[1 2 3 4;1 3 5 ;2 4 5 6 7],需要从这三个维度不同的向量中各取一个元素的组合.
我有m个向量,每个向量的元数不相同,现在需要求从每个向量中各取一个元数的组合,怎么才能用matlab求出
% 下面的函数可以实现.
>>[S,lt,n] = combine(a(:,1),a(:,2),a(:,3)); % 或者
>>[S,lt,n] = combine(a(1,:),a(2,:),a(3,:)); % 也可以改改代码实现 combine(a)
function [S,lt,n] = combine(varargin)
% N 组向量各取一值的组合
% 输出:S 结果矩阵;lt 每个参数的长度;n 结果总数
S=[];m=nargin; % 参数个数,没有参数退出
if m==0; return; end;
lt = arrayfun(@(m) length(varargin{m}),1:m); % 统计每个参数的长度
n = prod(lt); % 得到结果总数
if n==0; return; end; % 有空参数
for k=m:-1:1 % 从后往前取参数生成结果列
r=[];
l=lt(k); % 当前参数长度
j=1;
for p=(k+1):m
j=j*lt(p); % 当前参数中每个元素的重复次数
end
tm=n/(j*l); % 当前参数循环次数
for p=1:tm % 循环 tm 读取 varargin{k}
for h=1:l % 顺序读取 varargin{k}
for g=1:j % 每个元素重复 j 次
r=[r;varargin{k}(h)];
end
end
end
S=[r S];
end