- Matlab 教程
- MATLAB - 首頁
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 環境設定
- MATLAB - 編輯器
- MATLAB - 線上
- MATLAB - 工作區
- MATLAB - 語法
- MATLAB - 變數
- MATLAB - 命令
- MATLAB - 資料型別
- MATLAB - 運算子
- MATLAB - 日期和時間
- MATLAB - 數字
- MATLAB - 隨機數
- MATLAB - 字串和字元
- MATLAB - 文字格式化
- MATLAB - 時間表
- MATLAB - M 檔案
- MATLAB - 冒號表示法
- MATLAB - 資料匯入
- MATLAB - 資料輸出
- MATLAB - 資料歸一化
- MATLAB - 預定義變數
- MATLAB - 決策制定
- MATLAB - 決策
- MATLAB - If End 語句
- MATLAB - If Else 語句
- MATLAB - If…Elseif Else 語句
- MATLAB - 巢狀 If 語句
- MATLAB - Switch 語句
- MATLAB - 巢狀 Switch
- MATLAB - 迴圈
- MATLAB - 迴圈
- MATLAB - For 迴圈
- MATLAB - While 迴圈
- MATLAB - 巢狀迴圈
- MATLAB - Break 語句
- MATLAB - Continue 語句
- MATLAB - End 語句
- MATLAB - 陣列
- MATLAB - 陣列
- MATLAB - 向量
- MATLAB - 轉置運算子
- MATLAB - 陣列索引
- MATLAB - 多維陣列
- MATLAB - 相容陣列
- MATLAB - 分類陣列
- MATLAB - 元胞陣列
- MATLAB - 矩陣
- MATLAB - 稀疏矩陣
- MATLAB - 表格
- MATLAB - 結構體
- MATLAB - 陣列乘法
- MATLAB - 陣列除法
- MATLAB - 陣列函式
- MATLAB - 函式
- MATLAB - 函式
- MATLAB - 函式引數
- MATLAB - 匿名函式
- MATLAB - 巢狀函式
- MATLAB - 返回語句
- MATLAB - 空函式
- MATLAB - 區域性函式
- MATLAB - 全域性變數
- MATLAB - 函式控制代碼
- MATLAB - 濾波器函式
- MATLAB - 階乘
- MATLAB - 私有函式
- MATLAB - 子函式
- MATLAB - 遞迴函式
- MATLAB - 函式優先順序順序
- MATLAB - 對映函式
- MATLAB - 平均值函式
- MATLAB - End 函式
- MATLAB - 錯誤處理
- MATLAB - 錯誤處理
- MATLAB - Try...Catch 語句
- MATLAB - 除錯
- MATLAB - 繪圖
- MATLAB - 繪圖
- MATLAB - 繪製陣列
- MATLAB - 繪製向量
- MATLAB - 條形圖
- MATLAB - 直方圖
- MATLAB - 圖形
- MATLAB - 二維線圖
- MATLAB - 三維圖
- MATLAB - 格式化繪圖
- MATLAB - 對數座標軸圖
- MATLAB - 繪製誤差條
- MATLAB - 繪製三維等值線
- MATLAB - 極座標圖
- MATLAB - 散點圖
- MATLAB - 繪製表示式或函式
- MATLAB - 繪製矩形
- MATLAB - 繪製頻譜圖
- MATLAB - 繪製網格曲面
- MATLAB - 繪製正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 線性插值
- MATLAB - 二維陣列插值
- MATLAB - 三維陣列插值
- MATLAB - 多項式
- MATLAB - 多項式
- MATLAB - 多項式加法
- MATLAB - 多項式乘法
- MATLAB - 多項式除法
- MATLAB - 多項式的導數
- MATLAB - 變換
- MATLAB - 變換
- MATLAB - 拉普拉斯變換
- MATLAB - 拉普拉斯濾波器
- MATLAB - 高斯-拉普拉斯濾波器
- MATLAB - 逆傅立葉變換
- MATLAB - 傅立葉變換
- MATLAB - 快速傅立葉變換
- MATLAB - 二維逆餘弦變換
- MATLAB - 向座標軸新增圖例
- MATLAB - 面向物件
- MATLAB - 面向物件程式設計
- MATLAB - 類和物件
- MATLAB - 函式過載
- MATLAB - 運算子過載
- MATLAB - 使用者定義類
- MATLAB - 複製物件
- MATLAB - 代數
- MATLAB - 線性代數
- MATLAB - 高斯消元法
- MATLAB - 高斯-約旦消元法
- MATLAB - 簡化行階梯形式
- MATLAB - 特徵值和特徵向量
- MATLAB - 積分
- MATLAB - 積分
- MATLAB - 二重積分
- MATLAB - 梯形法則
- MATLAB - 辛普森法則
- MATLAB - 其他
- MATLAB - 微積分
- MATLAB - 微分
- MATLAB - 矩陣的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用資源
- MATLAB - 快速指南
- MATLAB - 有用資源
- MATLAB - 討論
MATLAB - 二維陣列插值
在 MATLAB 中,二維陣列插值是一種用於估計二維網格點之間值的方法。這對於建立資料的更平滑表示或提高影像解析度很有用。interp2 函式通常用於二維陣列插值。
語法
Vq = interp2(X,Y,V,Xq,Yq) Vq = interp2(V,Xq,Yq) Vq = interp2(V) Vq = interp2(V,k) Vq = interp2(___,method)
解釋
Vq = interp2(X,Y,V,Xq,Yq) 是 MATLAB 中的一個函式,可幫助您估計網格點之間的值。當您在網格 (X, Y) 中有一組點及其對應的函式值 (V) 時,interp2 可以使用線性插值計算網格中其他點 (Xq, Yq) 處的函式值。插值值始終位於原始網格上。
Vq = interp2(V,Xq,Yq) 即使不指定精確點,也可以估計網格中的值。它假設一個覆蓋整個輸入網格 V 的預設網格。當您想要節省記憶體並且不需要知道點之間精確距離時,此預設網格很有用。
Vq = interp2(V) 即使不指定精確點,也可以估計網格中的值。它假設一個覆蓋整個輸入網格 V 的預設網格。當您想要節省記憶體並且不需要知道點之間精確距離時,此預設網格很有用。
Vq = interp2(V,k) 可以透過劃分樣本值之間的間隔來估計網格中的值。引數 k 指定劃分間隔的次數。這會建立一個更精細的網格,在原始樣本值之間具有更多插值點。
Vq = interp2(___,method) 允許您選擇如何在網格上的點之間估計值。您可以使用諸如 'linear'、'nearest'、'cubic'、'makima' 或 'spline' 之類的方法。預設方法為 'linear',它在點之間建立直線。
陣列插值的示例
這裡讓我們嘗試一些使用上面提到的語法的陣列插值示例。
示例 1
以下是如何使用Vq = interp2(X,Y,V,Xq,Yq)計算陣列插值的示例 -
[X, Y] = meshgrid(1:4, 1:4);
V = [5 6 7 8; 9 10 11 12; 13 14 15 16; 17 18 19 20];
[Xq, Yq] = meshgrid(1:0.5:4, 1:0.5:4);
% Perform 2D linear interpolation
Vq = interp2(X, Y, V, Xq, Yq);
% Plot the original surface
figure;
surf(X, Y, V);
title('Original Surface');
xlabel('X');
ylabel('Y');
zlabel('Value');
% Plot the interpolated surface
figure;
surf(Xq, Yq, Vq);
title('Interpolated Surface');
xlabel('Xq');
ylabel('Yq');
zlabel('Interpolated Value');
在上面的示例中,我們有 -
- 我們首先使用 meshgrid 建立一個樣本點 (X, Y) 網格。此網格中的每個點對應於矩陣 V 中的一個值。
- 接下來,我們透過在每個維度上將樣本點之間的間隔除以 2 來建立一個更精細的查詢點 (Xq, Yq) 網格。這些是我們想要插值值的點。
- 我們使用 interp2 函式對原始網格 (X, Y) 使用查詢點 (Xq, Yq) 執行線性插值。
- 我們使用 surf 函式建立原始資料 (X, Y, V) 的曲面圖。這顯示了由矩陣 V 表示的原始曲面。
- 我們再次使用 surf 函式建立插值值 (Xq, Yq, Vq) 的曲面圖。這顯示了插值如何估計查詢點 (Xq, Yq) 處的值。
- 透過比較原始曲面和插值曲面,我們可以直觀地看到插值如何填充原始資料點之間的間隙。
在程式碼執行時,我們得到的輸出如下 -
示例 2
以下是如何使用Vq = interp2(V,Xq,Yq)計算陣列插值的示例 -
V = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];
[Xq, Yq] = meshgrid(1:0.5:4, 1:0.5:4);
Vq = interp2(V, Xq, Yq);
% Plot the original grid V
subplot(1, 2, 1);
surf(V);
title('Original Grid V');
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Value');
% Plot the interpolated grid Vq
subplot(1, 2, 2);
surf(Vq);
title('Interpolated Grid Vq');
xlabel('Xq-axis');
ylabel('Yq-axis');
zlabel('Interpolated Value');
在上面的示例中,我們有 -
- 我們首先定義一個由矩陣 V 表示的 4x4 樣本點網格。
- 我們使用 meshgrid 建立一個更精細的查詢點 (Xq, Yq) 網格。這些是我們想要從原始網格插值值的點。
- 我們使用 interp2 函式對整個輸入網格 V 使用查詢點 (Xq, Yq) 執行線性插值。
- 我們使用 surf 函式繪製原始網格 V 和插值網格 Vq 以視覺化曲面。子圖用於並排顯示兩個圖以進行比較。
執行後的輸出如下 -
示例 3
以下是如何使用Vq = interp2(V)計算陣列插值的示例 -
V = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];
Vq = interp2(V);
% Plot the original grid V
subplot(1, 2, 1);
surf(V);
title('Original Grid V');
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Value');
% Plot the interpolated grid Vq
subplot(1, 2, 2);
surf(Vq);
title('Interpolated Grid Vq');
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Interpolated Value');
在上面的示例中,我們有 -
- 我們首先定義一個由矩陣 V 表示的 4x4 樣本點網格。
- 我們使用 interp2 函式而不指定 Xq 和 Yq,這會導致它使用一個覆蓋整個輸入網格 V 的預設網格。此預設網格用於估計中間點的值。
- 我們使用 surf 函式繪製原始網格 V 和插值網格 Vq 以視覺化曲面。子圖用於並排顯示兩個圖以進行比較。
在程式碼執行時,我們得到的輸出如下 -
示例 4
以下是如何使用Vq = interp2(V,k)計算陣列插值的示例 -
V = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];
k = 2;
Vq = interp2(V, k);
% Plot the original grid V
subplot(1, 2, 1);
surf(V);
title('Original Grid V');
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Value');
% Plot the interpolated grid Vq
subplot(1, 2, 2);
surf(Vq);
title('Interpolated Grid Vq (k=2)');
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Interpolated Value');
在上面的示例中,我們有 -
- 我們首先定義一個由矩陣 V 表示的 4x4 樣本點網格。
- 我們使用帶引數 k=2 的 interp2 函式,該引數指定樣本值之間的間隔應分成兩部分。這會建立一個更精細的網格,在原始樣本值之間具有更多插值點。
- 我們使用 surf 函式繪製原始網格 V 和插值網格 Vq 以視覺化曲面。子圖用於並排顯示兩個圖以進行比較。
在程式碼執行時,我們得到的輸出如下 -
示例 5
以下是如何使用Vq = interp2(___,method)計算陣列插值的示例 -
[X, Y] = meshgrid(-3:0.2:3, -3:0.2:3);
Z = peaks(X, Y);
[Xq, Yq] = meshgrid(-3:0.05:3, -3:0.05:3);
% Perform 2D linear interpolation
Zq = interp2(X, Y, Z, Xq, Yq, 'linear');
% Plot the original and interpolated surfaces
subplot(1, 2, 1);
surf(X, Y, Z);
title('Original Surface');
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
subplot(1, 2, 2);
surf(Xq, Yq, Zq);
title('Interpolated Surface');
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
在上面的示例中,我們有 -
- meshgrid 函式建立了一個從 -3 到 3 跨越的點 (X, Y) 網格,步長為 0.2。
- 然後使用 peaks 函式根據 X 和 Y 網格計算 Z 值。
- 另一個網格 (Xq, Yq) 使用更精細的步長 0.05 進行插值。
- interp2 用於在原始 (X, Y, Z) 網格和更精細的 (Xq, Yq) 網格之間執行二維線性插值,從而產生插值 Zq 值。
- 原始曲面和插值曲面都使用 surf 函式繪製以視覺化插值過程。
在程式碼執行時,我們得到的輸出如下 -
示例 6
以下是如何在網格上計算陣列插值的示例 -
[X, Y] = meshgrid(1:4, 1:4);
V = X.^2 + Y.^2;
[Xq, Yq] = meshgrid(1:0.1:4, 1:0.1:4);
% Perform 2D linear interpolation
Vq = interp2(X, Y, V, Xq, Yq, 'linear');
% Plot the original and interpolated surfaces
subplot(1, 2, 1);
surf(X, Y, V);
title('Original Grid V');
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Value');
subplot(1, 2, 2);
surf(Xq, Yq, Vq);
title('Interpolated Grid Vq');
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Interpolated Value');
在上面的示例中,我們有 -
- 我們使用 meshgrid 建立一個樣本點 (X, Y) 網格。V 定義為 X 和 Y 的函式。在這種情況下,V = X^2 + Y^2。
- 我們使用 meshgrid 建立一個更精細的網格 (Xq, Yq) 以定義我們想要插值值的點。
- 我們使用 interp2 函式在點 (Xq, Yq) 處插值 V 的值。'linear' 方法用於插值。
- 我們使用 surf 函式繪製原始網格 V 和插值網格 Vq 以視覺化曲面。子圖用於並排顯示兩個圖以進行比較。
在程式碼執行時,我們得到的輸出如下 -