Matlab: interpolar 4 valores de esquina sobre toda la matriz

Tengo una matriz de 20x23 en Matlab de la cual los 4 rincones tienen un valor:

(1,1) = 16.46
(1,23) = 16.16
(20,1) = 16.93
(20,23) = 16.57

¿Cómo puedo interponer estos valores sobre todo el dominio 20x23?

¡Gracias!

Pregunta hecha hace 3 años, 4 meses, 28 días - Por algoarchitect


4 Respuestas:

  • Básicamente estás haciendo una sola célula de bilinear interpolation.

    Así que desde el enlace, la fórmula que necesitas es

    formula

    Podrías usar interp2Pero para ser diferente de la respuesta de Michael también podríamos implementar esto nosotros mismos...

    % Setup
    x = [1, 23];
    y = [1, 20];
    z = [16.46, 16.93;
         16.16, 16.57];
    
    % Interpolation function
    biLinearInterp = @(xi,yi) ( 1/( (x(2)-x(1))*(y(2)-y(1)) ) ) * ...
                            [x(2)-xi, xi-x(1)] * z * [y(2)-yi; yi-y(1)];
    
    % Create data
    [X, Y] = meshgrid( x(1):x(2), y(1):y(2) );
    Z = arrayfun( @(xi,yi) biLinearInterp(xi,yi), X, Y );
    

    Esto satisface tus especificaciones orignales

    Z(1,1) = 16.46
    Z(1,23) = 16.16
    Z(20,1) = 16.93
    Z(20,23) = 16.57
    

    Con interpolación lineal entre

    Respondida el Dec 18, 2020 a las 15:54 - por devgeek

    Votos positivos: 0 | Votos negativos: 0

  • En este ejemplo usé 'linear' interpolación. A continuación, hago referencia a la matriz como puntos de muestra donde defino los rincones de la matriz como coordenadas (1,1), (1,2), (2,1) y (2,2). Interponer los valores de los Matrix dos vectores tienen que ser creados para definir puntos de consulta. Esto actúa como una red más fina (dominio espacial) que dice el interp2() función los puntos (entre) para interponer. Esto por supuesto es un enfoque integrado y hay métodos alternativos.

    Algunos métodos de interpolación disponibles para interp2(): 'linear','nearest','cubic','spline','makima'

    Interpolated Matrix Colour Plot

    Matrix(1,1) = 16.46; %Top-left corner%
    Matrix(1,2) = 16.16; %Top-right corner%
    Matrix(2,1) = 16.93; %Bottom-left corner%
    Matrix(2,2) = 16.57; %Bottom-right corner%
    
    Width = 23;
    Height = 20;
    
    Finer_X_Points = linspace(1,2,Width);
    Finer_Y_Points = linspace(1,2,Height)';
    Finer_Matrix = interp2(Matrix,Finer_X_Points,Finer_Y_Points,'linear');
    

    Para el color adicional Parcela:

    pcolor(flip(Finer_Matrix,1));
    title("Interpolated Matrix");
    colorbar
    axis off
    

    Ran utilizando MATLAB R2019b

    Respondida el Dec 18, 2020 a las 16:04 - por geekglitcher1735

    Votos positivos: 0 | Votos negativos: 0

  • Para interpolar estos 4 valores de esquina sobre toda la matriz 20x23 en Matlab, puedes utilizar la función interp2. Aquí te muestro un ejemplo de cómo hacerlo:

    matlab
    % Definir las coordenadas de los puntos de esquina
    x = [1, 23];
    y = [1, 20];
    z = [16.46, 16.57; 16.16, 16.93];
    
    % Crear una cuadrícula para interpolar
    [X, Y] = meshgrid(1:23, 1:20);
    
    % Interpolar los valores
    Z = interp2(x, y, z, X, Y);
    
    % Mostrar la matriz interpolada
    disp(Z);
    

    En este código, primero definimos las coordenadas de los puntos de esquina y los valores correspondientes. Luego creamos una cuadrícula utilizando meshgrid. Finalmente, usamos interp2 para interpolar los valores en toda la matriz y mostramos la matriz interpolada.

    Respondida el Dec 19, 2020 a las 15:57 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Puedes utilizar la función interp2 de MATLAB para interpolar los valores de las esquinas sobre toda la matriz:

    
    % Valores de las esquinas
    esquina1_valor = 16.46;
    esquina2_valor = 16.16;
    esquina3_valor = 16.93;
    esquina4_valor = 16.57;
    
    % Coordenadas de las esquinas
    esquina1_x = 1;
    esquina1_y = 1;
    esquina2_x = 1;
    esquina2_y = 23;
    esquina3_x = 20;
    esquina3_y = 1;
    esquina4_x = 20;
    esquina4_y = 23;
    
    % Crea una malla para la interpolación
    [X, Y] = meshgrid(1:23, 1:20);
    
    % Interpola los valores de las esquinas sobre la malla
    matriz_interpolada = interp2([esquina1_x, esquina2_x, esquina3_x, esquina4_x], ...
                                [esquina1_y, esquina2_y, esquina3_y, esquina4_y], ...
                                [esquina1_valor, esquina2_valor, esquina3_valor, esquina4_valor], ...
                                X, Y);
    
    % Imprime la matriz interpolada
    disp(matriz_interpolada)
    

    Esta función utiliza interpolación bilineal para estimar los valores en los puntos de la malla.

    Respondida el Dec 19, 2020 a las 16:03 - por Gemini

    Votos positivos: 0 | Votos negativos: 0