已知线性组合结果、系数及偏移,求解子向量A与B
求解步骤
1. 明确变量与对应关系
设偏移量为k(比如示例中B比A晚4个元素,k=4),A的长度为n(示例中n=50),则:
- A的元素:$A[i] = S[i]$,其中 $i=1,2,...,n$
- B的元素:$B[i] = S[i+k]$,其中 $i=1,2,...,n$
- R的每个元素满足:$R[i] = aA[i] + bB[i] = aS[i] + bS[i+k]$,$i=1,2,...,n$
2. 分区域推导求解
把S分为三个关联区域,通过R的元素方程建立线性关系:
- A独有区域:$S[1] \sim S[k]$(仅属于A,不在B中)
- 重叠区域:$S[k+1] \sim S[n]$(同时属于A和B)
- B独有区域:$S[n+1] \sim S[n+k]$(仅属于B,不在A中)
(1)关联方程拆解
从R的前$n-k$个元素可得:
$R[1] = aS[1] + bS[k+1]$
$R[2] = aS[2] + bS[k+2]$
...
$R[n-k] = aS[n-k] + bS[n]$
从R的后k个元素可得:
$R[n-k+1] = aS[n-k+1] + bS[n+1]$
$R[n-k+2] = aS[n-k+2] + bS[n+2]$
...
$R[n] = aS[n] + bS[n+k]$
(2)处理解的唯一性问题
这里方程数(n个)少于未知数($n+k$个),无额外约束时解不唯一,需要结合实际场景补充约束:
- 若序列是因果信号,可假设A的前k个元素为0;
- 若序列是周期信号,可利用周期性(如$S[n+1]=S[1]$)消去自由变量;
- 若有先验知识,可直接给定A独有区域的元素值。
(3)逐步推导示例(以k=4、n=50为例)
假设A的前4个元素为$x_1,x_2,x_3,x_4$:
- 计算重叠区域:$S[5]=(R[1]-ax_1)/b$,$S[6]=(R[2]-ax_2)/b$,...,$S[50]=(R[46]-a*x_46)/b$
- 计算B独有区域:$S[51]=(R[47]-aS[47])/b$,...,$S[54]=(R[50]-aS[50])/b$
- 提取A($S[1] \sim S[50]$)和B($S[5] \sim S[54]$)
3. 伪代码实现
import numpy as np # 已知参数 k = 4 n = 50 a = 2 # 示例系数 b = 3 # 示例系数 R = np.random.randn(n, 1) # 示例结果向量 # 假设A的前k个元素为0(可根据实际调整) S = np.zeros((n + k, 1)) # 计算重叠区域(Python索引从0开始,对应S[k+1:n+1]) for i in range(n - k): S[i + k] = (R[i] - a * S[i]) / b # 计算B独有区域(对应S[n+1:n+k+1]) for i in range(n - k, n): S[i + k] = (R[i] - a * S[i]) / b # 提取A和B A = S[:n] B = S[k:n + k]
关键结论
核心是通过R的线性组合方程,建立A、B元素的关联关系;由于未知数数量多于方程数,必须补充场景约束才能得到唯一解,常见约束包括边界元素赋值、序列周期性等。
内容的提问来源于stack exchange,提问作者Dr.Anime
相关产品推荐
相关产品推荐

