0

こんにちは私は2つのベクトルを同じサイズにするのに問題があります。基本的に、多数の要素を含む1つのベクトルと、より大きなベクトルの要素に対応するより少ない要素を含む別のベクトルがあります。たとえば、短いベクトルに2つの要素がある場合、これらは大きいベクトルの最初と最後の要素に対応し、3つが小さい場合、これらは大きいベクトルの最初の中間要素と最後の要素に対応します。小さい方のベクトルと大きい方のベクトルが同じサイズになるように、小さい方のベクトルの補間値を生成する必要があります。interp1関数を使用しようとしていますが、機能させる方法がわかりません。ありがとう

簡単な例ですが、これで明確になるといいのですが、新しいC_Lは0.0で終わり、1.4で始まる必要があります。次に、新しい数値の最初のロットを補間して、1.4から1.6の間、次のセットを1.6から1.7にする必要があります。 、 等々。

% For finding the lift curve slope across a wing
semispan = 8; % User inputs
C_L = [1.4,1.6,1.7,1.4,1.1,0.0]; % from a user input at stations which equally subdivide the wing.
x = 0:0.2:semispan

% C_L needs to be the same length as x
c_L = interp1(C_L,x,'linear','extrap') % Don't know how to do this part correctly.

plot(x,C_L)
4

1 に答える 1

4

解決策は、ユーザーが指定した測定値の位置を示す座標ベクトルを作成してから、を使用することinterp1です。

たとえば、ポイント0、0.5、および1に3つの測定値があるとすると、座標ベクトルはになります[0, 0.5, 1]0測定値はとの間で等間隔に定義されているようsemispanです。この場合、を使用して、これらの値の間で(および含む)N個の等間隔の座標のベクトルを作成できますlinspace(0, semispan, N)

測定値の座標と測定値自体を取得したら、を使用interp1して実際の測定値間の値を補間できます。

これは機能するはずです:

% For finding the lift curve slope across a wing
semispan = 8; % User inputs
C_L = [1.4,1.6,1.7,1.4,1.1,0.0]; % from a user input at stations which equally subdivide the wing.
C_L_coord = linspace(0, semispan, length(C_L));

x = 0:0.2:semispan

% C_L needs to be the same length as x
C_L_interpolated = interp1(C_L_coord, C_L, x);

plot(C_L_coord, C_L, x, C_L_interpolated);
于 2012-10-21T16:32:26.870 に答える