mathematica 记录本



昨天画了几个朗道能级图,发现增加应力和无应力时几乎的能级分裂几乎相同,从头到尾检查了公式,代码,发现没有错误,所以为应力的效应不大。今天试着给出解析式时,发现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[Eigenvalues@(hLanZeeStr[#])] & /@ klis
  
  ]

上面的代码,出现了全局和,Block环境里都有er这个变量。本来的取值是er=0.1,但是在phLanZeeStr这个函数里er本来用来做误差分析error的小量,碰巧重叠了,所以在这个block里,虽然没有明显的er变量,但是调用的函数hLanZeeStr里,由于其是延迟定义,故er将被赋值为error小量,造成了很大的误差。

所以 block使用时,一定要谨慎定义的变量。




转载于:https://my.oschina.net/u/1991972/blog/515522

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值