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

复数矩阵下numpy.linalg.lstsq求解y=a*x与直接除法结果不符问题排查

复系数线性方程求解异常排查

我正在求解复系数线性方程y = a*x,现有三组复数测量值(x1,x2,x3)和(y1,y2,y3),目标是求解斜率a。已知正确答案,但发现直接计算yi/xi得到的coeff_1与coeff_2结果不一致(此为异常情况),且使用np.linalg.lstsq()求解得到的结果与直接除法结果也不相同。

给出的代码如下:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import math
y1= -19.64927911-6.1398258j
x1=-1.1754612296645994+1.246124677990216*1j
y2=-(20.362010267083804+5.457126922032681*1j)
x2=-1.1754612296645994+1.246124677990216*1j
y3=-(-21.582640711300716-4.866985215398231*1j)
x3=1.0043723963072644-0.6003393298974578*1j
coeff_1=y1/x1
coeff_2=y2/x2
coeff_3=y3/x3

########linear least square method
X=np.vstack((x1,x2,x3))
Y=np.vstack((y1,y2,y3))

[coeff, resid, _, singular_values] = np.linalg.lstsq(X, Y, rcond=None)
print(coeff_1)
print(coeff_2)
print(coeff_3)
print(coeff)
print(np.abs(coeff_1))
print(np.abs(coeff_2))
print(np.abs(coeff_3))
print(np.abs(coeff))

运行后coeff_1与coeff_2结果不一致,以下是原因排查:


问题原因分析

1. 输入数据本身的不一致性

首先拆解y1和y2的实际值:

  • y1 = -19.64927911 - 6.1398258j
  • y2 = -(20.362010267083804 + 5.457126922032681j) = -20.362010267083804 - 5.457126922032681j

而x1与x2完全相同:x1 = x2 = -1.1754612296645994 + 1.246124677990216j

由于y1和y2是两组不同的测量数据,本身数值存在差异(模值分别约为20.57和21.09),因此除以同一个x得到的coeff_1和coeff_2必然不同。这是测量数据本身的误差或不一致性导致的,并非代码逻辑问题。

2. 最小二乘与直接除法的结果差异原因

np.linalg.lstsq()处理复系数回归时,是通过最小化所有数据点残差的模平方和求解最优a,核心公式为:
a = (X^H Y) / (X^H X)
其中X^H代表X的共轭转置。

而直接除法yi/xi仅基于单组数据计算比值,当多组数据存在矛盾时,最小二乘会给出全局最优的拟合值,自然和单组数据的局部比值不同。


解决建议

  • 若预期coeff_1与coeff_2一致,需检查测量数据的准确性,确认y1和y2是否对应同一真实值,排查是否存在测量误差或记录错误。
  • 当多组数据存在不一致时,最小二乘结果是更可靠的全局拟合值,适合用来估计真实的a。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:23:27