网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
04月24日
漏签
0
天
mathematica吧
关注:
19,960
贴子:
74,278
看贴
图片
吧主推荐
游戏
13
回复贴,共
1
页
<<返回mathematica吧
>0< 加载中...
mma是否有类似批量执行过程的功能?
只看楼主
收藏
回复
go活宝哈哈
安装激活
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,一个曲线图
go活宝哈哈
安装激活
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我运动这个新的nb文件后
写错了,是,
我运行这个新的nb文件后
2026-04-24 02:08:58
广告
不感兴趣
开通SVIP免广告
go活宝哈哈
安装激活
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
go活宝哈哈
安装激活
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
秀逗了,发现竟然如此简单。
还有其它方法吗?
xzcyr
吧主
15
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
“由于这个过程较长较复杂,我把这个过程再写成一个函数的话太麻烦。”……不是,你这结论咋来的?你3楼写的不就是个丐版函数吗?
xzcyr
吧主
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),但是个人建议除非确实必要,别整这个花活,定义函数是标准做法。
go活宝哈哈
安装激活
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我在3楼只是举了个例子。注意,过程=()中括号以内部分,就是之前已写好的主代码段。
也就是说,不需要改写原代码,只需要把它括号起来,前面加个变量命名。然后,就可以多次使用了。
这主要是给其它不会mma的人用的。而且,万一后面主代码段别人改了,也只需要复制过来,覆盖粘贴括号以内部分。
在实际工作中,更重要的是保证业务工作效率高,防止误操作,保证代码版本正确。函数确实是最规范的做法,从程序员的角度看。但它不利于业务逻辑的整体快速变更,这也是抽象的副作用。
go活宝哈哈
安装激活
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
又发现上面的写法,如果在()中,有很复杂的操作,比如解微分方程组,打印曲线图,第一次用可以,第二次用就不起作用了。
看来,还是老老实实写函数,但我只写一个大函数,不再拆分为多级小函数,也不用module,尽量保证与业务逻辑的整体对应,而不追求代码程序的软件工程规范性。
还是那句话,我是用mma做业务生产工具的,业务变代码变,越简单越好。不搞多级抽象,作茧自缚。
2026-04-24 02:02:58
广告
不感兴趣
开通SVIP免广告
xzcyr
吧主
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)
xzcyr
吧主
15
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
使用效果如下:
go活宝哈哈
安装激活
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
过程 := (c = a + b;
Partition[{"a", a,
"b", b,
"c", c}, 2] // MatrixForm)
吧主,我要的就是上面这一段。
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示