Mathematica Pure Function in Map 在Map中使用纯函数
程序员文章站
2022-03-02 10:49:30
...
前两天在看Mathematica关于Pure Fucntion的帮助文档时, 发现了这样的一个与Map联用的例子:
乍一看,非常困惑的思考为啥结果不是 (a+b+c)^2。纠结了很久以后,今天抽空把Mathematical打开试了一下,终于发现了问题所在。说之前,先看下这两个例子:
(*Using pure function in Map*)
in[1]:=Map[Function[x, x^2], a + b + c]
Out[1]:= a^2 + b^2 + c^2
In[2]:= Map[Function[x, x^2], {a + b + c}]
Out[2]:={(a + b + c)^2}
其实,只要对比下这两个例子,问题的原因就很清楚了,Map方法的第二个参数应该是个list,第一种情况,其实Mathematica将a b c作为符号,三者相加时,加法优先级低,Map的高,所以先平方再加。第二种,因为是在list内,所以加法先做,然后再使用Map方法
再看下边两个例子:
in【1】:=Map[Function[x, x^2], {Norm[{a, b, c}]}]
Out[1]:={Abs[a]^2 + Abs[b]^2 + Abs[c]^2}
In[2]:= Map[Function[x, x^2], Norm[{a, b, c}]]
Out[2]:=((Abs[a]^2 + Abs[b]^2 + Abs[c]^2)^2)^(1/4)
第一个list范数在一个list内,所以,正常的输出,结果是范数的平方。
第二个,list范数没有外围的list定义,所以具体执行的Map方法非常令人困惑。为了搞清楚为啥是这样的结果,我又做了几个测试:
In;=Map[Function[x, x^2], a^b]
Out:= (a^2)^b^2
in:= Map[Function[x, x^2], a^0.5]
Out:= (a^2)^0.25
好吧,清楚了吧!
下一篇: Mathematica 解方程组