2017-09-10 8 views
-1

私はMatlabを使用する必要があるデジタル信号処理コースを取っています。私はまだ非常に初心者なので、これは非常に基本的なものであれば申し訳ありませんが、私はこのためにGoogleにする方法を知らない。Matlabのベクトルで前の要素を使うには?

私は直線性をチェックするはずです。私はrandn(1,100)で作られたベクトルのカップルを持っていると私は

F{a·x1 [n]+b·x2 [n]} = a·F{x1 [n]}+b·F{x2 [n]} 

がするとベクトルに追加する例F{x[n]} = x[n] + 2やすいかどうかをチェックするためにそれらを使用するようになっています。

問題の1つはF{x[n]} = ¼ (x[n]+2·x[n-1]+x[n-2])で、ベクトルの前の2つの要素にアクセスする必要があります。これどうやってするの? 1つはF{x[n]} = n·x[n]です。ここでも要素の特定のインデックスが必要です。

編集:お返事ありがとうございます。私は実際にこれにアプローチする方法を知らなかったので、試してみるためにサンプルコードを考えることができませんでした。私は、n-1とn-2の値に対してシフトされたベクトルを作成し、n * x [n]のものに対して別のインデックスベクトルを使用する必要があることを考え出しました。だから私は間違った角度からこの問題全体に近づいていた。これはおそらく最も洗練されたソリューションではありませんが、機能します。誰の時間を無駄にして申し訳ありません。

+0

[*ドキュメント*](https://www.mathworks.com/help/matlab/math/matrix-indexing.html) –

+1

を読む私はあなたがしていることを実現初心者ですが、MATLAB構文ではないコード書式を使用することで、この質問を少しはっきりさせることができました。最も基本的なレベルでは、角括弧ではなく括弧を使用して配列要素にアクセスし、中括弧は関数を呼び出さないセル配列にアクセスする場合にのみ使用します。私はあなたが紙*でこれをどうやって行うのかを定義することから始め、数学的に何をしようとしているのか、何を試みたのかを明確に示します。 – Wolfie

答えて

1

これは簡単です。

>> x=[1,2,3,4] 
>> x(2-1) 
ans = 
    1 

制限を超えないようにしてください(x(0)は、インデックスが1から始まる必要があるためエラーになります)。 MATLABで

0
x = randn(1,1000); 
res = f(x,5); 

function res = f(x,n) 
    if ((n < 3) || (n > numel(x)) 
     error('Be careful with index overflows!'); 
    end 

    res = 0.25 * (x(n) + (2 * x(n - 1)) + x(n - 2)); 
end 

、数値配列は1lengthの間の値でインデックスを作成することができます(後者のためにあなたはまた、endを使用することができますので、あなたはだ、それを取得するために、配列の長さを知っている必要はありません最後の値)。例:

>> x = [1 4 7 3 2 9] 

x = 

    1  4  7  3  2  9 

>> x(1) 

ans = 

    1 

>> x(2) 

ans = 

    4 

>> x(5-2) % the index is 3 here 

ans = 

    7 

>> x(6) 

ans = 

    9 

>> x(end) 

ans = 

    9 

Matrix Indexing In Matlab