Matlab函数get_angle转Python代码的正确性验证问询
Matlab转Python的get_angle函数转换问题及修正
原Matlab函数代码
function[angle]= get_angle(N,fs,d_micro) if N~=0, j=0.1; x=-20:j:20; [y1]=hiper(N,x,-d_micro/2,fs); x1=round(length(x)/4);x2=round(length(x)/8); pendiente=(y1(x1)-y1(x2))/(j*(x1-x2)); if N>0 angulorad=atan(pendiente); angulo1=angulorad*180/pi; angle=-90-angulo1; else angulorad = atan(-pendiente); angulo1 = angulorad*180/pi; angle = 90 - angulo1; end else angle=0; end end
用户转换的Python代码
def get_angle(N,fs,d_micro): if N != 0: j = 0.1 x = np.arange(-20,20,j) y1 = hiper(N,x,-d_micro/2,fs) x1 = round(len(x)) x2 = round(len(x)/8) pendiente = (y1(x1)-y1(x2))/(j*(x1-x2)) if N>0: angulorad = np.arctan(pendiente) angulo1 = angulorad*180/np.pi angle = -90-angulo1 else: angulorad = np.arctan(-pendiente) angulo1 = angulorad*180/np.pi angle = 90-angulo1 else: angle = 0 return angle
转换代码中的错误及修正
你的转换代码存在3处关键错误:
- x1计算错误:原Matlab中
x1=round(length(x)/4),你误写成了round(len(x)),漏掉了除以4的操作,导致索引值完全错误 - 数组索引规则差异:Matlab采用1-based索引,而Python/NumPy是0-based索引,所以计算出的x1、x2需要减1才能匹配原逻辑的位置,否则会触发索引越界错误
- NumPy数组取值语法错误:NumPy数组的元素访问应该用方括号
[],而非圆括号(),你写的y1(x1)会被解析为函数调用,引发错误
修正后的Python代码
import numpy as np def get_angle(N, fs, d_micro): if N != 0: j = 0.1 x = np.arange(-20, 20, j) y1 = hiper(N, x, -d_micro/2, fs) # 修正x1的计算,同时转换为0-based索引 x1 = round(len(x)/4) - 1 x2 = round(len(x)/8) - 1 # 修正数组取值语法 pendiente = (y1[x1] - y1[x2]) / (j * (x1 - x2)) if N > 0: angulorad = np.arctan(pendiente) angulo1 = angulorad * 180 / np.pi angle = -90 - angulo1 else: angulorad = np.arctan(-pendiente) angulo1 = angulorad * 180 / np.pi angle = 90 - angulo1 else: angle = 0 return angle
内容的提问来源于stack exchange,提问作者A.wilson
相关产品推荐
相关产品推荐

