Matlab插值
1.一維插值函數(shù)
matlab中有現(xiàn)成的一維插值函數(shù)interp1
語(yǔ)法為
其中method指定插值的方法,默認(rèn)為線性插值。其值可為
| nearest | 最近項(xiàng)插值 |
| linear | 線性插值 |
| spline | 立方樣條插值 |
| cubic | 立方插值 |
所有的插值方法要求x0是單調(diào)的。
2.三次樣條插值
在matlab中數(shù)據(jù)點(diǎn)稱為斷點(diǎn)。如果三次樣條插值沒(méi)有邊界條件,最常用的方法就是采用非扭結(jié)(not-a-knot)條件
matlab中三次樣條插值有如下函數(shù)
其中:x0,y0是已知數(shù)據(jù)點(diǎn);x是插值點(diǎn);y是插值點(diǎn)的函數(shù)值。
對(duì)于三次樣條插值,提倡使用函數(shù)csage。csage的返回值是pp形式,要求插值點(diǎn)的函數(shù)值必須調(diào)用函數(shù)fnval。
pp=esape(x0,y0);%式中:使用默認(rèn)的邊界條件,即Lagrange邊界條件
pp=esape(x0,y0,conds,valconds);式中:conds指定插值的邊界條件,其值可為
| complete | 邊界為一階導(dǎo)數(shù),一階導(dǎo)數(shù)的值在valconds參數(shù)中給出,若忽略valconds參數(shù),則按照默認(rèn)情況處理 |
| not-a-knot | 非扭結(jié)條件 |
| periodic | 周期條件 |
| second | 邊界為二階導(dǎo)數(shù),二階導(dǎo)數(shù)的值在valconds參數(shù)中給出,若忽略valconds參數(shù),二階導(dǎo)數(shù)的默認(rèn)值為[0,0] |
| variational | 設(shè)置邊界的二階導(dǎo)數(shù)為[0,0] |
對(duì)于一些特殊的邊界條件,可以通過(guò)conds的一個(gè)1*2的矩陣來(lái)表示,conds元素的取值為0、1、2.
插值舉例
結(jié)果
結(jié)果分析:分段線性插值的光滑性較差(圖1),建議選用三次樣條插值。
matlab代碼
clc;clear; x0=[0 3 5 7 9 11 12 13 14 15]; y0=[0,1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6];x=0:0.1:15; y1=interp1(x0,y0,x);%一維插值,默認(rèn)線性插值y2=interp1(x0,y0,x,'spline');%立方樣條插值pp1=csape(x0,y0);%三次樣條插值,默認(rèn)使用Lagrange邊界條件 y3=fnval(pp1,x);pp2=csape(x0,y0,'second');%三次樣條插值,邊界為2階導(dǎo)數(shù) y4=fnval(pp2,x); [x',y1',y2',y3',y4']%輸出結(jié)果%畫(huà)圖 subplot(1,3,1) plot(x0,y0,'+',x,y1); title("Piecewise linear");subplot(1,3,2) plot(x0,y0,'+',x,y2); title("Spline1");subplot(1,3,3) plot(x0,y0,'+',x,y3); title("Spline2");3.二維插值
若節(jié)點(diǎn)是二維,插值函數(shù)就是二元函數(shù),即曲面。
1)插值節(jié)點(diǎn)為網(wǎng)格節(jié)點(diǎn)
已知m*n個(gè)節(jié)點(diǎn):(xi,yj,zij)(x_i,y_j,z_{ij})(xi?,yj?,zij?)求點(diǎn)(x,y)處的插值z(mì)。
matlab中有一些計(jì)算二維插值的命令
其中:x0,y0分別為m維和n維向量,表示節(jié)點(diǎn)。z0為n*m矩陣,表示節(jié)點(diǎn)值;x,y為一維數(shù)組,表示插值點(diǎn),x與y應(yīng)是方向不同的向量,即一個(gè)是行向量,另一個(gè)是列向量;z為矩陣,它的行數(shù)為y的維數(shù),列數(shù)為x的維數(shù),表示得到的插值;
如果是三次樣條插值,可以使用
pp=csape({x0,y0},z0,conds,valconds); z=fnval(pp,{x,y});其中: x0,y0 分別為m 維和n維向量,z0 為m × n 維矩陣,z 為矩陣,它的行數(shù)為x的維
數(shù),列數(shù)為y 的維數(shù),表示得到的插值,具體使用方法同一維插值。
舉例:在一丘陵地帶測(cè)量高程,x 和y 方向每隔100米測(cè)一個(gè)點(diǎn),得高程如2表,試插
值一曲面,確定合適的模型,并由此找出最高點(diǎn)和該點(diǎn)的高程。
運(yùn)行結(jié)果
i =8j =9x =170y =180zmax =720.62522)插值節(jié)點(diǎn)為散亂節(jié)點(diǎn)
已知n個(gè)節(jié)點(diǎn)(xi,yi,zi)(x_i,y_i,z_i)(xi?,yi?,zi?),求點(diǎn)(x,y)處的插值z(mì)
Matlab 中提供了插值函數(shù)griddata
其中x,y,z 均為n 維向量,指明所給數(shù)據(jù)點(diǎn)的橫坐標(biāo)、縱坐標(biāo)和豎坐標(biāo)。向量XI、YI 是給定的網(wǎng)格點(diǎn)的橫坐標(biāo)和縱坐標(biāo),返回值ZI 為網(wǎng)格(XI,YI)處的函數(shù)值。XI與YI 應(yīng)是方向不同的向量,即一個(gè)是行向量,另一個(gè)是列向量。
繪制海底曲面的形狀
海底水深數(shù)據(jù)
運(yùn)行結(jié)果
xmm =77 195ymm =-81 147總結(jié)
- 上一篇: Matlab最短路学习
- 下一篇: 计算机网络第二章-物理层