mathematica 记录本
程序员文章站
2022-03-31 12:24:45
...
昨天画了几个朗道能级图,发现增加应力和无应力时几乎的能级分裂几乎相同,从头到尾检查了公式,代码,发现没有错误,所以为应力的效应不大。今天试着给出解析式时,发现mathematica算出来的肯定不对。debug了一个多小时,终于发现了错误的源头,这估计很多时候会经常犯的错误,故记录于此,以防以后再犯。
er=0.1;
hLanZeeStr[kz_]:=
Block[{},{{er+kz,0,0},{0,er-kz,0},{0,0,er}}
]
phLanZeeStr[kin_, kfi_] :=
Block[{klis, ls, nu = 1000, ee, dd, lab,er=10^-10},
klis = Table[i/nu (kfi - kin) + kin, {i, 0, nu}];
ee = Sort[[email protected](hLanZeeStr[#])] & /@ klis
]
上面的代码,出现了全局和,Block环境里都有er这个变量。本来的取值是er=0.1,但是在phLanZeeStr这个函数里er本来用来做误差分析error的小量,碰巧重叠了,所以在这个block里,虽然没有明显的er变量,但是调用的函数hLanZeeStr里,由于其是延迟定义,故er将被赋值为error小量,造成了很大的误差。
所以 block使用时,一定要谨慎定义的变量。
转载于:https://my.oschina.net/u/1991972/blog/515522
推荐阅读
-
使用mathematica11软件求解2/3/4阶矩阵的转置矩阵教程
-
Mathematica 12中文版安装注册激活图文详细教程(附下载)
-
记录本人windows10 mysql8.0重置密码的一次体验
-
使用mathematica11软件求解2/3/4阶矩阵的转置矩阵教程
-
Java基础面试题汇总【持续更新】-小羊的记录本
-
Mathematica画图练习 图元绘图
-
如何创建从Visual Studio到Wolfram Mathematica的简单调用
-
二次曲面、空间曲线的拟合---mathematica
-
三维空间的贝塞尔曲线、B样条线分段拟合---mathematica
-
安全编码规范-小羊的记录本