作业帮 > 数学 > 作业

Mathematica 如何实现交叉计算(二)?

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/11 00:54:45
Mathematica 如何实现交叉计算(二)?
如何实现交叉计算(二)?
例如:
输入: s1={{1,2},{3,4},{5,6},{3,2}};
s2={{4,7},{24,31},{48,72}};
输出: s3={48,60,72}
说明: s1是乘法表,s2是与s1对应的区间表
下面的"相乘"表示两个表中任何两个元素相乘,如{1,2}与{3,4}相乘等于{3,4,6,8},其中两个表c1,c2"相乘"可用Table[c1[[j1]]*c2[[j2]],{j1,Length[c1]},{j2,Length[c2]}]函数.
首先取s1中前两个子表"相乘",并按s2中第1个区间取出一个表,再把这个表与s1中第3个子表"相乘",并按s2第2个子表的区间取出一个表,所得表再与s1第4个子表"相乘"并按s2第3个子表的区间取出一个表.依次交叉做下去.
上式子为: {1,2}与{3,4}"相乘"={3,4,6,8},取区间{4,7}={4,6}与{5,6} "相乘"={20,24,30,36} 取区间{24,31}={24,30}与{3,2}相乘={72,90,48,60} 取区间{48,72}={48,60,72}
谢谢!
s1 = {{1,2},{3,4},{5,6},{3,2}};
s2 = {{4,7},{24,31},{48,72}};
s3 = Fold[
Intersection[Times @@@ Tuples@{#1,#2[[1]]},Range @@ #2[[2]]] &,
First@s1,Thread[{Rest@s1,s2}]]