2016-04-17 18 views
-1
BE2A = 2*0.3048; 
BE2B = 2*0.3048; 
BETA = 0; 

for i = 1:50 

     for j = 1:i 

      for k = 1:(i+1-j) 

       % 1st quadrant 
       BEXC(i,j,k,1) = i*0+j*0+(0.5+(k-1))*BE2A*cos(BETA/180*pi); 
       BEYC(i,j,k,1) = i*0+j*0+(0.5+(k-1))*BE2A*sin(BETA/180*pi); 
       BEZC(i,j,k,1) = i*0+(0.5+(j-1))*BE2B+k*0; 
       BE2A(i,j,k,1) = BE2A+i*0+j*0+k*0; 
       BE2B(i,j,k,1) = BE2B+i*0+j*0+k*0; 
       ANGLE(i,j,k,1) = BETA+i*0+j*0+k*0; 

       % 2nd quadrant 
       BEXC(i,j,k,2) = i*0+j*0-(0.5+(k-1))*BE2A*cos(BETA/180*pi); 
       BEYC(i,j,k,2) = i*0+j*0-(0.5+(k-1))*BE2A*sin(BETA/180*pi); 
       BEZC(i,j,k,2) = i*0+(0.5+(j-1))*BE2B+k*0;   
       BE2A(i,j,k,2) = BE2A+i*0+j*0+k*0; 
       BE2B(i,j,k,2) = BE2B+i*0+j*0+k*0; 
       ANGLE(i,j,k,2) = BETA+i*0+j*0+k*0; 

      end 

     end 

    end 

が、それは表示されます非シングルトン添字エラーよりも非シングルトンRHSの寸法を持っている:「代入は非シングルトンの添字よりも非シングルトンRHSの寸法を持っています」。エラーがライン割り当ては、私はこのコードを実行すると

  • から始める "BEXC(i,j,k,1) = i*0+j*0+(0.5+(k-1))*BE2A*cos(BETA/180*pi)"
+4

エラーメッセージは、わかりやすいものです。 BE2A * cos(BETA/180 * pi) 'は2つ以上を返します。BEXC(i、j、k、1)は1つのインデックスで、' i * 0 + j * 0 +(0.5+(k-1)数。 – excaza

答えて

1
BE2A0 = 2*0.3048; 
BE2B0 = 2*0.3048; 
BETA0 = 0; 

for i = 1:50 

     for j = 1:i 

      for k = 1:(i+1-j) 

       % 1st quadrant 
       BEXC(i,j,k,1) = i*0+j*0+(0.5+(k-1))*BE2A0*cos(BETA0/180*pi); 
       BEYC(i,j,k,1) = i*0+j*0+(0.5+(k-1))*BE2A0*sin(BETA0/180*pi); 
       BEZC(i,j,k,1) = i*0+(0.5+(j-1))*BE2B0+k*0; 
       BE2A(i,j,k,1) = BE2A0+i*0+j*0+k*0; 
       BE2B(i,j,k,1) = BE2B0+i*0+j*0+k*0; 
       ANGLE(i,j,k,1) = BETA0+i*0+j*0+k*0; 

       % 2nd quadrant 
       BEXC(i,j,k,2) = i*0+j*0-(0.5+(k-1))*BE2A0*cos(BETA0/180*pi); 
       BEYC(i,j,k,2) = i*0+j*0-(0.5+(k-1))*BE2A0*sin(BETA0/180*pi); 
       BEZC(i,j,k,2) = i*0+(0.5+(j-1))*BE2B0+k*0;   
       BE2A(i,j,k,2) = BE2A0+i*0+j*0+k*0; 
       BE2B(i,j,k,2) = BE2B0+i*0+j*0+k*0; 
       ANGLE(i,j,k,2) = BETA0+i*0+j*0+k*0; 

      end 

     end 

end 

全部をベクトル化することができます。 BE2BとしてBE2B; BETA0としてBETA。

1

はのは、この見ていきましょう:

  1. 私はBETA変更を想定していますが、わかりやすくするためにそれを残しています。そうでない場合、BETAは常に0であるため、cos(BETA/180*pi)sin(BETA/180*pi)をそれぞれ10に置き換えることができます。

    a。チェックアウトcosd()sind()

  2. 多くの用語に0を掛けます。明確にするためにそれらをスキップしてください。

問題が発生しました。次の2行では、値BE2ABE2A(i,j,k,1)BE2A(i,j,k,2)の両方に割り当てています。これにより、サイズ[i, j, k, 2]2に注意してください)の行列BE2Aを作成しています。次の反復で

BE2A(i,j,k,1) = BE2A+i*0+j*0+k*0; 
BE2A(i,j,k,2) = BE2A+i*0+j*0+k*0; 

k = 2は、あなたが持っている: [1, 1, 1, 2]

BEXC(i,j,k,1) = i*0+j*0+(0.5+(k-1))*BE2A*cos(BETA/180*pi); 

は今、BE2Aはサイズの行列です。この項にはスカラーの束が掛けられているので、行列は1つの数ではなくなります。インデックスBEXC(i,j,k,1)は明らかに単一の数字ですが、これには不一致があります。

私はこのループでさらに多くのことが起こっていると仮定しています。

  • Don't use i and j as variable names
  • Don't have growing loops
    • は全くのループを使用しないでください。これはすべてそこにあるされている場合は、それを改善する方法がたくさんあります。おそらくBE2A0としてBE2Aを変更してください
    +0

    ありがとうございました。 –

    関連する問題