You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Numpy绘制复方程曲线结果异常问题排查

解决Python绘制对数轴曲线与预期不符的问题

我看了你这段用于图形分析的曲线绘制代码,确实问题出在未处理复数运算上——你提到的分母存在虚部是对的,这类频率响应类的方程本质是复域传递函数,忽略虚部直接做实数计算,自然会和参考图的橙色曲线对不上。

问题核心分析

你当前的代码里,Mg_Dem的计算是纯实数运算,但原方程的分母应该包含虚数单位(Python中用1j表示)。你需要在复平面内计算传递函数,再取它的幅值(模长),而不是简单做实数除法后取绝对值。

修改后的完整代码

import numpy as np
import matplotlib.pyplot as plt

# 设定测试参数
Ln = 5
Qe = 0.5
# 生成x轴数据:对数刻度范围0.1到10(对数轴无法取0,所以从0.1开始)
fn = np.linspace(0.1, 10, 1000)

# 修正复域下的分子分母计算
Mg_Num = Ln * fn**2
# 分母加入虚部,还原原方程的复域形式
Mg_Dem = (Ln + 1) * (fn**2 - 1) + 1j * (fn**2 - 1) * fn * Qe * Ln
# 计算复数的模长(即幅值),这才是正确的Mg值
Mg = np.abs(Mg_Num / Mg_Dem)

# 绘图优化,更贴合参考图风格
plt.plot(fn, Mg)
plt.xscale('log')
plt.xlabel('fn (log scale)')
plt.ylabel('Mg')
plt.title(f'Frequency Response Curve (Ln={Ln}, Qe={Qe})')
plt.grid(True, which="both", ls="-")  # 添加网格,方便对比参考图
plt.show()

关键修改说明

  • 复域运算修正:在Mg_Dem中加入1j,还原了原方程的复域传递函数形式,这是曲线匹配参考图的核心。
  • 幅值计算:用np.abs()计算复数数组的模长,比原生abs()更适合批量处理numpy数组,结果也更准确。
  • 绘图优化:添加了坐标轴标签、标题和网格,让你更容易和参考图进行对比验证。

运行这段代码后,生成的曲线应该就和参考图中Ln=5、Qe=0.5对应的橙色曲线完全一致了。

内容的提问来源于stack exchange,提问作者RGB Engineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 18:47:47