Matlab循环转Python循环及End关键字对应实现方法咨询
Matlab循环转Python说明
核心逻辑差异:Python无需显式写end结束循环
Python完全通过缩进层级控制代码块的作用范围:同一缩进级别的代码属于同一个父代码块,缩进回退即代表当前代码块结束,不需要像Matlab一样手动写end标记来关闭循环、条件判断等结构。
原Matlab代码的正确Python转换示例
首先提前说明:你需要先自行定义好me、eV2J、meff、hbar、V、L这些常量和数组;另外Matlab数组索引从1开始,Python默认从0开始,以下示例选择空置数组第0位匹配原Matlab的索引习惯,减少逻辑修改:
import math import cmath # 用于处理复数运算 N = 7 # 初始化数组,长度多留1位空置第0位,匹配Matlab的1索引规则 E = [0.0] * 10002 k = [0.0+0.0j] * (N+1) T = [0.0] * 10002 # 初始化2x2复数矩阵p,注意原Matlab代码中p/P大小写区分,不要写错 p = [[0.0+0.0j for _ in range(2)] for _ in range(2)] for j in range(1, 10002): # 对应Matlab的j=1:10001 E[j] = 0.0 + j * 0.01 for i in range(1, N+1): # 对应Matlab的i=1:N # 负数开根号需要用cmath的sqrt方法返回复数 k[i] = cmath.sqrt(2 * me * eV2J * meff * (E[j] - V[i])) / hbar for n in range(1, N): # 对应Matlab的n=1:(N-1) p[0][0] = 0.5 * (1 + k[n+1]/k[n]) * cmath.exp(-1j * k[n] * L[n]) T[j] = (abs(1 / p[0][0])) ** 2
注意事项
- 缩进要统一,要么全用4个空格、要么全用制表符,混用会触发语法错误
- 你之前写的示例代码把
E.append放到了内层i循环里,不符合原Matlab逻辑,原逻辑里E[j]仅在j循环中赋值一次,不需要放到内层循环重复追加 - Python列表索引用方括号
E[j],不要写小括号E(j),后者是函数调用语法 - 涉及复数运算时要使用
cmath模块的sqrt、exp方法,直接用math模块的方法计算负数开根号会直接报错
内容的提问来源于stack exchange,提问作者Rana M.Al-Marshedy
相关产品推荐
相关产品推荐

