matlab插值计算

matlab插值计算0,说明关于插值,官网有个小总结,可以直接去参考(从1维到多维),下面是我举的例子。1,一维插值interp1(x,y,X1,method)x=linspace(0,10,11)y=sin(x)plot(x,y,’-ro’)插值方法有如下:method=‘nearest’,‘linear’,‘spline’,‘pchip’,‘cubic’比如使用三次条样插值spline,则x=linspace(0,10,11)y=sin(x)plot(x,y,’-ro’)x

大家好,又见面了,我是你们的朋友全栈君。

0, 说明

关于插值,官网有个小总结,可以直接去参考(从1维到多维),下面是我举的例子。

1, 一维插值interp1(x,y,X1,method)

x = linspace(0,10,11)
y = sin(x)
plot(x,y,'-ro')

在这里插入图片描述
插值方法有如下:
method=‘nearest’,‘linear’,‘spline’,‘pchip’,‘cubic’
比如使用三次条样插值spline,则

x = linspace(0,10,11)
y = sin(x)
plot(x,y,'-ro')

xnew = linspace(0,10,101)
f = interp1(x,y,xnew,'spline')
plot(xnew,f)

在这里插入图片描述

2,高维插值

2.1 二维插值

使用interp2(X,Y,Z,X1,Y1,method)函数, method包含:nearest,‘linear’,‘spline’,‘cubic’

x = linspace(-5,5,11);
y = linspace(-5,5,11);
[X,Y] = meshgrid(x,y);
Z = 3.*sin(X.^2+Y.^2);

xi = linspace(-5,5,100);
yi = linspace(-5,5,100);
[XI,YI]=meshgrid(xi,yi);
ZI = interp2(X,Y,Z,XI,YI,'cubic');

surf(XI,YI,ZI),view(-25,25)

在这里插入图片描述

2.2 三维插值

参考官网,用法如下

Vq = interp3(X,Y,Z,V,Xq,Yq,Zq)
Vq = interp3(V,Xq,Yq,Zq)

但这个方法有时候不是很实用,主要是X,Y,Z都要弄成网格的形式,因此我一般大于等于三维的时候就直接采用interpn了,见下一节。

2.3 多维插值

大于等于三维一般采用interpn,可以参考官网用法

Vq = interpn(X1,X2,...,Xn,V,Xq1,Xq2,...,Xqn)

这里x1,x2,...xn,以及xq1,xq2,...xqn都是一维的(注意是单调函数),所以比Interp3简单很多。
方法有如下method: ‘linear’, ‘nearest’, ‘pchip’,‘cubic’, ‘makima’, or ‘spline’. The default method is ‘linear’.
举例
1)插值一个点
现在有一个高维数据(4维),横坐标是经度,纵坐标是维度,高是海拔,V的值是在这三维中的水汽含量。我现在有了V的数据,这个数据是(37,10,10)的大小,表示高有37层,经纬度分别都是10的大小(因此经纬度构成100的数据网格),现在要计算高500m,经纬度分别为(80,32)的点的值(插值)

data_path = 'C:\Users\Lenovo\Desktop\recent work\matlab_interp\'
el = importdata([data_path,'el_sort.txt']);  %海拔
lat = importdata([data_path,'lat_sort.txt']);  %纬度
lon = importdata([data_path,'lon_sort.txt']);   %经度
V = readNPY([data_path,'s_h_reverse.npy']);    %数据
Vq = interpn(el,lon,lat,V,500,80,32,'spline')    %插值

在这里插入图片描述
2)插值两个点
上面插值只在一个点(500,80,30)上进行,但有时我们要插值的是很多个点构成的数组。

%(500,80.03,32.3)(900,81.2,31.4)两个点插值
Vq = interpn(el,lon,lat,V,[500 900],[80.03 81.2],[32.3 31.4],'spline')

  1. 多个点(数组)
Vq = interpn(el,lon,lat,squeeze(s_h_full(i,:,:,:)),coor(:,1),coor(:,2),coor(:,3),'spline')

这里coor表示坐标,有海拔,经,纬度,都是一列。
完整代码

data_path = 'C:\Users\Lenovo\Desktop\recent work\matlab_interp\';
el = importdata([data_path,'el_sort.txt']);  %海拔
lat = importdata([data_path,'lat_sort.txt']);  %纬度
lon = importdata([data_path,'lon_sort.txt']);   %经度
V = readNPY([data_path,'s_h_full_inv.npy']);    %数据
coor = readNPY([data_path,'coor_in_new.npy']);
levell = 50;
hours = 720;
s_h_interp = [];
for i = 1:hours
    Vq = interpn(el,lon,lat,squeeze(V(i,:,:,:)),coor(:,1),coor(:,2),coor(:,3),'spline');
    s_h_interp = horzcat(s_h_interp,Vq);
end
writeNPY(s_h_interp,[data_path,'s_h_interp_matlab_161.npy'])
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136155.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java和C语言有什么区别?[通俗易懂]

    Java和C语言有什么区别?[通俗易懂]Java和C语言作为现在行业中经常被人提起的两种语言,有很大的区别。选择不同的语言学习以后的发展也会大不相同,那么Java和C语言有什么区别呢?现在学哪种语言更合适呢?从概念上看,C语言是一门面向过程、抽象化的通用程序设计语言;Java是一门面向对象编程语言,而Java语言是从C语言衍生而来,它吸收了C++语言的各种优点,并且摒弃了C++里难以理解的多继承、指针等概念。从概念可以看出C语言相当…

    2022年7月7日
    18
  • activity的用法总结_pagemanager

    activity的用法总结_pagemanagerActivityManager总结列表1.公共方法(1)getMemoryClass()通过以兆为单位获取当前应用可用的内存大小。(2)getLargeMemoryClass()当开发者在manifest文件中的标签中设置largeHeap属性的值为”true”时,当前应用就可以获取到系统分配的最大堆内存.如果你设置了该值,可以通过ActivityMa

    2025年9月25日
    4
  • 初识lldp协议

    初识lldp协议1、背景:问题:CDN的场景下,同组cache机器规划不规范,额外产生级联带宽,造成级联带宽跑满,导致丢包和速度变慢;愿景:1、平台支持扫描cache机在网络中的物理位置信息,作为cache机规划的依据,避免产生级联带宽;2、支持出口带宽和级联带宽的报警,当出现出口带宽大于级联带宽时,能报警提醒。当前,交换机使用两层交换机堆叠,外网核心下接外网

    2022年6月2日
    43
  • golang 激活码 2021[在线序列号][通俗易懂]

    golang 激活码 2021[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    82
  • windows安装mysql8.0_windows7哪个版本功能最多

    windows安装mysql8.0_windows7哪个版本功能最多Windows系统Mysql8.0.28的安装教程

    2022年9月14日
    2
  • 记一次mybatis关联映射之两条sql映射到一个resultMap中「建议收藏」

    记一次mybatis关联映射之两条sql映射到一个resultMap中「建议收藏」目标:在一个查询结果中嵌入另一个Sql的结果集ArrayList。用第一条Sql的结果集中的某些字段值为参数传给第二条Sql(其实是传给第二条Sql的Dao接口,传的参数要对应Dao接口中的形参)第一条SQL<selectid=”elsQueryAll”resultMap=”CompanyResultMapDto”>SELECTid,…

    2022年9月1日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号