高效执行矩阵运算:求解C=(A^T A)^(-1)A^T B的方法
计算最小二乘闭式解的高效方法
你要计算的公式 ( C=(A^T A){-1}AT B ) 是线性最小二乘问题的闭式解,完全不需要手动计算,用Excel或Python都能快速搞定,具体步骤如下:
方法一:使用Excel
Excel通过矩阵运算函数组合就能实现,注意旧版Excel需要用数组公式(按Ctrl+Shift+Enter确认),新版Excel 365支持动态数组,直接回车即可:
- 假设矩阵A存放在
A1:I18(18行9列),矩阵B存放在J1:J18(18行1列) - 计算 ( A^T A ):选中9×9的空白区域(比如
K1:S9),输入公式=MMULT(TRANSPOSE(A1:I18), A1:I18),按数组确认键完成 - 求逆矩阵 ( (A^T A)^{-1} ):选中另一块9×9区域(比如
K11:S19),输入=MINVERSE(K1:S9),按数组确认键完成 - 计算 ( A^T B ):选中9×1区域(比如
T1:T9),输入=MMULT(TRANSPOSE(A1:I18), J1:J18),按数组确认键完成 - 最终计算C:选中9×1区域(比如
U1:U9),输入=MMULT(K11:S19, T1:T9),按数组确认键得到结果
方法二:使用Python(推荐,更高效稳定)
用numpy库处理矩阵运算最便捷,尤其是处理大规模矩阵时优势明显:
- 先安装并导入numpy:
import numpy as np - 加载矩阵A和B(可以直接定义或从文件读取):
# 示例:直接定义矩阵(实际使用可替换为从csv/txt读取,比如np.loadtxt("A.csv")) A = np.array([[1,2,...], [3,4,...], ...]) # 18行9列 B = np.array([[1], [2], ...]) # 18行1列,确保是列向量 - 两种计算方式:
- 严格按照公式计算:
A_T = A.T A_T_A = A_T @ A inv_A_T_A = np.linalg.inv(A_T_A) A_T_B = A_T @ B C = inv_A_T_A @ A_T_B - 更稳定的最小二乘函数(推荐,自动处理矩阵奇异情况):
C = np.linalg.lstsq(A, B, rcond=None)[0]
- 严格按照公式计算:
- 输出结果:
print(C)就能得到9×1的矩阵C
内容的提问来源于stack exchange,提问作者callum
相关产品推荐
相关产品推荐

