2017-12-04 11 views
0

私はMATLABで発生した問題に関するいくつかのアドバイスを必要としています。最初は、各グリッドポイントから指定された場所までのGreatCircle距離を計算し、最小距離を持つ対応する行/列インデックスを返します。しかし、このようにして、どのようにして補間を計算できるかわかりません。抽出データは

私は4列のベクトルデータにデータを再形成し、おそらくinterp2を利用するためにmeshgridを実行しようとしました。しかし、私はこのエラーで終わった:

Requested 109620x109620 (44.8GB) array exceeds maximum array size preference

これを行うための最も効率的な方法は何でしょうか?

+0

あなたの行列の次元は何ですか? 'Latitude'と' Longitude'はすでにmeshgridですか? – m7913d

答えて

0

大規模な配列で作業しています。代わりに、サブアレイ上のinterp2がそれを扱うことができない場合は、作業:

% Create data 
format shortG 
[Latitude,Longitude] = meshgrid(1:12,1:12); 
Altitude = floor(1000+sortrows(rand(12,12))*1000); 
Temperature = 10+20*rand(12,12); 

Lat = 2.1; 
Lon = 11.8; 

% Find closest match point 
[~,i_Lat] = min(abs(Latitude(1,:)-Lat)); 
[~,i_Lon] = min(abs(Longitude(:,1)-Lon)); 

% Select subarrays around this point. 
% Minimum size of these matrices depend on the type of interpolation you perform 
ia1 = max(1,i_Lat-5); 
ia2 = min(size(Latitude,1),i_Lat+5); 
io1 = max(1,i_Lon-5); 
io2 = min(size(Latitude,2),i_Lon+5); 

subLatitude = Latitude(io1:io2,ia1:ia2); 
subLongitude = Longitude(io1:io2,ia1:ia2); 
subAltitude = Altitude(io1:io2,ia1:ia2); 
subTemperature = Temperature(io1:io2,ia1:ia2); 

% Interpolate on these small arrays, and evaluate at target (Lat, Lon) point 
A_out = interp2(subLatitude, subLongitude, subAltitude, Lat, Lon) 
T_out = interp2(subLatitude, subLongitude, subTemperature, Lat, Lon) 
+0

あなたのアドバイスをいただきありがとうございます、私はなぜiaとioの計算で-5/+ 5があるのか​​知っていますか? – Corse

+0

@Corse。ターゲットポイントの周りの配列のサブセットにのみ補間したいとします。 + -5は任意です(線形補間+ -2も同様に機能します)。 – Laure

+0

私は参照してください。 interp2のスプライン補間を使用する必要がある場合、これはどのような値にする必要がありますか?私は-5/+ 5がやるだろうと思いますよね?基本的に補間に使用するデータ点が少し増えますか? – Corse