要被纯函数折磨疯了,总感觉MMA有BUG
mathematica吧
全部回复
仅看楼主
level 1
Map[Function[x,x^2],a+b+c]
这一句没有任何疑问,结果是:a^2+b^2+c^2
Map[Function[x^2],a+b+c]
这一句结果是3x^2,就有晕了,去掉[x,x^2]里面的那一个x,究竟是什么含义我还是搞不清楚。
Map[function[x,x^2],2+2+2]
这一句就彻底晕了,按逻辑不应该是2^2+2^2+2^2=12吗?但结果却是6。难道数字和字母的逻辑不一样?
Map[function[x,x^2],2+b+c]
这句就彻底晕得翻白眼了,结果是4+b^2+c^2,why??这下数字又和字母的逻辑一样。。。天哪,这什么语言,如此搅来搅去的逻辑,能让人掌握得了????
2022年06月24日 14点06分 1
level 1
看说明文档,Function[]和/@是一个意思吧,但事实似乎并不是
Map[Function[x,2x],2a]=8a
Function[x,2x]/@2a=2a
彻底晕死过去了
2022年06月24日 15点06分 2
Function[x,2x]/@(2a)
2022年06月25日 09点06分
可能会有初学者看不明白所以还是明确说一句:“Function[]和/@是一个意思”显然是“Map[]和/@是一个意思”之误。
2022年07月02日 04点07分
level 3
都写成这样就相等了:
Map[Function[x, 2 x], {2 a}]
Function[x, 2 x] /@ {2 a}
2022年06月24日 20点06分 3
吧务
level 10
Function[x^2]是返回x^2的常函数,Map到Plus[a,b,c]结果是Plus[x^2,x^2,x^2]
2022年06月25日 03点06分 4
吧务
level 10
Map[function[x,x^2],2+2+2]中,2+2+2计算为6,没有内部结构,Map后保持原样。
2022年06月25日 03点06分 5
考虑Map[Function[x,x^2],Unevaluated[2+2+2]]
2022年06月25日 03点06分
level 4
首先,你需要明白几个规则:
如果表达式包含未定义的符号,便会保持,不计算
前端输入的表达式会被内核转化为标准形式,如a+b+c,会变成Plus[a,b,c],再如2b,会变成Times[2,b]
针对你的问题,解释Map的逻辑
Map[Fun,List[a,b,c]]
会被计算为
List[Fun[a],Fun[b],Fun[c]]
并且List可以换成任何标头,如Plus,Times等等
我乐观的相信到这里,你已经明白是怎么回事了
下面说说十分灵活的自定义函数,如下几种表达完全等价:
Function[{a,b},a+b]

#1+#
2& 推荐用()包裹起来,这样赤裸裸的有时会产生意外的问题
{a,b}|->a+b 同上
以及基于以上形式的变体等等
回看你的问题
Function[x^2] 等价于 Function[{},x^2]
也就是说,它是个常函数。
2022年06月25日 16点06分 6
level 1
感谢楼上各位,对原贴中的几个表达式基本上搞清楚了
现在正在被数组操作折磨ing。。。。特别比如几个一位数组,矩阵的混合操作,语法规则太晦涩了。MMA又没有传统编程语言那么强大的调试功能,无法通过调试弄明白每个式子的运转逻辑。
基本我的体会就是MMA作为一个数学家开发的语言,它完全不考虑程序员的思维,也没打算作为一个开发平台,而只是希望用户用它来解决一些复杂计算问题,本质上类似Excel这样的应用平台。而这个世界上需要如此复杂计算的人,毕竟是极少数,所以MMA几十年来一直处于冷门中的冷门,也是必然的。
2022年06月26日 03点06分 7
MMA的调试方法主要是基于笔记本的,和其他语言不一样。你所谓的程序员的思维,也只是某类传统程序员的思维。懂数学的、会LISP系语言的用户学MMA就很快。
2022年06月26日 04点06分
@asdasd1dsadsa LISP语言以前在我脑袋中的印象就是一种上古时代的神秘语言,类似于甲骨文那种意思吧,其他就毫无了解了,看了你说的去搜了搜,好家伙,不但是甲骨文,还是宗教经文那种感觉了。。。瞠目结舌[咦]
2022年06月26日 07点06分
@帝国犀利哥 任何程序语言理论课程都会讲LISP。同时,表达式重写的设计也是形式文法和命题逻辑的基础。只是也许你过去学过的语言恰好都把这些特性藏起来了。
2022年06月26日 09点06分
数值(列表)的问题已经在你另一帖回了,调试的问题请参看精品区《教程】Mathematica自带调试器的使用》
2022年07月02日 04点07分
level 4
楼上所言,恕在下不敢苟同
阁下所遇困惑皆因对mathematica生疏所致,思维方式仍停留在传统编程模式,没有领悟到一切都是表达式的奥义
就像我从mathematica转战matlab所经历的痛苦一样,刚开始,只有很浅的体会,初步理解他的语法规则和各种数据操作等等,然而大多数时候总会感觉到不顺手,别扭,迷惑,不知所措等等,各种各样的痛苦感受,包括阅读文档时。
这些其实只是因为我对matlab不熟悉,思考解决问题的方式还是类似mathematica的逻辑链,
在克服了前两天强烈的卸载冲动(大骂matlab真操蛋,真垃圾,文档写的跟屎一样)之后,我静下心来,硬着头皮反复看文档,百度,谷歌所遇的问题,理解函数的计算逻辑,传入参数,返回值和相关示例,还有各种类型的数组及使用方式等等,不到一周,我对matlab的痛苦消失了。
不算总结的总结
在和新的人或事物相处过程中,往往要经历一段或长或短的磨合期,我们需要n次微调自身的态度和思维。
越是能快速调整适应,越是自身能力强大的体现,
痛苦和矛盾一样,只能被转化,不能被消除。
老话常说,手里拿个锤子,看什么都是钉子。
目前我的观点就是,工具只是个工具,大脑中的想法和意志才是核心。你需要去尽可能的熟悉某些工具,但千万不要把自己和工具绑定在一起。
这也可能是我喜欢尝试新事物的缘由吧。也或许是因为压制不住好奇心产生的冲动。(有没有可能是在自虐呢?O(∩_∩)O)
(这碗鸡汤,鄙人先干为敬!)
2022年06月26日 05点06分 8
[星星月亮]
2022年06月26日 05点06分
受教了,MMA的痛苦期,确实是非同一般的痛苦。。。[泪]
2022年06月26日 07点06分
level 4
两个建议,
不要对任何非List的结构使用Map,你把握不住;
Function里只放一个参数的用法是绝对不可能有用的,不要这样用Function;
2022年07月01日 10点07分 10
吧务
level 15
好像基本都有人说了,只有下面这个值得补充下:
Map[Function[x^2],a+b+c]
这一句结果是3x^2,就有晕了,去掉[x,x^2]里面的那一个x,究竟是什么含义我还是搞不清楚。
这个文档里其实写了:
Function第一个语法是只有一个参数的,这个语法其实是配合 # (纯函数里的通用自变量指代符号)使用的。比如:
但你那个Function[x^2]里没有含 # ,x^2在这里就只是个字母常量,你这搞法就跟定义
Function[z, x^2]
没啥区别。
2022年07月02日 04点07分 11
1