Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab interp2外推_Matlab_Extrapolation - Fatal编程技术网

Matlab interp2外推

Matlab interp2外推,matlab,extrapolation,Matlab,Extrapolation,我正在使用interp2进行二维插值。对于某些数据值 interp2命令返回NaN,因为其中一个维度在外部 由已知值的向量定义的范围 可以使用interp1命令进行推断。然而,它是 对于interp2,有没有办法做到这一点 谢谢 以下是我使用interp2命令的代码: function [Cla] = AirfoilLiftCurveSlope(obj,AFdata,Rc,M) % Input: % AFdata: Airfoil coordinates. % Rc: Local Reynol

我正在使用
interp2
进行二维插值。对于某些数据值 interp2命令返回NaN,因为其中一个维度在外部 由已知值的向量定义的范围

可以使用
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

是的,有两种方法可以获取
interp2
,以根据返回有意义的越界值

  • 使用
    “样条曲线”
    插值方法。与选项#2不同,这实际上将根据样条曲线的边界条件推断数据
  • 指定最终的
    extrapval
    参数。对于所有其他插值方法,将返回该常数,而不是
    NaN
  • 不幸的是,似乎没有办法指定“网格上最近的邻居”之类的内容。如果超出边界的元素靠近边,也许可以展开输入数组。例如:

    x = [x(1, 1), x(1, :), x(1, end); ...
         x(:, 1), x, x(:, end); ...
         x(end, 1), x(end, :), x(end, end)]
    

    是的,有两种方法可以获取
    interp2
    ,以根据返回有意义的越界值

  • 使用
    “样条曲线”
    插值方法。与选项#2不同,这实际上将根据样条曲线的边界条件推断数据
  • 指定最终的
    extrapval
    参数。对于所有其他插值方法,将返回该常数,而不是
    NaN
  • 不幸的是,似乎没有办法指定“网格上最近的邻居”之类的内容。如果超出边界的元素靠近边,也许可以展开输入数组。例如:

    x = [x(1, 1), x(1, :), x(1, end); ...
         x(:, 1), x, x(:, end); ...
         x(end, 1), x(end, :), x(end, end)]
    

    嘿,请找到我的interp2代码,它只需要最大值

    function vq = Linear2dInterpWithClipExtrap(x,y,v,xq,yq);
    
        vq = interp2(x,y,v,xq,yq);
    
        [XMax, idxVMax] = max(x);
        [XMin, idxVMin] = min(x);
    
        idxMax = xq > XMax;
        idxMin = xq < XMin;
       if ~isempty(yq(idxMax));
        vq(idxMax) = LinearInterpWithClipExtrap(y,v(:,idxVMax),yq(idxMax));
       end
       if ~ isempty(yq(idxMin))
        vq(idxMin) = LinearInterpWithClipExtrap(y,v(:,idxVMin),yq(idxMin));
       end
    
       [YMax, idyVMax] = max(y);
        [YMin, idyVMin] = min(y);
    
        idyMax = yq > YMax;
        idyMin = yq < YMin;
       if ~isempty(xq(idyMax));
        vq(idyMax) = LinearInterpWithClipExtrap(x,v(idyVMax,:),xq(idyMax));
       end
       if ~ isempty(xq(idyMin));
        vq(idyMin) = LinearInterpWithClipExtrap(x,v(idyVMin,:),xq(idyMin));
       end
    
    
    
    function vq = LinearInterpWithClipExtrap(x,v,xq);
    
        vq = interp1(x,v,xq);
    
        [XMax, idxVMax] = max(x);
        [XMin, idxVMin] = min(x);
    
        idxMax = xq > XMax;
        idxMin = xq < XMin;
    
        vq(idxMax) = v(idxVMax);
        vq(idxMin) = v(idxVMin
    
    函数vq=Linear2dInterpWithClipExtrap(x,y,v,xq,yq);
    vq=interp2(x,y,v,xq,yq);
    [XMax,idxVMax]=max(x);
    [XMin,idxVMin]=min(x);
    idxMax=xq>XMax;
    idxMin=xqYMax;
    idyMin=yqXMax;
    idxMin=xq

    ))

    嘿,请找到我的interp2代码,它只取最大界限值

    function vq = Linear2dInterpWithClipExtrap(x,y,v,xq,yq);
    
        vq = interp2(x,y,v,xq,yq);
    
        [XMax, idxVMax] = max(x);
        [XMin, idxVMin] = min(x);
    
        idxMax = xq > XMax;
        idxMin = xq < XMin;
       if ~isempty(yq(idxMax));
        vq(idxMax) = LinearInterpWithClipExtrap(y,v(:,idxVMax),yq(idxMax));
       end
       if ~ isempty(yq(idxMin))
        vq(idxMin) = LinearInterpWithClipExtrap(y,v(:,idxVMin),yq(idxMin));
       end
    
       [YMax, idyVMax] = max(y);
        [YMin, idyVMin] = min(y);
    
        idyMax = yq > YMax;
        idyMin = yq < YMin;
       if ~isempty(xq(idyMax));
        vq(idyMax) = LinearInterpWithClipExtrap(x,v(idyVMax,:),xq(idyMax));
       end
       if ~ isempty(xq(idyMin));
        vq(idyMin) = LinearInterpWithClipExtrap(x,v(idyVMin,:),xq(idyMin));
       end
    
    
    
    function vq = LinearInterpWithClipExtrap(x,v,xq);
    
        vq = interp1(x,v,xq);
    
        [XMax, idxVMax] = max(x);
        [XMin, idxVMin] = min(x);
    
        idxMax = xq > XMax;
        idxMin = xq < XMin;
    
        vq(idxMax) = v(idxVMax);
        vq(idxMin) = v(idxVMin
    
    函数vq=Linear2dInterpWithClipExtrap(x,y,v,xq,yq);
    vq=interp2(x,y,v,xq,yq);
    [XMax,idxVMax]=max(x);
    [XMin,idxVMin]=min(x);
    idxMax=xq>XMax;
    idxMin=xqYMax;
    idyMin=yqXMax;
    idxMin=xq

    ))

    请你详细说明你的第一点好吗?我似乎不明白你想用它说什么。感谢you@BalrajBoyal. 我不知道有什么不清楚,但我认为新的措辞会澄清问题。你能详细说明你的第一点吗?我似乎不明白你想用它说什么。感谢you@BalrajBoyal. 我不知道有什么不清楚,但我认为新的措辞会把它弄清楚。