2016-09-23 8 views
1

これをここに載せておくべきかMaths stackexchangeに載せるべきか分からないので、間違っているとごめんなさい。私はMATLABとプログラミング一般には非常に新しく、代入の有限差分法を使ってODE問題を解決しようとするいくつかの問題を抱えています。MATLAB - 有限差分[添え字インデックスは正の整数または論理でなければなりません]

マイ有限差分方程式は次のとおりです。tは時間増分のための51x1配列です

z(t+dt) = (dt^2*(γ^2*h*sin(γ*t)-β*z(t)) - z(t-dt)*(1-dt*α)+2*z(t))/(1 + dt*α) 

。基本的には、0から1までのt値のz(t)を0.02単位で計算したいと思います。

dt = 0.02 

    t = [0:dt:T]'; 

    z(0) = 0 
    z(dt)= 0 

    for i = t 

     z(i+dt) = (dt^2*(gamma^2.*h.*sin(gamma*t)-beta*z(i)) - z(i-dt)*(1-dt*alpha)+2*z(i))/(1 + dt*alpha) 

    end 

アルファ、ベータおよびガンマ:私は、初期条件のZ(0)= 0とZ(ΔT)= 0

私の現在のコード(ではないすべてのものが、私に迷惑を与えているビットを持っています

「添え字インデックスは、正の整数または論理でなければなりません」というエラーが発生し続けます。MATLAB配列は要素1で始まり0ではないことを理解しています。 、要素0にアクセスしようとするとエラーが発生します。

私は自分の有限差分関数や初期条件の入力方法に誤りがあるかどうかはわかりません。 i = tを設定することで、tの値、または行列の要素のforループを実行していますか?例えば。 i = 0のときは、行列の0要素にアクセスしようとしていますか、それとも、式のi変数を0に設定していますか?

ご協力いただければ幸いです。

ありがとうございました!

+0

インデックスは正の整数**整数**または論理でなければなりません。 '0.02'は整数ではありません。 – excaza

答えて

1

問題はdtであり、dtは整数値ではないと考えて、配列のインデックス付けには使用できません。配列のインデックスは常にMatlabの整数値です。以下のコードを試して問題が解決するかどうかチェックしてください

t = [0:dt:T]'; 

z(1) = 0 
z(2)= 0 

for i = 2 : length(t) 

    z(i) = (dt^2*(gamma^2.*h.*sin(gamma*t(i))-beta*z(i)) - z(i-1)*(1-dt*alpha)+2*z(i))/(1 + dt*alpha) 

end 
+0

返信ありがとうございます@ User1551892。あなたのコードを試したところ、別の行列エラーがありました。「インデックスは行列の次元を超えています。 – Liam

+0

ここでは、i = 2の場合:length(t)これはforループをz(Δt)からz(1)まで実行しているところですか? – Liam

+0

コードを実行する前に 'z'が最初に割り当てられていることを確認してください。' t'の宣言の後に 'z = 0(1、numel(t)); – rayryeng

関連する問題