一、Koopman 算子核心概念
Koopman 算子是处理非线性动力系统的强大数学工具,其核心思想是 "绕开状态的非线性演化,转而研究状态观测函数的线性演化",从而将非线性问题转化为线性问题求解。
1. 非线性动力系统的基本形式
假设离散时间的非线性动力系统为:xt+1=F(xt)其中 xt∈Rn 是 t 时刻的系统状态,F 是非线性映射。直接分析这类系统的演化(如预测、长期行为)通常很困难。
2. Koopman 算子的定义
定义 Koopman 算子 K,它作用于观测函数 ϕ:Rn→Rm(m 可远大于 n),满足:Kϕ(xt)=ϕ(F(xt))=ϕ(xt+1)这意味着:尽管状态 xt 的演化是非线性的,但观测函数 ϕ(xt) 的演化在 Koopman 算子作用下是线性的 ------ 这是 Koopman 算子的核心价值。
3. 核心优势
- 将非线性系统分析转化为线性代数问题(如求解特征值、特征函数);
- 可用于非线性系统的预测、控制、模态分解等任务。
二、PyKoopman 库介绍与安装
PyKoopman 是 Python 中专门用于 Koopman 算子学习的开源库,封装了 DMD/EDMD/KDMD 等学习方法,以及多项式、傅里叶、神经网络等常用观测函数。
pykoopman · PyPI
https://pypi.org/project/pykoopman/
pykoopman.Koopman:核心模型类,用于构建和训练 Koopman 算子;pykoopman.observables:观测函数模块(映射原始状态到高维空间);pykoopman.regression:回归模块(拟合 Koopman 算子的线性映射)。
PyKoopman 中仅通过输入(t 时刻状态 X)和输出(t+1 时刻状态 Y)获取 Koopman 算子核心系数(如 Koopman 矩阵)的纯流程化实现步骤。
PyKoopman 从输入输出提取系数的核心步骤
整个过程围绕 "将非线性状态映射到线性观测空间→拟合线性 Koopman 矩阵→(可选)映射回原始状态空间" 展开,具体步骤如下:
步骤 1:输入输出数据的基础校验与预处理
- 确认输入 X(t 时刻状态)和输出 Y(t+1 时刻状态)的格式:均为二维数组(样本数量 × 原始状态维度),且两者的样本数完全一致(比如 X 是 N×n,Y 也必须是 N×n,n 为原始状态维度,N 为样本数)。
- 预处理:剔除缺失值、异常值,必要时对 X/Y 做归一化(如标准化到 0 均值 1 方差),避免数值尺度差异导致拟合系数失真。
步骤 2:观测函数的升维映射(核心前置步骤)
- 选择并初始化观测函数(如多项式、傅里叶基等),将原始状态空间的 X、Y 分别映射到高维观测空间 ,得到 Φ(X) 和 Φ(Y):
- Φ(X):形状为 N×m(m 为观测空间维度,m 远大于原始状态维度 n),是原始状态 X 的高维非线性组合;
- Φ(Y):同理,是 t+1 时刻状态 Y 对应的高维观测空间表示。
- 这一步的核心目的是将原始非线性的状态演化,转化为观测空间中可线性表示的演化关系。
步骤 3:Koopman 矩阵(核心系数)的线性拟合
- 构建核心优化目标:找到 Koopman 矩阵 K(形状为 m×m),使得 Φ(Y) ≈ K・Φ(X)(矩阵乘法),即使得观测空间的演化满足线性关系。
- 求解线性方程组:PyKoopman 默认采用最小二乘法(也可指定岭回归、稀疏回归等),最小化损失函数∣∣Φ(Y)−KΦ(X)∣∣22,求解出最优的 Koopman 矩阵 K------ 这就是观测空间下的核心系数。
步骤 4:(可选)原始状态空间的系数映射
- 若需要得到原始状态空间的预测系数(而非观测空间的 Koopman 矩阵 K),PyKoopman 会额外拟合 "解码器" 矩阵 C:
- 解码器 C 的作用是将观测空间的结果映射回原始状态空间,形状为 n×m;
- 拟合目标:原始状态 X ≈ C・Φ(X),同样通过最小二乘法求解 C。
- 最终原始状态的预测系数可表示为:Y ≈ C・K・Φ(X),其中 C 和 K 共同构成原始状态空间的有效预测系数。
步骤 5:系数验证与提取
- 验证系数有效性:通过拟合误差(如 R² 得分、均方误差 MSE)判断 Koopman 矩阵 K 的拟合质量,确保系数能准确反映 X 到 Y 的演化关系。
- 提取核心系数:输出 Koopman 矩阵 K(观测空间核心系数)、解码器矩阵 C(观测→原始空间系数),也可对 K 做特征分解,提取特征值 / 特征向量(反映系统动力学特性的关键系数)。
总结
- 核心前提是将原始非线性状态 X/Y 通过观测函数映射到高维线性观测空间,得到 Φ(X)/Φ(Y);
- Koopman 矩阵 K 是通过最小二乘拟合 Φ(Y) ≈ K・Φ(X) 得到的核心系数,也是观测空间的线性演化矩阵;
- 若需原始状态空间的系数,需额外拟合解码器矩阵 C,将观测空间的系数映射回原始维度。