mma是否有类似批量执行过程的功能?
mathematica吧
全部回复
仅看楼主
level 1
比如说,我已经在一个.nb文件中写了一个较长的计算过程,这个过程的输入条件是a,b,c这三个变量,输出结果是d,e,一个曲线图。但是我要重用这个过程算很多种工况。也就是说
a=1,b=2,c=3
a=2,b=3,c=4
....
由于这个过程较长较复杂,我把这个过程再写成一个函数的话太麻烦。
那么,能否另写一个nb文件,在其中设定
a=1,b=2,c=3
a=2,b=3,c=4
....
我运动这个新的nb文件后,在此nb文件中出现对应的计算结果,即
a=1,b=2,c=3,d,e,一个曲线图
a=2,b=3,c=4,d,e,一个曲线图
2026年02月15日 07点02分 1
level 1
我运动这个新的nb文件后
写错了,是,
我运行这个新的nb文件后
2026年02月15日 07点02分 2
level 1
2026年02月15日 11点02分 3
level 1
秀逗了,发现竟然如此简单。
还有其它方法吗?
2026年02月15日 11点02分 5
吧务
level 15
“由于这个过程较长较复杂,我把这个过程再写成一个函数的话太麻烦。”……不是,你这结论咋来的?你3楼写的不就是个丐版函数吗?
2026年02月15日 11点02分 6
吧务
level 15
“还有其他方法吗”另一个可行思路是SE帖子《How to combine notebook into one cell》(编号50570),此方法的一个用例是《working with notebooks ('looping' a notebook and storing the results of each step in another notebook)》(编号66159),但是个人建议除非确实必要,别整这个花活,定义函数是标准做法。
2026年02月15日 11点02分 7
level 1
我在3楼只是举了个例子。注意,过程=()中括号以内部分,就是之前已写好的主代码段。
也就是说,不需要改写原代码,只需要把它括号起来,前面加个变量命名。然后,就可以多次使用了。
这主要是给其它不会mma的人用的。而且,万一后面主代码段别人改了,也只需要复制过来,覆盖粘贴括号以内部分。
在实际工作中,更重要的是保证业务工作效率高,防止误操作,保证代码版本正确。函数确实是最规范的做法,从程序员的角度看。但它不利于业务逻辑的整体快速变更,这也是抽象的副作用。
2026年02月16日 02点02分 8
level 1
又发现上面的写法,如果在()中,有很复杂的操作,比如解微分方程组,打印曲线图,第一次用可以,第二次用就不起作用了。
看来,还是老老实实写函数,但我只写一个大函数,不再拆分为多级小函数,也不用module,尽量保证与业务逻辑的整体对应,而不追求代码程序的软件工程规范性。
还是那句话,我是用mma做业务生产工具的,业务变代码变,越简单越好。不搞多级抽象,作茧自缚。
2026年02月16日 02点02分 10
……感觉你似乎对Mathematica里的函数定义存在某种误解,总之你看一下我11楼和12楼写的。
2026年02月16日 03点02分
吧务
level 15
一会儿要去忙活过年了,虽然不知道LZ是不是有这个误解,总之代码先放这里:
Clear[过程];
过程[a_, b_] := (c = a + b;
Partition[{"a", a,
"b", b,
"c", c}, 2] // MatrixForm)
(* 或者: *)
过程 = {a, b} |-> (c = a + b;
Partition[{"a", a,
"b", b,
"c", c}, 2] // MatrixForm)
就算是不想写自变量,那也应该用延迟赋值(:=)而非立即赋值(=):
(* 我开头没清变量,因为没必要 *)
过程 := (c = a + b;
Partition[{"a", a,
"b", b,
"c", c}, 2] // MatrixForm)
2026年02月16日 02点02分 11
明确一下,类似“过程 :=”的设计当然是有可取之处的,当参数的变化不太频繁时,这种写法其实比定义函数更简洁易读。在我看来Mathematica里那一堆全局变量(例如$Assumptions)也是基于同一思想。
2026年02月16日 03点02分
|-> 这个写法引入得比较晚,你还在版本8的话可以用 Esc + fn + Esc 输入,更多信息参考\[Function]的文档。
2026年02月16日 03点02分
吧务
level 15
使用效果如下:
2026年02月16日 03点02分 12
level 1
过程 := (c = a + b;
Partition[{"a", a,
"b", b,
"c", c}, 2] // MatrixForm)
吧主,我要的就是上面这一段。[呵呵]
2026年02月17日 14点02分 13
1