0

次の方程式はMATLABで可能でしょうか?

ここに画像の説明を入力してください

長さ N のデータが与えられ、いくつかの L 個の数値の間で線形方程式を考え、係数 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

それが正しいか?

4

1 に答える 1

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を参照してください。

わかりました、私はこれをもう少し考えました。ここでの混乱の一部は、変数制限の変更です。置換は、データのサイズではなく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
于 2013-06-21T16:50:42.133 に答える