首页 > 解决方案 > 将基矩阵的变化拟合到数据

问题描述

取简单的关系:

A*X + X0 = B,

其中 X、X0 和 B 是 2*1 向量,A 是 2*2 矩阵,我想在给定一组点 (X, B) 的情况下找到最好的 (A, X0)。

scipy.optimize我在图书馆里找不到任何直接适合这个问题的东西。

标签: pythonscipyscipy-optimize

解决方案


该方程可以使用线性最小二乘法求解:

方程

其中(Ax, Ay)是第一个基地(Bx, By)的点坐标, 是第二个基地的点坐标。[[a, b], [c, d]]是仿射变换矩阵(缩放和旋转)并且[tx, ty]是平移。

import numpy as np
A = np.array([[1, 3], [1, 2], [1, 1], [2, 1]])
B = np.array([[4, -2], [4, -4], [4, -6], [2, -6]])

R, residuals, rank, s = np.linalg.lstsq(np.hstack([A, np.ones((A.shape[0], 1))]), B, rcond=None)

R
#array([[-2.00000000e+00, -1.07062737e-15],
#       [ 4.44089210e-16,  2.00000000e+00],
#       [ 6.00000000e+00, -8.00000000e+00]])

推荐阅读