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

Python curve_fit拟合实测数据报错:TypeError(按位异或不支持)

解决TypeError: ufunc 'bitwise_xor' 错误的方案

嘿,这个错误我太熟了!问题出在你定义的拟合函数里的运算符用错了——Python里的^是按位异或运算符,不是你想要的幂运算(平方),这就导致numpy没法对浮点数数组执行这个操作,直接抛出了类型错误。

修正步骤:

  • 替换错误运算符:把函数里的(T/Tc)^2改成(T/Tc)**2,**才是Python里的幂运算符号。
  • 可选:添加边界检查:因为cos函数里的参数如果超出范围,会让余弦值为负(开根号会产生复数),可以加个小判断避免拟合时出现无效值。

修正后的完整代码示例:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def func(T, fun, Tc):
    # 先计算归一化温度的平方
    normalized_T_sq = (T / Tc) ** 2
    # 限制余弦参数范围,避免负数开根号
    cos_arg = np.clip(np.pi/2 * normalized_T_sq, -np.pi/2, np.pi/2)
    return fun * np.sqrt(np.cos(cos_arg))

# 假设你有实测数据xda(温度数组)和yda(对应测量值)
# 这里模拟一组示例数据方便测试
xda = np.linspace(0, 10, 50)
yda = func(xda, 5, 12) + np.random.normal(0, 0.2, 50)

# 执行拟合,p0是参数初始猜测值,建议根据你的数据合理设置
popt, pcov = curve_fit(func, xda, yda, p0=[4, 10])

# 输出拟合得到的参数
print(f"拟合得到的fun参数:{popt[0]:.4f}")
print(f"拟合得到的Tc参数:{popt[1]:.4f}")

# 绘制拟合结果
plt.scatter(xda, yda, label='实测数据')
plt.plot(xda, func(xda, *popt), 'r-', label='拟合曲线')
plt.xlabel('温度 T')
plt.ylabel('测量值')
plt.legend()
plt.show()

额外提示:

  • 拟合时记得给curve_fit传入合理的初始参数猜测值p0,这能大幅提升拟合的成功率和准确性。
  • 如果你的实测数据里有超出Tc的温度值,cos(np.pi/2*(T/Tc)**2)会变成负数,开根号会得到复数,所以用np.clip把参数限制在[-π/2, π/2]范围内是很有必要的,避免程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:23:43