作业帮 > 综合 > 作业

Mathematica 如何得到2个表中多种运算符号的表达式?

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/06/13 02:57:38
Mathematica 如何得到2个表中多种运算符号的表达式?
如何得到2个表中多种运算符号的表达式?
输入:
s1={5,6,7,8}
s2={1,2,3,4}
例如如何得到2种运算符号的表达式:
s3=5~1#6~2#7~3#8~4
(其中~和#各表示一种运算符号,假设没有结合律,即前面得到的结果再与下一个数运算即可)
例1:如当~表示+,而#表示-时就输出:
s4=5-1+6-2+7-3+8-4=16
例2:如当~表示*,而#表示+时就输出:
s5=5*1+6*2+7*3+8*4=380 (假设没有结合律,即前面得到的结果再与
下一个数运算,这实际是省略了括号)
当s1,s2的元素很多,手工列出s3的表达式很麻烦,如何通过表s1,s2自动得到s3的表达式?
Mathematica 如何得到2个表中多种运算符号的表达式?
这个问题的具体处理,取决于你要使用的靠里的那个运算符是否具有Listable属性,以及靠外的那个运算符是否允许多个参数.大部分的算数运算符都有Listable属性.比如乘法:Attributes[Times]
(* {Flat, Listable, NumericFunction, OneIdentity, Orderless, Protected} *)多个参数方面嘛,有的有有的没有……总之你举的两个例子都符合这个条件,对于有这种属性的算符,可以这样处理:Plus @@ (s1-s2)
Plus @@ (s1 s2)至于没有Listable属性的嘛,其实也差不多……唉呀直觉上这个回答已经够你用了,就先到这儿吧.

再问: 可能我没说清楚 表达式:s3=5~1#6~2#7~3#8~4 实际应该是:s3=(((((((5~1)#6)~2)#7)~3)#8)~4) 因此 s4=((((((5*1)+6)*2)+7)*3)+8)*4=380 也就是说,如何才能把s3这个表达式列出来? 谢谢!
再答: 以你举的例子为例的话:mid = Transpose[{s1, s2}];
Fold[(# + #2[[1]]) #2[[2]] &, Times @@ First@mid, Rest@mid]