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

Matlab与Python绘图差异:如何编写等效Matlab的Python代码?

Matlab转Python绘图问题修正

任务一:FFT功率谱绘图错误

错误点:

  • 功率谱计算逻辑错误:Matlab中pyy = z.*conj(z) / 512是计算信号的功率谱(幅度平方除以FFT点数),但Python代码写成了pyy = np.conj(z) / 512,缺少与z的相乘操作,导致结果为复数且完全不符合功率谱定义。
  • 信号源不匹配:Python中的sin_func未按Matlab逻辑生成,需要和y = sin(a*t) + 2*sin(b*t) + 1.5*sin(c*t)保持一致。
  • FFT结果未做合理可视化处理:Matlab的FFT结果是对称的,通常只需展示前半部分正频率区间,且需确保结果为实数。

修正后的Python代码:

import numpy as np
import matplotlib.pyplot as plt

def print_two_graph():
    # 生成与Matlab一致的输入信号
    t = np.arange(-10, 10.1, 0.1)  # 对应Matlab的-10:0.1:10
    a, b, c = 1, 2, 3  # 可替换为自定义输入值
    sin_func = np.sin(a * t) + 2 * np.sin(b * t) + 1.5 * np.sin(c * t)
    
    z = np.fft.fft(sin_func, 512)
    # 正确计算功率谱,取real避免浮点误差导致的虚部
    pyy = (z * np.conj(z)).real / 512
    
    plt.subplot(2, 1, 1)
    plt.plot(sin_func, 'green')
    plt.title('原始信号')
    
    plt.subplot(2, 1, 2)
    # 只展示前半部分正频率区间,符合常规可视化习惯
    plt.plot(pyy[:256], 'red')
    plt.title('FFT功率谱')
    
    plt.tight_layout()
    plt.show()

任务二:指数函数双刻度绘图错误

错误点:

  • 横轴不匹配:Matlab中plot(y)以x为横轴,而Python代码里plt.plot(exp_func)默认用0起始的索引作为横轴,导致两条曲线的横轴范围不一致。
  • 图例缺失:Matlab代码添加了曲线标注,Python代码未对应添加,且未明确线性/对数刻度曲线的对应关系。
  • 绘图逻辑混淆:未确保两条曲线在同一坐标系下的展示逻辑与Matlab一致。

修正后的Python代码:

import numpy as np
import matplotlib.pyplot as plt

def print_exp_graph():
    x_range = np.arange(1.0, 10.0, 0.1)
    exp_func = np.exp(x_range)
    
    plt.subplot(1, 1, 1)
    # 统一用x_range作为横轴,和Matlab逻辑对齐
    plt.plot(x_range, exp_func, label='标准函数')
    plt.semilogy(x_range, exp_func, label='对数函数')
    plt.legend()
    plt.title('指数函数线性与对数刻度对比')
    
    plt.show()

内容的提问来源于stack exchange,提问作者Денис Попков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:16:29