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
Podrías usar
interp2
Pero 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 losMatrix
dos vectores tienen que ser creados para definir puntos de consulta. Esto actúa como una red más fina (dominio espacial) que dice elinterp2()
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'
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, usamosinterp2
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