MATLAB可以使用以下等式吗?
假设我们已经给出了长度为N的数据,并且我们想要考虑一些L个nubmers中的线性方程并找到系数a i 。这可能吗?因为如果是,那么系数可以通过
来解决a = pinv(D)*d
其中D是给定矩阵,d是左矢量。
上述等式来自以下线性模型
k = L, L+1, L+2, N-1
我已经用一些固定的f。
测试了这段代码unction [a] = find_coeficient(y,N,L)
Lp = L + 1;
Np = N + 1;
d = y(L:N-1);
D=[];
for ii=Lp:(Np-1)
% Index into the y vector for each row of D
D = vertcat(D, y(ii:-1:(ii-Lp+1))');
end
a = D\d;
end
这是对的吗?
答案 0 :(得分:1)
这绝对可以在MATLAB中使用。但是,本机不支持0索引。您需要通过让每个元素中的索引为index+1
来进行“变量更改”。这是一个例子:
% Generate some data
N = 40;
y = 10 * randn(N,1);
% Select an L value
L = N - 4 + 1;
d = y(L:N);
D = reshape(y,4,10);
% Solve the equation using the '\' rather than the pseudo inverse
b = D\d
有关除法运算符的详细信息,请参阅 Systems of Linear Equations 。
好的,我已经考虑过这个了。这里的一部分混淆是change of variable limits。替换适用于索引变量,不数据的大小,因此L
和N
不变,但调整索引以防止它从边缘掉落数组。所以在公式中,只需为每个元素索引添加1。
y[L] = [ y[L-1] y[L-2] ... y[0] ] * a1
.
.
y[N-1] = [ y[N-2] y[N-3] ... y[N-L-1] ] * aL
变为:
y[L+1] = [ y[L-1+1] y[L-2+1] ... y[0+1] ] * a1
.
.
y[N-1+1] = [ y[N-2+1] y[N-3+1] ... y[N-L-1+1] ] * aL
=
y[L+1] = [ y[L] y[L-1] ... y[1] ] * a1
.
.
y[N] = [ y[N-1] y[N-2] ... y[N-L] ] * aL
然后我们可以使用它来完成我们的脚本:
function a = find_coeficient(y,N,L)
d = y((L+1):N);
D=[];
for ii=L:(N-1)
% index into the y vector for each row of D
D = vertcat(D, y(ii:-1:(ii-L+1))');
end
a = D\d;
end