2016-04-03 8 views
-1

コンテキスト:性能解析の一環としてクォーターマイルの時間にテストされる自動車のモーションを記述するプログラムを作成する必要があります。これには、時間、距離、速度、加速度、力、トルク、および回転速度が含まれます。MATLABループインデックスの問題

Iは、(この例では、エンジントルク)コードのどの行と次のエラーが上部にある取得ループの最後で

「(2)RPMにアクセスしようと;のうちインデックスnumel(RPM)= 1であるため境界があります。

clear all 
close all 
clc 

time(1) = 0; %[seconds] 
dist(1) = 0; 
vel(1) = 0; 
accel(1) = 0; 

RPMmin = 1200; 
RPM(1) = RPMmin; 
r = 19; %[inches] 
wt = 3760; %[pounds] 

Ng = [3.253, 2.233, 1.611, 1.243, 1, 0.629]; %{Gear Ratio} 
Nd = [3.73]; %differential ratio 
dt = 0.1; %time increment 

for k = 1:1:6 

    xntt(k) = Ng(k) * Nd; 
    xmf(k) = 1 + (0.04 * xntt(k)) + (0.0025 * xntt(k)^2); 
    gst = 0.25; %gear shift time 

end 

for i = 1:1:1000 

    Te(i) = 18.154 + (.1571 * RPM(i)) - (0.0000147 * (RPM(i))^2); 
    fx(i) = Te(i) * xntt(k)/(r/12); 
    dV(i + 1) = (32.2/(wt * xmf(k)))*fx(i); 
    accel(i + 1) = dV(i)/dt; 
    vel(i + 1) = vel(i) + (dV(i) * dt); 
    dist(i + 1) = dist(i) + vel(i + 1)*dt; 
    time(i + 1) = time(i) + dt; 
    RPM(i) = (vel(i + 1)*60*xntt(k))/((2*pi*r)/12); 

end 
+3

エラーメッセージはかなり自明です...定義される前に 'RPM(i)'にアクセスしようとしています。あなたのコードを見ると、 'i + 1'ではなく、ループ反復' i'に対して 'RPM'を定義していることがわかります。 – excaza

+0

いつものように@excaza、エラーメッセージは自明です:) – dnit13

+0

@ dnit13は必ずしもそうではありません – excaza

答えて

0

は、これが発生した場合のループ(第2の反復)内部i=2RPMによって異なりますが、基本的に2つの選択肢があります。

  • はそうTe(2)がそうでRPM(1)とに依存し、Te(i)RPM(i-1)に依存しましょう。ただし、i=1の場合は、i=1の場合はi-1=0、Matlabの場合は正のインデックスしか許されないため、ifのチェックをループ内に配置する必要があるため、エラーが発生します。
  • RPMTeと同じように成長します。したがって、にはTe(i+1)と書いてありますので、RPM(i+1)と書いてください。

これらのアプローチの両方がエラーなしでコードにつながる(すなわち文法的に正しい)が、その後、あなたの問題であり、どのようなベクターは、ソートの一緒に「リンク」しているかに応じて、正しいアプローチを選択する必要があります(つまり、あなたをコードも意味的に正しいものでなければなりません)。