matlab中二维插值函数interp2的使用详解
作者:天糊土 发布时间:2023-08-11 00:28:45
下面是一段产生log-normal分布的代码,以此进行说明。
clear all;
clc;
for t=1:100
Traffic(t) =curve(t);
end
MaxTraffic = max(Traffic);
w = 0.2;
Wmax = 2*pi*w/3000;
x=[0:10:300];
y=[0:10:300];
Nx=length(x);
Ny=length(y);
Sigma = 0.53;
t = 0;
M = 10*curve(t)/MaxTraffic;
sum = 0;
for i=1:Nx
forj=1:Ny
Mu = log(M)-0.5*Sigma^2;
Rho(i,j) = RhoFromCoordination(x(i),y(j),Wmax,Sigma,Mu);
Lognrnd(i,j) = round(exp(Sigma*Rho(i,j)+Mu));
sum = Lognrnd(i,j)+sum;
end
end
sum
[xi,yi]=meshgrid(0:2:300,0:2:300);
z1=interp2(x,y,Lognrnd,xi,yi,'spline');%三次样条插值
surf(xi,yi,z1)
(1)首先理解meshgrid的原理和用法。简单地说,就是产生Oxy平面的网格坐标。
在进行3-D绘图操作时,涉及到x、y、z三组数据,而x、y这两组数据可以看做是在Oxy平面内对坐标进行采样得到的坐标对(x,y)。例如,要在“3<=x<=5,6<=y<=9,z不限制区间”这个区域内绘制一个3-D图形,如果只需要整数坐标为采样点的话。
我们可能需要下面这样一个坐标构成的矩阵:
(3,9),(4,9),(5,9);
(3,8),(4,8),(5,8);
(3,7),(4,7),(5,7);
(3,6),(4,6),(5,6);
在matlab中我们可以这样描述这个坐标矩阵
把各个点的x坐标独立出来,得:
3,4,5;
3,4,5;
3,4,5;
3,4,5;
再把各个点的y坐标也独立出来:
9,9,9;
8,8,8;
7,7,7;
6,6,6;
这样对应的x、y结合,便表示了上面的坐标矩阵。meshgrid就是产生这样两个矩阵,来简化我们的操作。然后根据(x,y)计算获得z,并绘制出三维图形。
(2)理解interp2的参数含义和用法,如ZI= interp2(X,Y,Z,XI,YI,'spline')
A、返回矩阵ZI,ZI的元素包含对应于参量XI与YI(可以是向量、或同型矩阵)的元素, 即ZI(i,j)←(XI(i),YI(j))
B、用户可以输入行向量和列向量XI与YI。
C、若XI与YI中有在X与Y范围之外的点,则相应地返回nan(Not a Number)。
D、用指定的算法method计算二维插值:
'linear' :双线性插值算法(缺省算法);
'nearest' :最临近插值;
'spline' :三次样条插值;
'cubic' :双三次插值。
E、如以下的运用:
[xi,yi] = meshgrid(0:2:300,0:2:300);
ZI = interp2(x,y,Lognrnd,xi,yi,'spline');%三次样条插值
surf(xi,yi,ZI)%这里已经不再是(x,y),而是(xi,yi)。
(3)上述的代码效果
插值前:
插值后:
补充知识:Matlab 二维插值,求面积
先将表中数据复制到EXCEL中,再导入到MATLAB中
这里只做了前两问,第三位实在不会,等学会了再补
第二问本来想着用差分求出来导数,再用面积公式,结果发现连z=f(x,y)我都不会表示。。。。。。
直接用的海伦公式,每一个方块内分成两个三角形,分开求面积
x=0:100:1200;
y=0:100:1000;
[x y]=meshgrid(x,y);
z=mydata1;
x1=0:10:1200;
y1=0:10:1000;
[x1 y1]=meshgrid(x1,y1);
z1=interp2(x,y,z,x1,y1)
surf(x1,y1,z1)
shading flat
square=0;
[r c]=size(z1)
for n=1:c-1
for m=1:r-1
a=x1(m,n+1)-x1(m,n);
b=y1(m+1,n)-y1(m,n);
temp=z1(m+1,n+1)-z1(m,n);
c=sqrt(a*a+b*b+temp*temp);
temp=z1(m,n+1)-z1(m,n);
a1=sqrt(temp*temp+a*a);
temp=z1(m+1,n+1)-z1(m,n+1);
b1=sqrt(temp*temp+b*b);
p=(a1+b1+c)/2;
square=square+sqrt(p*(p-a1)*(p-b1)*(p-c));
temp=z1(m+1,n)-z1(m,n);
b2=sqrt(b*b+temp*temp);
temp=z1(m+1,n+1)-z1(m+1,n);
a2=sqrt(temp*temp+a*a);
p=(a2+b2+c)/2;
square=square+sqrt(p*(p-a2)*(p-b2)*(p-c));
end
end
square
square =
1.2210e+06
来源:https://blog.csdn.net/oqqHuTu12345678/article/details/52664433


猜你喜欢
- 需求 Oracle调用第三方外部程序。Oracle使用sqluldr2快速导出大批量数据,然后用winrar压缩后发送邮件。源码 java
- 前言说到二手房信息,不知道你们心里最先跳出来的公司(网站)是什么,反正我心里第一个跳出来的是网站是 58 同城。哎呦,我这暴脾气,想到就赶紧
- vue中实现拖拽效果,供大家参考,具体内容如下首先要搞明白分清clientY pageY screenY layerY offsetY的区别
- 首先,我的索引结构是酱紫的。
- 可能出现的原因有:◆源数据库或目标数据库为 SQL Server 6.5 版。连接到 Access 项目的当前 SQL 服务器和要将数据库转
- 前言orztop是一款实时show full processlist的工具,我们可以实时看到数据库有哪些线程,执行哪些语句等。工具使用方便简
- 写在前面 众所周知python拥有众多的第三方库,据不完全统计python有1w多个第三方库(为什么是不完全统计,因为我也记不清了☺),
- 昨天,一同事发过来的一道数据库题目,就是哪种经典的父子级 ID 在同一数据库表中设计类型。需要在原表中添加一个字段,同时,将该节点的父子级详
- 你需要添加两个按钮:一个按钮使所有英雄都可以死亡,而另一个按钮使所有英雄永生。由于它会影响所有英雄,而与选择无关,因此这需要一个单独的按钮,
- 字符串格式化输出是python非常重要的基础语法,今天就把三种格式化输出做一个简单的总结,希望对大家有帮助。格式化输出:内容按照一定格式要求
- 获取当前工作目录import sysprint(sys.path[0])获取执行命令的位置import osprint(os.getcwd(
- 使用MSSQL的站长朋友都会被MSSQL数据库吃内存的能力佩服得五体投地,一个小小的网站,运行若干天之后,MSSQL就会把服务器上所有的内存
- 本次分析一下Logger.info的流程1. Logger.info源码: def info(self, msg, *args, **kwa
- 本文实例讲述了Python Excel表格创建乘法表。分享给大家供大家参考,具体如下:题目如下:创建程序multiplicationTabl
- 分区表的概念 分区致力于解决支持极大表和索引的关键问题。它采用他们分解成较小和易于管理的称为分区的片(piece)的方法。一旦分区被定义,S
- 安装很简单pip install psutil官网地址为:https://pythonhosted.org/psutil/ (文档上有详细的
- Python 用了好长一段时间了,起初是基于对爬虫的兴趣而接触到的。随着不断的深入,慢慢的转了其它语言,毕竟工作机会真的太少了。很多技能长时
- MySQL是Web世界中使用最广泛的数据库服务器。SQLite的特点是轻量级、可嵌入,但不能承受高并发访问,适合桌面和移动应用。而MySQL
- 1、安装 python3sudo apt install python32、卸载 python2.7 (可选)sudo apt remove
- 上期我们介绍了函数式编程,这期内容就是关于递归的函数内容,本期还是按照老规矩,给大家进行核心整理,内容通俗易懂,搭配实际应用,以供大家理解。