Я делаю двухмерную интерполяцию с использованием interp2
. Для некоторых значений данных команда interp2 возвращает NaN, потому что одно из измерений находится вне диапазона, определенного вектором известных значений.Matlab interp2 экстраполяция
Его можно экстраполировать с помощью команды interp1
. Однако есть ли способ сделать это для interp2
?
Благодаря
Вот код, в котором я использую interp2 команду:
function [Cla] = AirfoilLiftCurveSlope(obj,AFdata,Rc,M)
% Input:
% AFdata: Airfoil coordinates.
% Rc: Local Reynolds number.
% M: Mach number for Prandtle Glauert compressibility correction.
% Output:
% Cla: 2 dimensional lift curve slopea applicable to linear region of lift polar.
load('ESDU84026a.mat');
xi = size(AFdata);
if mod(xi(1,1),2) == 0
%number is even
AFupper = flipud(AFdata(1:(xi(1,1)/2),:));
AFlower = AFdata(((xi(1,1)/2)+1):end,:);
else
%number is odd
AFupper = flipud(AFdata(1:floor((xi(1,1)/2)),:));
AFlower = AFdata((floor(xi(1,1)/2)+1):end,:);
end
t_c = Airfoil.calculateThickness(AFdata(:,2));
Y90 = ((interp1(AFupper(:,1),AFupper(:,2),0.9,'linear')) - (interp1(AFlower(:,1),AFlower(:,2),0.9,'linear')))*100;
Y99 = ((interp1(AFupper(:,1),AFupper(:,2),0.99,'linear')) - (interp1(AFlower(:,1),AFlower(:,2),0.99,'linear')))*100;
Phi_TE = (2 * atan(((Y90/2) - (Y99/2))/9))*180/pi; % Degrees
Tan_Phi_Te = ((Y90/2) - (Y99/2))/9;
Cla_corr = interp2(Tan_Phi,Rc_cla,cla_ratio,Tan_Phi_Te,Rc,'linear');
beta =sqrt((1-M^2)); % Prandtle Glauert correction
Cla_theory = 2*pi + 4.7*t_c*(1+0.00375 * Phi_TE); % per rad
Cla = (1.05/beta) * Cla_corr * Cla_theory; % per rad
if isnan(Cla) == 1 %|| Cla > 2*pi
Cla = 2*pi;
end
end
Не могли бы вы рассказать о своем первом пункте? Кажется, я не понимаю, что вы пытаетесь сказать. Спасибо –
@BalrajBoyal. Не уверен, что не ясно, но я думаю, что новая формулировка прояснит ситуацию. –