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

量子叠加态代码实参运行正常,复参出现异常问题求助

问题分析与修复方案

问题根源

你的代码在复数参数下异常的核心原因有两个:

  1. 参数逻辑不匹配
    函数参数percentage被定义为float,但你传入了复数50j,类型冲突的同时,“百分比”这个概念本身不适用于复数——量子叠加态中是振幅的模平方对应概率,而非直接用复数表示百分比。

  2. 归一化逻辑错误
    量子态要求系数的模平方和为1,但你当前用q = sqrt(1 - p*p)计算第二个系数:

    • 当p是复数时,p*p是复数的平方(而非模的平方),导致1 - p*p可能是负数或非实数,开根号后得到的q无法满足归一化条件,最终输出异常值。

修正后的代码

import numpy as np
from cmath import sqrt
from typing import Tuple, Union

# 标准基 |0>, |1>(Z轴)
zero_qubit = np.matrix([[1.+0.j], [0.+0.j]])
one_qubit = np.matrix([[0.+0.j], [1.+0.j]])
standard_basis: Tuple[np.matrix] = (zero_qubit, one_qubit)


def superposition(
        amplitude: Union[float, complex] = 1.0,
        basis: Tuple[np.matrix] = (zero_qubit, one_qubit)):
    # 计算振幅的模平方,确保满足归一化前提
    p_mod_sq = amplitude.conjugate() * amplitude
    if p_mod_sq > 1.0:
        raise ValueError("振幅的模平方不能大于1,否则无法构建合法量子态")
    
    # 计算第二个系数的模,相位默认取0(可按需添加相位,比如 q = q_mod * np.exp(1j * theta))
    q_mod = sqrt(1 - p_mod_sq)
    q = q_mod
    
    q1 = amplitude * basis[0] + q * basis[1]
    q2 = amplitude * basis[0] - q * basis[1]
    q3 = -amplitude * basis[0] + q * basis[1]
    q4 = -amplitude * basis[0] - q * basis[1]
    return q1, q2, q3, q4

# 实数振幅测试(对应原50%概率,振幅为sqrt(0.5))
print("实数振幅输出:")
q1,q2,q3,q4 = superposition(sqrt(0.5), standard_basis)
print(q1)
print(q2)
print(q3)
print(q4)

# 复数振幅测试(示例振幅:0.5+0.5j,模平方为0.5,对应50%概率)
print("\n复数振幅输出:")
q1,q2,q3,q4 = superposition(0.5 + 0.5j, standard_basis)
print(q1)
print(q2)
print(q3)
print(q4)

关键调整说明

  • 将参数从percentage改为amplitude,直接接收复数振幅,符合量子力学中叠加态的定义逻辑。
  • 用amplitude.conjugate() * amplitude计算模平方,确保归一化条件|p|² + |q|² = 1成立。
  • 支持实数和复数输入,添加了参数合法性检查,避免非法输入导致错误。
  • 保留了你原有的四种符号组合的叠加态计算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:33:16