创建一个函数,它接受两个向量,并返回一个向量,向量的元素没有在另一个向量

13个视图(30天)
我试图创建以下功能:
程序的函数调用有两种版本:1。[你]= exclusion_select (u_origin, v)或2。[u, u_excl] = exclusion_select (u_origin, v)的输入参数u_origin和v是两个数值向量(u_origin按升序)和程序必须从u_origin中提取元素的v u_origin和产生输出参数向量u (u_origin但没有相同元素除外)和第二个选项包含的元素的向量u_excl也被排除在u。例如:u_origin =[1 7 23 45 62]和v =[45 35 1 15]调用[u, u_excl] = exclusion_select (u_origen, v) u = [7 23 62] u_excl = 45 [1]。提示:使用二进制搜索作为一个辅助函数,称为exclusion_select函数内
我看过这可以很容易地通过使用完成 setdiff 命令
函数[u, u_excl] = exclusion_select (u_origen, v)
[u,我]= setdiff (u_origen, v);
N = 1:长度(u_origen);
K = setdiff (N,我);
i = 1:长度(K)
u_excl (i) = u_origen (K (i));
结束
结束
但我想看看这将是一个程序,不使用matlab命令,就像如果它没有使用 setdiff 吗?谢谢你!
3评论
1月
1月 2019年3月28日
编辑:1月 2019年3月28日
“不工作”是一个弱的描述你的问题。如果你希望别人帮助你,请提了,问题是什么。
如何:定义 u u_excl emopty矩阵。运行一个循环遍历所有元素的数组 u_origen。 检查每一个元素,如果它存在 v : 如果任何(u_origen (k) = = v) 。如果是这样,附加的元素 u ,否则 u_excl
而不是 如果任何(u_origen (k) = = v) 您可以使用二分查找。考虑到“u_origin升序排序”,所以你必须运行一个循环的元素 v 代替。这可能说明,为什么第二输出[45岁,1](元素的顺序发生 v ),而不是(1,45岁)。
顺便说一下,一个简化的代码:
函数[u, u_excl] = exclusion_select (u_origen, v)
[u,我]= setdiff (u_origen, v);
N = 1:长度(u_origen);
u_excl = u_origen (setdiff (N,我));
结束

登录置评。

答案(1)

1月
1月 2019年3月28日
编辑:1月 2019年3月28日
蛮的方法,创建了一个巨大的大型临时矩阵输入:
u_origin = [1 7 23 45 62];
35 v = [45 1 15];% u = [7 23 62] u_excl = 45 [1]。
函数[u, u_excl] = exclusion_select (u_origen, v)
m = (u_origin = = v。',1);
u = u (m);
u_excl = u (~);
结束
这个回答 u_excl (1、45),奇怪的[45岁,1]不如想的问题。很难猜,一般规则是创建后者,而[1,45]是相同的订单作为输入 u
但更重要的可能是细节: 提示:使用二进制搜索作为辅助功能
只要你不告诉我们,你的“二分搜索法”,我们不能告诉你,如何使用它。试着通过你自己的。
我的代码是足够小的例子,不是生产性的工作,它也会不匹配你的作业问题。

类别

找到更多的在循环和条件语句帮助中心文件交换

下载188bet金宝搏

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!